http://git-wip-us.apache.org/repos/asf/hbase-site/blob/29e33858/xref-test/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html
----------------------------------------------------------------------
diff --git a/xref-test/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html 
b/xref-test/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html
index b67c98d..5d8e127 100644
--- a/xref-test/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html
+++ b/xref-test/org/apache/hadoop/hbase/util/TestHBaseFsckOneRS.html
@@ -590,1238 +590,1262 @@
 <a class="jxr_linenumber" name="580" href="#580">580</a>     }
 <a class="jxr_linenumber" name="581" href="#581">581</a>   }
 <a class="jxr_linenumber" name="582" href="#582">582</a> 
-<a class="jxr_linenumber" name="583" href="#583">583</a>   @Test 
(timeout=180000)
-<a class="jxr_linenumber" name="584" href="#584">584</a>   <strong 
class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> 
testHbckAfterRegionMerge() <strong class="jxr_keyword">throws</strong> 
Exception {
-<a class="jxr_linenumber" name="585" href="#585">585</a>     TableName table = 
TableName.valueOf(<span class="jxr_string">"testMergeRegionFilesInHdfs"</span>);
-<a class="jxr_linenumber" name="586" href="#586">586</a>     Table meta = 
<strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="587" href="#587">587</a>     <strong 
class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="588" href="#588">588</a>       <em 
class="jxr_comment">// disable CatalogJanitor</em>
-<a class="jxr_linenumber" name="589" href="#589">589</a>       
TEST_UTIL.getHBaseCluster().getMaster().setCatalogJanitorEnabled(false);
-<a class="jxr_linenumber" name="590" href="#590">590</a>       
setupTable(table);
-<a class="jxr_linenumber" name="591" href="#591">591</a>       
assertEquals(ROWKEYS.length, countRows());
-<a class="jxr_linenumber" name="592" href="#592">592</a> 
-<a class="jxr_linenumber" name="593" href="#593">593</a>       <strong 
class="jxr_keyword">try</strong>(RegionLocator rl = 
connection.getRegionLocator(tbl.getName())) {
-<a class="jxr_linenumber" name="594" href="#594">594</a>         <em 
class="jxr_comment">// make sure data in regions, if in wal only there is no 
data loss</em>
-<a class="jxr_linenumber" name="595" href="#595">595</a>         
admin.flush(table);
-<a class="jxr_linenumber" name="596" href="#596">596</a>         HRegionInfo 
region1 = rl.getRegionLocation(Bytes.toBytes(<span 
class="jxr_string">"A"</span>)).getRegionInfo();
-<a class="jxr_linenumber" name="597" href="#597">597</a>         HRegionInfo 
region2 = rl.getRegionLocation(Bytes.toBytes(<span 
class="jxr_string">"B"</span>)).getRegionInfo();
-<a class="jxr_linenumber" name="598" href="#598">598</a> 
-<a class="jxr_linenumber" name="599" href="#599">599</a>         <strong 
class="jxr_keyword">int</strong> regionCountBeforeMerge = 
rl.getAllRegionLocations().size();
-<a class="jxr_linenumber" name="600" href="#600">600</a> 
-<a class="jxr_linenumber" name="601" href="#601">601</a>         
assertNotEquals(region1, region2);
-<a class="jxr_linenumber" name="602" href="#602">602</a> 
-<a class="jxr_linenumber" name="603" href="#603">603</a>         <em 
class="jxr_comment">// do a region merge</em>
-<a class="jxr_linenumber" name="604" href="#604">604</a>         
admin.mergeRegions(region1.getEncodedNameAsBytes(), 
region2.getEncodedNameAsBytes(), false);
-<a class="jxr_linenumber" name="605" href="#605">605</a> 
-<a class="jxr_linenumber" name="606" href="#606">606</a>         <em 
class="jxr_comment">// wait until region merged</em>
-<a class="jxr_linenumber" name="607" href="#607">607</a>         <strong 
class="jxr_keyword">long</strong> timeout = System.currentTimeMillis() + 30 * 
1000;
-<a class="jxr_linenumber" name="608" href="#608">608</a>         <strong 
class="jxr_keyword">while</strong> (<strong class="jxr_keyword">true</strong>) {
-<a class="jxr_linenumber" name="609" href="#609">609</a>           <strong 
class="jxr_keyword">if</strong> (rl.getAllRegionLocations().size() &lt; 
regionCountBeforeMerge) {
-<a class="jxr_linenumber" name="610" href="#610">610</a>             <strong 
class="jxr_keyword">break</strong>;
-<a class="jxr_linenumber" name="611" href="#611">611</a>           } <strong 
class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> 
(System.currentTimeMillis() &gt; timeout) {
-<a class="jxr_linenumber" name="612" href="#612">612</a>             
fail(<span class="jxr_string">"Time out waiting on region "</span> + 
region1.getEncodedName() + <span class="jxr_string">" and "</span> + region2
-<a class="jxr_linenumber" name="613" href="#613">613</a>                 
.getEncodedName() + <span class="jxr_string">" be merged"</span>);
-<a class="jxr_linenumber" name="614" href="#614">614</a>           }
-<a class="jxr_linenumber" name="615" href="#615">615</a>           
Thread.sleep(10);
-<a class="jxr_linenumber" name="616" href="#616">616</a>         }
-<a class="jxr_linenumber" name="617" href="#617">617</a> 
-<a class="jxr_linenumber" name="618" href="#618">618</a>         
assertEquals(ROWKEYS.length, countRows());
-<a class="jxr_linenumber" name="619" href="#619">619</a> 
-<a class="jxr_linenumber" name="620" href="#620">620</a>         HBaseFsck 
hbck = doFsck(conf, false);
-<a class="jxr_linenumber" name="621" href="#621">621</a>         
assertNoErrors(hbck); <em class="jxr_comment">// no errors</em>
-<a class="jxr_linenumber" name="622" href="#622">622</a>       }
-<a class="jxr_linenumber" name="623" href="#623">623</a> 
-<a class="jxr_linenumber" name="624" href="#624">624</a>     } <strong 
class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="625" href="#625">625</a>       
TEST_UTIL.getHBaseCluster().getMaster().setCatalogJanitorEnabled(<strong 
class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="626" href="#626">626</a>       
cleanupTable(table);
-<a class="jxr_linenumber" name="627" href="#627">627</a>       
IOUtils.closeQuietly(meta);
-<a class="jxr_linenumber" name="628" href="#628">628</a>     }
-<a class="jxr_linenumber" name="629" href="#629">629</a>   }
-<a class="jxr_linenumber" name="630" href="#630">630</a>   <em 
class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="631" href="#631">631</a> <em 
class="jxr_javadoccomment">   * This creates entries in hbase:meta with no hdfs 
data.  This should cleanly</em>
-<a class="jxr_linenumber" name="632" href="#632">632</a> <em 
class="jxr_javadoccomment">   * remove the table.</em>
-<a class="jxr_linenumber" name="633" href="#633">633</a> <em 
class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="634" href="#634">634</a>   @Test 
(timeout=180000)
-<a class="jxr_linenumber" name="635" href="#635">635</a>   <strong 
class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> 
testNoHdfsTable() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="636" href="#636">636</a>     TableName table = 
TableName.valueOf(<span class="jxr_string">"NoHdfsTable"</span>);
-<a class="jxr_linenumber" name="637" href="#637">637</a>     setupTable(table);
-<a class="jxr_linenumber" name="638" href="#638">638</a>     
assertEquals(ROWKEYS.length, countRows());
-<a class="jxr_linenumber" name="639" href="#639">639</a> 
-<a class="jxr_linenumber" name="640" href="#640">640</a>     <em 
class="jxr_comment">// make sure data in regions, if in wal only there is no 
data loss</em>
-<a class="jxr_linenumber" name="641" href="#641">641</a>     
admin.flush(table);
-<a class="jxr_linenumber" name="642" href="#642">642</a> 
-<a class="jxr_linenumber" name="643" href="#643">643</a>     <em 
class="jxr_comment">// Mess it up by deleting hdfs dirs</em>
-<a class="jxr_linenumber" name="644" href="#644">644</a>     
deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes(<span 
class="jxr_string">""</span>),
-<a class="jxr_linenumber" name="645" href="#645">645</a>         
Bytes.toBytes(<span class="jxr_string">"A"</span>), false, false, <strong 
class="jxr_keyword">true</strong>); <em class="jxr_comment">// don't rm 
meta</em>
-<a class="jxr_linenumber" name="646" href="#646">646</a>     
deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes(<span 
class="jxr_string">"A"</span>),
-<a class="jxr_linenumber" name="647" href="#647">647</a>         
Bytes.toBytes(<span class="jxr_string">"B"</span>), false, false, <strong 
class="jxr_keyword">true</strong>); <em class="jxr_comment">// don't rm 
meta</em>
-<a class="jxr_linenumber" name="648" href="#648">648</a>     
deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes(<span 
class="jxr_string">"B"</span>),
-<a class="jxr_linenumber" name="649" href="#649">649</a>         
Bytes.toBytes(<span class="jxr_string">"C"</span>), false, false, <strong 
class="jxr_keyword">true</strong>); <em class="jxr_comment">// don't rm 
meta</em>
-<a class="jxr_linenumber" name="650" href="#650">650</a>     
deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes(<span 
class="jxr_string">"C"</span>),
-<a class="jxr_linenumber" name="651" href="#651">651</a>         
Bytes.toBytes(<span class="jxr_string">""</span>), false, false, <strong 
class="jxr_keyword">true</strong>); <em class="jxr_comment">// don't rm 
meta</em>
-<a class="jxr_linenumber" name="652" href="#652">652</a> 
-<a class="jxr_linenumber" name="653" href="#653">653</a>     <em 
class="jxr_comment">// also remove the table directory in hdfs</em>
-<a class="jxr_linenumber" name="654" href="#654">654</a>     
deleteTableDir(table);
-<a class="jxr_linenumber" name="655" href="#655">655</a> 
-<a class="jxr_linenumber" name="656" href="#656">656</a>     HBaseFsck hbck = 
doFsck(conf, false);
-<a class="jxr_linenumber" name="657" href="#657">657</a>     
assertErrors(hbck, <strong class="jxr_keyword">new</strong> 
HBaseFsck.ErrorReporter.ERROR_CODE[] 
{HBaseFsck.ErrorReporter.ERROR_CODE.NOT_IN_HDFS,
-<a class="jxr_linenumber" name="658" href="#658">658</a>         
HBaseFsck.ErrorReporter.ERROR_CODE.NOT_IN_HDFS, 
HBaseFsck.ErrorReporter.ERROR_CODE.NOT_IN_HDFS,
-<a class="jxr_linenumber" name="659" href="#659">659</a>         
HBaseFsck.ErrorReporter.ERROR_CODE.NOT_IN_HDFS, 
HBaseFsck.ErrorReporter.ERROR_CODE.ORPHAN_TABLE_STATE, });
-<a class="jxr_linenumber" name="660" href="#660">660</a>     <em 
class="jxr_comment">// holes are separate from overlap groups</em>
-<a class="jxr_linenumber" name="661" href="#661">661</a>     assertEquals(0, 
hbck.getOverlapGroups(table).size());
-<a class="jxr_linenumber" name="662" href="#662">662</a> 
-<a class="jxr_linenumber" name="663" href="#663">663</a>     <em 
class="jxr_comment">// fix hole</em>
-<a class="jxr_linenumber" name="664" href="#664">664</a>     doFsck(conf, 
<strong class="jxr_keyword">true</strong>); <em class="jxr_comment">// detect 
dangling regions and remove those</em>
-<a class="jxr_linenumber" name="665" href="#665">665</a> 
-<a class="jxr_linenumber" name="666" href="#666">666</a>     <em 
class="jxr_comment">// check that hole fixed</em>
-<a class="jxr_linenumber" name="667" href="#667">667</a>     
assertNoErrors(doFsck(conf,false));
-<a class="jxr_linenumber" name="668" href="#668">668</a>     assertFalse(<span 
class="jxr_string">"Table "</span> + table + <span class="jxr_string">" should 
have been deleted"</span>, admin.tableExists(table));
-<a class="jxr_linenumber" name="669" href="#669">669</a>   }
-<a class="jxr_linenumber" name="670" href="#670">670</a> 
-<a class="jxr_linenumber" name="671" href="#671">671</a>   <em 
class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="672" href="#672">672</a> <em 
class="jxr_javadoccomment">   * when the hbase.version file missing, It is fix 
the fault.</em>
-<a class="jxr_linenumber" name="673" href="#673">673</a> <em 
class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="674" href="#674">674</a>   @Test 
(timeout=180000)
-<a class="jxr_linenumber" name="675" href="#675">675</a>   <strong 
class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> 
testNoVersionFile() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="676" href="#676">676</a>     <em 
class="jxr_comment">// delete the hbase.version file</em>
-<a class="jxr_linenumber" name="677" href="#677">677</a>     Path rootDir = 
FSUtils.getRootDir(conf);
-<a class="jxr_linenumber" name="678" href="#678">678</a>     FileSystem fs = 
rootDir.getFileSystem(conf);
-<a class="jxr_linenumber" name="679" href="#679">679</a>     Path versionFile 
= <strong class="jxr_keyword">new</strong> Path(rootDir, 
HConstants.VERSION_FILE_NAME);
-<a class="jxr_linenumber" name="680" href="#680">680</a>     
fs.delete(versionFile, <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="681" href="#681">681</a> 
-<a class="jxr_linenumber" name="682" href="#682">682</a>     <em 
class="jxr_comment">// test</em>
-<a class="jxr_linenumber" name="683" href="#683">683</a>     HBaseFsck hbck = 
doFsck(conf, false);
-<a class="jxr_linenumber" name="684" href="#684">684</a>     
assertErrors(hbck, <strong class="jxr_keyword">new</strong> 
HBaseFsck.ErrorReporter.ERROR_CODE[] { 
HBaseFsck.ErrorReporter.ERROR_CODE.NO_VERSION_FILE });
-<a class="jxr_linenumber" name="685" href="#685">685</a>     <em 
class="jxr_comment">// fix hbase.version missing</em>
-<a class="jxr_linenumber" name="686" href="#686">686</a>     doFsck(conf, 
<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="687" href="#687">687</a> 
-<a class="jxr_linenumber" name="688" href="#688">688</a>     <em 
class="jxr_comment">// no version file fixed</em>
-<a class="jxr_linenumber" name="689" href="#689">689</a>     
assertNoErrors(doFsck(conf, false));
-<a class="jxr_linenumber" name="690" href="#690">690</a>   }
-<a class="jxr_linenumber" name="691" href="#691">691</a> 
-<a class="jxr_linenumber" name="692" href="#692">692</a>   @Test 
(timeout=180000)
-<a class="jxr_linenumber" name="693" href="#693">693</a>   <strong 
class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> 
testNoTableState() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="694" href="#694">694</a>     <em 
class="jxr_comment">// delete the hbase.version file</em>
-<a class="jxr_linenumber" name="695" href="#695">695</a>     TableName table =
-<a class="jxr_linenumber" name="696" href="#696">696</a>         
TableName.valueOf(<span class="jxr_string">"testNoTableState"</span>);
-<a class="jxr_linenumber" name="697" href="#697">697</a>     <strong 
class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="698" href="#698">698</a>       
setupTable(table);
-<a class="jxr_linenumber" name="699" href="#699">699</a>       <em 
class="jxr_comment">// make sure data in regions, if in wal only there is no 
data loss</em>
-<a class="jxr_linenumber" name="700" href="#700">700</a>       
admin.flush(table);
-<a class="jxr_linenumber" name="701" href="#701">701</a> 
-<a class="jxr_linenumber" name="702" href="#702">702</a>       
MetaTableAccessor.deleteTableState(TEST_UTIL.getConnection(), table);
-<a class="jxr_linenumber" name="703" href="#703">703</a> 
-<a class="jxr_linenumber" name="704" href="#704">704</a>       <em 
class="jxr_comment">// test</em>
-<a class="jxr_linenumber" name="705" href="#705">705</a>       HBaseFsck hbck 
= doFsck(conf, false);
-<a class="jxr_linenumber" name="706" href="#706">706</a>       
assertErrors(hbck, <strong class="jxr_keyword">new</strong> 
HBaseFsck.ErrorReporter.ERROR_CODE[] { 
HBaseFsck.ErrorReporter.ERROR_CODE.NO_TABLE_STATE });
-<a class="jxr_linenumber" name="707" href="#707">707</a>       <em 
class="jxr_comment">// fix table state missing</em>
-<a class="jxr_linenumber" name="708" href="#708">708</a>       doFsck(conf, 
<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="709" href="#709">709</a> 
-<a class="jxr_linenumber" name="710" href="#710">710</a>       
assertNoErrors(doFsck(conf, false));
-<a class="jxr_linenumber" name="711" href="#711">711</a>       
assertTrue(TEST_UTIL.getHBaseAdmin().isTableEnabled(table));
-<a class="jxr_linenumber" name="712" href="#712">712</a>     } <strong 
class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="713" href="#713">713</a>       
cleanupTable(table);
-<a class="jxr_linenumber" name="714" href="#714">714</a>     }
-<a class="jxr_linenumber" name="715" href="#715">715</a>   }
-<a class="jxr_linenumber" name="716" href="#716">716</a> 
-<a class="jxr_linenumber" name="717" href="#717">717</a>   <em 
class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="718" href="#718">718</a> <em 
class="jxr_javadoccomment">   * This creates two tables and mess both of them 
and fix them one by one</em>
-<a class="jxr_linenumber" name="719" href="#719">719</a> <em 
class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="720" href="#720">720</a>   @Test 
(timeout=180000)
-<a class="jxr_linenumber" name="721" href="#721">721</a>   <strong 
class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> 
testFixByTable() <strong class="jxr_keyword">throws</strong> Exception {
-<a class="jxr_linenumber" name="722" href="#722">722</a>     TableName table1 =
-<a class="jxr_linenumber" name="723" href="#723">723</a>         
TableName.valueOf(<span class="jxr_string">"testFixByTable1"</span>);
-<a class="jxr_linenumber" name="724" href="#724">724</a>     TableName table2 =
-<a class="jxr_linenumber" name="725" href="#725">725</a>         
TableName.valueOf(<span class="jxr_string">"testFixByTable2"</span>);
-<a class="jxr_linenumber" name="726" href="#726">726</a>     <strong 
class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="727" href="#727">727</a>       
setupTable(table1);
-<a class="jxr_linenumber" name="728" href="#728">728</a>       <em 
class="jxr_comment">// make sure data in regions, if in wal only there is no 
data loss</em>
-<a class="jxr_linenumber" name="729" href="#729">729</a>       
admin.flush(table1);
-<a class="jxr_linenumber" name="730" href="#730">730</a>       <em 
class="jxr_comment">// Mess them up by leaving a hole in the hdfs data</em>
-<a class="jxr_linenumber" name="731" href="#731">731</a>       
deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes(<span 
class="jxr_string">"B"</span>),
-<a class="jxr_linenumber" name="732" href="#732">732</a>           
Bytes.toBytes(<span class="jxr_string">"C"</span>), false, false, <strong 
class="jxr_keyword">true</strong>); <em class="jxr_comment">// don't rm 
meta</em>
+<a class="jxr_linenumber" name="583" href="#583">583</a>   <em 
class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="584" href="#584">584</a> <em 
class="jxr_javadoccomment">   * test region boundaries and make sure store file 
had been created.</em>
+<a class="jxr_linenumber" name="585" href="#585">585</a> <em 
class="jxr_javadoccomment">   * @throws Exception</em>
+<a class="jxr_linenumber" name="586" href="#586">586</a> <em 
class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="587" href="#587">587</a>   @Test(timeout = 
180000)
+<a class="jxr_linenumber" name="588" href="#588">588</a>   <strong 
class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> 
testRegionBoundariesCheckWithFlushTable() <strong 
class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="589" href="#589">589</a>     HBaseFsck hbck = 
doFsck(conf, false);
+<a class="jxr_linenumber" name="590" href="#590">590</a>     
assertNoErrors(hbck); <em class="jxr_comment">// no errors</em>
+<a class="jxr_linenumber" name="591" href="#591">591</a>     TableName table = 
TableName.valueOf(<span 
class="jxr_string">"testRegionBoundariesCheckWithFlushTable"</span>);
+<a class="jxr_linenumber" name="592" href="#592">592</a>     <strong 
class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="593" href="#593">593</a>       
setupTable(table);
+<a class="jxr_linenumber" name="594" href="#594">594</a>       
admin.flush(table);
+<a class="jxr_linenumber" name="595" href="#595">595</a>       hbck.connect(); 
<em class="jxr_comment">// need connection to have access to META</em>
+<a class="jxr_linenumber" name="596" href="#596">596</a>       
hbck.checkRegionBoundaries();
+<a class="jxr_linenumber" name="597" href="#597">597</a>       
assertNoErrors(hbck); <em class="jxr_comment">// no errors</em>
+<a class="jxr_linenumber" name="598" href="#598">598</a>     } <strong 
class="jxr_keyword">catch</strong> (IllegalArgumentException e) {
+<a class="jxr_linenumber" name="599" href="#599">599</a>       <strong 
class="jxr_keyword">if</strong> (e.getMessage().endsWith(<span 
class="jxr_string">"not a valid DFS filename."</span>)) {
+<a class="jxr_linenumber" name="600" href="#600">600</a>         fail(<span 
class="jxr_string">"Table directory path is not valid."</span> + 
e.getMessage());
+<a class="jxr_linenumber" name="601" href="#601">601</a>       }
+<a class="jxr_linenumber" name="602" href="#602">602</a>     } <strong 
class="jxr_keyword">finally</strong> {
+<a class="jxr_linenumber" name="603" href="#603">603</a>       hbck.close();
+<a class="jxr_linenumber" name="604" href="#604">604</a>     }
+<a class="jxr_linenumber" name="605" href="#605">605</a>   }
+<a class="jxr_linenumber" name="606" href="#606">606</a>   
+<a class="jxr_linenumber" name="607" href="#607">607</a>   @Test 
(timeout=180000)
+<a class="jxr_linenumber" name="608" href="#608">608</a>   <strong 
class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> 
testHbckAfterRegionMerge() <strong class="jxr_keyword">throws</strong> 
Exception {
+<a class="jxr_linenumber" name="609" href="#609">609</a>     TableName table = 
TableName.valueOf(<span class="jxr_string">"testMergeRegionFilesInHdfs"</span>);
+<a class="jxr_linenumber" name="610" href="#610">610</a>     Table meta = 
<strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="611" href="#611">611</a>     <strong 
class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="612" href="#612">612</a>       <em 
class="jxr_comment">// disable CatalogJanitor</em>
+<a class="jxr_linenumber" name="613" href="#613">613</a>       
TEST_UTIL.getHBaseCluster().getMaster().setCatalogJanitorEnabled(false);
+<a class="jxr_linenumber" name="614" href="#614">614</a>       
setupTable(table);
+<a class="jxr_linenumber" name="615" href="#615">615</a>       
assertEquals(ROWKEYS.length, countRows());
+<a class="jxr_linenumber" name="616" href="#616">616</a> 
+<a class="jxr_linenumber" name="617" href="#617">617</a>       <strong 
class="jxr_keyword">try</strong>(RegionLocator rl = 
connection.getRegionLocator(tbl.getName())) {
+<a class="jxr_linenumber" name="618" href="#618">618</a>         <em 
class="jxr_comment">// make sure data in regions, if in wal only there is no 
data loss</em>
+<a class="jxr_linenumber" name="619" href="#619">619</a>         
admin.flush(table);
+<a class="jxr_linenumber" name="620" href="#620">620</a>         HRegionInfo 
region1 = rl.getRegionLocation(Bytes.toBytes(<span 
class="jxr_string">"A"</span>)).getRegionInfo();
+<a class="jxr_linenumber" name="621" href="#621">621</a>         HRegionInfo 
region2 = rl.getRegionLocation(Bytes.toBytes(<span 
class="jxr_string">"B"</span>)).getRegionInfo();
+<a class="jxr_linenumber" name="622" href="#622">622</a> 
+<a class="jxr_linenumber" name="623" href="#623">623</a>         <strong 
class="jxr_keyword">int</strong> regionCountBeforeMerge = 
rl.getAllRegionLocations().size();
+<a class="jxr_linenumber" name="624" href="#624">624</a> 
+<a class="jxr_linenumber" name="625" href="#625">625</a>         
assertNotEquals(region1, region2);
+<a class="jxr_linenumber" name="626" href="#626">626</a> 
+<a class="jxr_linenumber" name="627" href="#627">627</a>         <em 
class="jxr_comment">// do a region merge</em>
+<a class="jxr_linenumber" name="628" href="#628">628</a>         
admin.mergeRegions(region1.getEncodedNameAsBytes(), 
region2.getEncodedNameAsBytes(), false);
+<a class="jxr_linenumber" name="629" href="#629">629</a> 
+<a class="jxr_linenumber" name="630" href="#630">630</a>         <em 
class="jxr_comment">// wait until region merged</em>
+<a class="jxr_linenumber" name="631" href="#631">631</a>         <strong 
class="jxr_keyword">long</strong> timeout = System.currentTimeMillis() + 30 * 
1000;
+<a class="jxr_linenumber" name="632" href="#632">632</a>         <strong 
class="jxr_keyword">while</strong> (<strong class="jxr_keyword">true</strong>) {
+<a class="jxr_linenumber" name="633" href="#633">633</a>           <strong 
class="jxr_keyword">if</strong> (rl.getAllRegionLocations().size() &lt; 
regionCountBeforeMerge) {
+<a class="jxr_linenumber" name="634" href="#634">634</a>             <strong 
class="jxr_keyword">break</strong>;
+<a class="jxr_linenumber" name="635" href="#635">635</a>           } <strong 
class="jxr_keyword">else</strong> <strong class="jxr_keyword">if</strong> 
(System.currentTimeMillis() &gt; timeout) {
+<a class="jxr_linenumber" name="636" href="#636">636</a>             
fail(<span class="jxr_string">"Time out waiting on region "</span> + 
region1.getEncodedName() + <span class="jxr_string">" and "</span> + region2
+<a class="jxr_linenumber" name="637" href="#637">637</a>                 
.getEncodedName() + <span class="jxr_string">" be merged"</span>);
+<a class="jxr_linenumber" name="638" href="#638">638</a>           }
+<a class="jxr_linenumber" name="639" href="#639">639</a>           
Thread.sleep(10);
+<a class="jxr_linenumber" name="640" href="#640">640</a>         }
+<a class="jxr_linenumber" name="641" href="#641">641</a> 
+<a class="jxr_linenumber" name="642" href="#642">642</a>         
assertEquals(ROWKEYS.length, countRows());
+<a class="jxr_linenumber" name="643" href="#643">643</a> 
+<a class="jxr_linenumber" name="644" href="#644">644</a>         HBaseFsck 
hbck = doFsck(conf, false);
+<a class="jxr_linenumber" name="645" href="#645">645</a>         
assertNoErrors(hbck); <em class="jxr_comment">// no errors</em>
+<a class="jxr_linenumber" name="646" href="#646">646</a>       }
+<a class="jxr_linenumber" name="647" href="#647">647</a> 
+<a class="jxr_linenumber" name="648" href="#648">648</a>     } <strong 
class="jxr_keyword">finally</strong> {
+<a class="jxr_linenumber" name="649" href="#649">649</a>       
TEST_UTIL.getHBaseCluster().getMaster().setCatalogJanitorEnabled(<strong 
class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="650" href="#650">650</a>       
cleanupTable(table);
+<a class="jxr_linenumber" name="651" href="#651">651</a>       
IOUtils.closeQuietly(meta);
+<a class="jxr_linenumber" name="652" href="#652">652</a>     }
+<a class="jxr_linenumber" name="653" href="#653">653</a>   }
+<a class="jxr_linenumber" name="654" href="#654">654</a>   <em 
class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="655" href="#655">655</a> <em 
class="jxr_javadoccomment">   * This creates entries in hbase:meta with no hdfs 
data.  This should cleanly</em>
+<a class="jxr_linenumber" name="656" href="#656">656</a> <em 
class="jxr_javadoccomment">   * remove the table.</em>
+<a class="jxr_linenumber" name="657" href="#657">657</a> <em 
class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="658" href="#658">658</a>   @Test 
(timeout=180000)
+<a class="jxr_linenumber" name="659" href="#659">659</a>   <strong 
class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> 
testNoHdfsTable() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="660" href="#660">660</a>     TableName table = 
TableName.valueOf(<span class="jxr_string">"NoHdfsTable"</span>);
+<a class="jxr_linenumber" name="661" href="#661">661</a>     setupTable(table);
+<a class="jxr_linenumber" name="662" href="#662">662</a>     
assertEquals(ROWKEYS.length, countRows());
+<a class="jxr_linenumber" name="663" href="#663">663</a> 
+<a class="jxr_linenumber" name="664" href="#664">664</a>     <em 
class="jxr_comment">// make sure data in regions, if in wal only there is no 
data loss</em>
+<a class="jxr_linenumber" name="665" href="#665">665</a>     
admin.flush(table);
+<a class="jxr_linenumber" name="666" href="#666">666</a> 
+<a class="jxr_linenumber" name="667" href="#667">667</a>     <em 
class="jxr_comment">// Mess it up by deleting hdfs dirs</em>
+<a class="jxr_linenumber" name="668" href="#668">668</a>     
deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes(<span 
class="jxr_string">""</span>),
+<a class="jxr_linenumber" name="669" href="#669">669</a>         
Bytes.toBytes(<span class="jxr_string">"A"</span>), false, false, <strong 
class="jxr_keyword">true</strong>); <em class="jxr_comment">// don't rm 
meta</em>
+<a class="jxr_linenumber" name="670" href="#670">670</a>     
deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes(<span 
class="jxr_string">"A"</span>),
+<a class="jxr_linenumber" name="671" href="#671">671</a>         
Bytes.toBytes(<span class="jxr_string">"B"</span>), false, false, <strong 
class="jxr_keyword">true</strong>); <em class="jxr_comment">// don't rm 
meta</em>
+<a class="jxr_linenumber" name="672" href="#672">672</a>     
deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes(<span 
class="jxr_string">"B"</span>),
+<a class="jxr_linenumber" name="673" href="#673">673</a>         
Bytes.toBytes(<span class="jxr_string">"C"</span>), false, false, <strong 
class="jxr_keyword">true</strong>); <em class="jxr_comment">// don't rm 
meta</em>
+<a class="jxr_linenumber" name="674" href="#674">674</a>     
deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes(<span 
class="jxr_string">"C"</span>),
+<a class="jxr_linenumber" name="675" href="#675">675</a>         
Bytes.toBytes(<span class="jxr_string">""</span>), false, false, <strong 
class="jxr_keyword">true</strong>); <em class="jxr_comment">// don't rm 
meta</em>
+<a class="jxr_linenumber" name="676" href="#676">676</a> 
+<a class="jxr_linenumber" name="677" href="#677">677</a>     <em 
class="jxr_comment">// also remove the table directory in hdfs</em>
+<a class="jxr_linenumber" name="678" href="#678">678</a>     
deleteTableDir(table);
+<a class="jxr_linenumber" name="679" href="#679">679</a> 
+<a class="jxr_linenumber" name="680" href="#680">680</a>     HBaseFsck hbck = 
doFsck(conf, false);
+<a class="jxr_linenumber" name="681" href="#681">681</a>     
assertErrors(hbck, <strong class="jxr_keyword">new</strong> 
HBaseFsck.ErrorReporter.ERROR_CODE[] 
{HBaseFsck.ErrorReporter.ERROR_CODE.NOT_IN_HDFS,
+<a class="jxr_linenumber" name="682" href="#682">682</a>         
HBaseFsck.ErrorReporter.ERROR_CODE.NOT_IN_HDFS, 
HBaseFsck.ErrorReporter.ERROR_CODE.NOT_IN_HDFS,
+<a class="jxr_linenumber" name="683" href="#683">683</a>         
HBaseFsck.ErrorReporter.ERROR_CODE.NOT_IN_HDFS, 
HBaseFsck.ErrorReporter.ERROR_CODE.ORPHAN_TABLE_STATE, });
+<a class="jxr_linenumber" name="684" href="#684">684</a>     <em 
class="jxr_comment">// holes are separate from overlap groups</em>
+<a class="jxr_linenumber" name="685" href="#685">685</a>     assertEquals(0, 
hbck.getOverlapGroups(table).size());
+<a class="jxr_linenumber" name="686" href="#686">686</a> 
+<a class="jxr_linenumber" name="687" href="#687">687</a>     <em 
class="jxr_comment">// fix hole</em>
+<a class="jxr_linenumber" name="688" href="#688">688</a>     doFsck(conf, 
<strong class="jxr_keyword">true</strong>); <em class="jxr_comment">// detect 
dangling regions and remove those</em>
+<a class="jxr_linenumber" name="689" href="#689">689</a> 
+<a class="jxr_linenumber" name="690" href="#690">690</a>     <em 
class="jxr_comment">// check that hole fixed</em>
+<a class="jxr_linenumber" name="691" href="#691">691</a>     
assertNoErrors(doFsck(conf,false));
+<a class="jxr_linenumber" name="692" href="#692">692</a>     assertFalse(<span 
class="jxr_string">"Table "</span> + table + <span class="jxr_string">" should 
have been deleted"</span>, admin.tableExists(table));
+<a class="jxr_linenumber" name="693" href="#693">693</a>   }
+<a class="jxr_linenumber" name="694" href="#694">694</a> 
+<a class="jxr_linenumber" name="695" href="#695">695</a>   <em 
class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="696" href="#696">696</a> <em 
class="jxr_javadoccomment">   * when the hbase.version file missing, It is fix 
the fault.</em>
+<a class="jxr_linenumber" name="697" href="#697">697</a> <em 
class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="698" href="#698">698</a>   @Test 
(timeout=180000)
+<a class="jxr_linenumber" name="699" href="#699">699</a>   <strong 
class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> 
testNoVersionFile() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="700" href="#700">700</a>     <em 
class="jxr_comment">// delete the hbase.version file</em>
+<a class="jxr_linenumber" name="701" href="#701">701</a>     Path rootDir = 
FSUtils.getRootDir(conf);
+<a class="jxr_linenumber" name="702" href="#702">702</a>     FileSystem fs = 
rootDir.getFileSystem(conf);
+<a class="jxr_linenumber" name="703" href="#703">703</a>     Path versionFile 
= <strong class="jxr_keyword">new</strong> Path(rootDir, 
HConstants.VERSION_FILE_NAME);
+<a class="jxr_linenumber" name="704" href="#704">704</a>     
fs.delete(versionFile, <strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="705" href="#705">705</a> 
+<a class="jxr_linenumber" name="706" href="#706">706</a>     <em 
class="jxr_comment">// test</em>
+<a class="jxr_linenumber" name="707" href="#707">707</a>     HBaseFsck hbck = 
doFsck(conf, false);
+<a class="jxr_linenumber" name="708" href="#708">708</a>     
assertErrors(hbck, <strong class="jxr_keyword">new</strong> 
HBaseFsck.ErrorReporter.ERROR_CODE[] { 
HBaseFsck.ErrorReporter.ERROR_CODE.NO_VERSION_FILE });
+<a class="jxr_linenumber" name="709" href="#709">709</a>     <em 
class="jxr_comment">// fix hbase.version missing</em>
+<a class="jxr_linenumber" name="710" href="#710">710</a>     doFsck(conf, 
<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="711" href="#711">711</a> 
+<a class="jxr_linenumber" name="712" href="#712">712</a>     <em 
class="jxr_comment">// no version file fixed</em>
+<a class="jxr_linenumber" name="713" href="#713">713</a>     
assertNoErrors(doFsck(conf, false));
+<a class="jxr_linenumber" name="714" href="#714">714</a>   }
+<a class="jxr_linenumber" name="715" href="#715">715</a> 
+<a class="jxr_linenumber" name="716" href="#716">716</a>   @Test 
(timeout=180000)
+<a class="jxr_linenumber" name="717" href="#717">717</a>   <strong 
class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> 
testNoTableState() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="718" href="#718">718</a>     <em 
class="jxr_comment">// delete the hbase.version file</em>
+<a class="jxr_linenumber" name="719" href="#719">719</a>     TableName table =
+<a class="jxr_linenumber" name="720" href="#720">720</a>         
TableName.valueOf(<span class="jxr_string">"testNoTableState"</span>);
+<a class="jxr_linenumber" name="721" href="#721">721</a>     <strong 
class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="722" href="#722">722</a>       
setupTable(table);
+<a class="jxr_linenumber" name="723" href="#723">723</a>       <em 
class="jxr_comment">// make sure data in regions, if in wal only there is no 
data loss</em>
+<a class="jxr_linenumber" name="724" href="#724">724</a>       
admin.flush(table);
+<a class="jxr_linenumber" name="725" href="#725">725</a> 
+<a class="jxr_linenumber" name="726" href="#726">726</a>       
MetaTableAccessor.deleteTableState(TEST_UTIL.getConnection(), table);
+<a class="jxr_linenumber" name="727" href="#727">727</a> 
+<a class="jxr_linenumber" name="728" href="#728">728</a>       <em 
class="jxr_comment">// test</em>
+<a class="jxr_linenumber" name="729" href="#729">729</a>       HBaseFsck hbck 
= doFsck(conf, false);
+<a class="jxr_linenumber" name="730" href="#730">730</a>       
assertErrors(hbck, <strong class="jxr_keyword">new</strong> 
HBaseFsck.ErrorReporter.ERROR_CODE[] { 
HBaseFsck.ErrorReporter.ERROR_CODE.NO_TABLE_STATE });
+<a class="jxr_linenumber" name="731" href="#731">731</a>       <em 
class="jxr_comment">// fix table state missing</em>
+<a class="jxr_linenumber" name="732" href="#732">732</a>       doFsck(conf, 
<strong class="jxr_keyword">true</strong>);
 <a class="jxr_linenumber" name="733" href="#733">733</a> 
-<a class="jxr_linenumber" name="734" href="#734">734</a>       
setupTable(table2);
-<a class="jxr_linenumber" name="735" href="#735">735</a>       <em 
class="jxr_comment">// make sure data in regions, if in wal only there is no 
data loss</em>
-<a class="jxr_linenumber" name="736" href="#736">736</a>       
admin.flush(table2);
-<a class="jxr_linenumber" name="737" href="#737">737</a>       <em 
class="jxr_comment">// Mess them up by leaving a hole in the hdfs data</em>
-<a class="jxr_linenumber" name="738" href="#738">738</a>       
deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes(<span 
class="jxr_string">"B"</span>), Bytes.toBytes(<span 
class="jxr_string">"C"</span>), false,
-<a class="jxr_linenumber" name="739" href="#739">739</a>           false, 
<strong class="jxr_keyword">true</strong>); <em class="jxr_comment">// don't rm 
meta</em>
+<a class="jxr_linenumber" name="734" href="#734">734</a>       
assertNoErrors(doFsck(conf, false));
+<a class="jxr_linenumber" name="735" href="#735">735</a>       
assertTrue(TEST_UTIL.getHBaseAdmin().isTableEnabled(table));
+<a class="jxr_linenumber" name="736" href="#736">736</a>     } <strong 
class="jxr_keyword">finally</strong> {
+<a class="jxr_linenumber" name="737" href="#737">737</a>       
cleanupTable(table);
+<a class="jxr_linenumber" name="738" href="#738">738</a>     }
+<a class="jxr_linenumber" name="739" href="#739">739</a>   }
 <a class="jxr_linenumber" name="740" href="#740">740</a> 
-<a class="jxr_linenumber" name="741" href="#741">741</a>       HBaseFsck hbck 
= doFsck(conf, false);
-<a class="jxr_linenumber" name="742" href="#742">742</a>       
assertErrors(hbck, <strong class="jxr_keyword">new</strong> 
HBaseFsck.ErrorReporter.ERROR_CODE[] { 
HBaseFsck.ErrorReporter.ERROR_CODE.NOT_IN_HDFS, 
HBaseFsck.ErrorReporter.ERROR_CODE.NOT_IN_HDFS });
-<a class="jxr_linenumber" name="743" href="#743">743</a> 
-<a class="jxr_linenumber" name="744" href="#744">744</a>       <em 
class="jxr_comment">// fix hole in table 1</em>
-<a class="jxr_linenumber" name="745" href="#745">745</a>       doFsck(conf, 
<strong class="jxr_keyword">true</strong>, table1);
-<a class="jxr_linenumber" name="746" href="#746">746</a>       <em 
class="jxr_comment">// check that hole in table 1 fixed</em>
-<a class="jxr_linenumber" name="747" href="#747">747</a>       
assertNoErrors(doFsck(conf, false, table1));
-<a class="jxr_linenumber" name="748" href="#748">748</a>       <em 
class="jxr_comment">// check that hole in table 2 still there</em>
-<a class="jxr_linenumber" name="749" href="#749">749</a>       
assertErrors(doFsck(conf, false, table2), <strong 
class="jxr_keyword">new</strong> HBaseFsck.ErrorReporter.ERROR_CODE[] { 
HBaseFsck.ErrorReporter.ERROR_CODE.NOT_IN_HDFS });
-<a class="jxr_linenumber" name="750" href="#750">750</a> 
-<a class="jxr_linenumber" name="751" href="#751">751</a>       <em 
class="jxr_comment">// fix hole in table 2</em>
-<a class="jxr_linenumber" name="752" href="#752">752</a>       doFsck(conf, 
<strong class="jxr_keyword">true</strong>, table2);
-<a class="jxr_linenumber" name="753" href="#753">753</a>       <em 
class="jxr_comment">// check that hole in both tables fixed</em>
-<a class="jxr_linenumber" name="754" href="#754">754</a>       
assertNoErrors(doFsck(conf, false));
-<a class="jxr_linenumber" name="755" href="#755">755</a>       
assertEquals(ROWKEYS.length - 2, countRows());
-<a class="jxr_linenumber" name="756" href="#756">756</a>     } <strong 
class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="757" href="#757">757</a>       
cleanupTable(table1);
-<a class="jxr_linenumber" name="758" href="#758">758</a>       
cleanupTable(table2);
-<a class="jxr_linenumber" name="759" href="#759">759</a>     }
-<a class="jxr_linenumber" name="760" href="#760">760</a>   }
-<a class="jxr_linenumber" name="761" href="#761">761</a>   <em 
class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="762" href="#762">762</a> <em 
class="jxr_javadoccomment">   * A split parent in meta, in hdfs, and not 
deployed</em>
-<a class="jxr_linenumber" name="763" href="#763">763</a> <em 
class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="764" href="#764">764</a>   @Test 
(timeout=180000)
-<a class="jxr_linenumber" name="765" href="#765">765</a>   <strong 
class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> 
testLingeringSplitParent() <strong class="jxr_keyword">throws</strong> 
Exception {
-<a class="jxr_linenumber" name="766" href="#766">766</a>     TableName table =
-<a class="jxr_linenumber" name="767" href="#767">767</a>         
TableName.valueOf(<span class="jxr_string">"testLingeringSplitParent"</span>);
-<a class="jxr_linenumber" name="768" href="#768">768</a>     Table meta = 
<strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="769" href="#769">769</a>     <strong 
class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="770" href="#770">770</a>       
setupTable(table);
-<a class="jxr_linenumber" name="771" href="#771">771</a>       
assertEquals(ROWKEYS.length, countRows());
-<a class="jxr_linenumber" name="772" href="#772">772</a> 
-<a class="jxr_linenumber" name="773" href="#773">773</a>       <em 
class="jxr_comment">// make sure data in regions, if in wal only there is no 
data loss</em>
-<a class="jxr_linenumber" name="774" href="#774">774</a>       
admin.flush(table);
-<a class="jxr_linenumber" name="775" href="#775">775</a> 
-<a class="jxr_linenumber" name="776" href="#776">776</a>       HRegionLocation 
location;
-<a class="jxr_linenumber" name="777" href="#777">777</a>       <strong 
class="jxr_keyword">try</strong>(RegionLocator rl = 
connection.getRegionLocator(tbl.getName())) {
-<a class="jxr_linenumber" name="778" href="#778">778</a>         location = 
rl.getRegionLocation(Bytes.toBytes(<span class="jxr_string">"B"</span>));
-<a class="jxr_linenumber" name="779" href="#779">779</a>       }
-<a class="jxr_linenumber" name="780" href="#780">780</a> 
-<a class="jxr_linenumber" name="781" href="#781">781</a>       <em 
class="jxr_comment">// Delete one region from meta, but not hdfs, unassign 
it.</em>
-<a class="jxr_linenumber" name="782" href="#782">782</a>       
deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes(<span 
class="jxr_string">"B"</span>),
-<a class="jxr_linenumber" name="783" href="#783">783</a>           
Bytes.toBytes(<span class="jxr_string">"C"</span>), <strong 
class="jxr_keyword">true</strong>, <strong class="jxr_keyword">true</strong>, 
false);
-<a class="jxr_linenumber" name="784" href="#784">784</a> 
-<a class="jxr_linenumber" name="785" href="#785">785</a>       <em 
class="jxr_comment">// Create a new meta entry to fake it as a split 
parent.</em>
-<a class="jxr_linenumber" name="786" href="#786">786</a>       meta = 
connection.getTable(TableName.META_TABLE_NAME, tableExecutorService);
-<a class="jxr_linenumber" name="787" href="#787">787</a>       HRegionInfo hri 
= location.getRegionInfo();
-<a class="jxr_linenumber" name="788" href="#788">788</a> 
-<a class="jxr_linenumber" name="789" href="#789">789</a>       HRegionInfo a = 
<strong class="jxr_keyword">new</strong> HRegionInfo(tbl.getName(),
-<a class="jxr_linenumber" name="790" href="#790">790</a>           
Bytes.toBytes(<span class="jxr_string">"B"</span>), Bytes.toBytes(<span 
class="jxr_string">"BM"</span>));
-<a class="jxr_linenumber" name="791" href="#791">791</a>       HRegionInfo b = 
<strong class="jxr_keyword">new</strong> HRegionInfo(tbl.getName(),
-<a class="jxr_linenumber" name="792" href="#792">792</a>           
Bytes.toBytes(<span class="jxr_string">"BM"</span>), Bytes.toBytes(<span 
class="jxr_string">"C"</span>));
-<a class="jxr_linenumber" name="793" href="#793">793</a> 
-<a class="jxr_linenumber" name="794" href="#794">794</a>       
hri.setOffline(<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="795" href="#795">795</a>       
hri.setSplit(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="741" href="#741">741</a>   <em 
class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="742" href="#742">742</a> <em 
class="jxr_javadoccomment">   * This creates two tables and mess both of them 
and fix them one by one</em>
+<a class="jxr_linenumber" name="743" href="#743">743</a> <em 
class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="744" href="#744">744</a>   @Test 
(timeout=180000)
+<a class="jxr_linenumber" name="745" href="#745">745</a>   <strong 
class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> 
testFixByTable() <strong class="jxr_keyword">throws</strong> Exception {
+<a class="jxr_linenumber" name="746" href="#746">746</a>     TableName table1 =
+<a class="jxr_linenumber" name="747" href="#747">747</a>         
TableName.valueOf(<span class="jxr_string">"testFixByTable1"</span>);
+<a class="jxr_linenumber" name="748" href="#748">748</a>     TableName table2 =
+<a class="jxr_linenumber" name="749" href="#749">749</a>         
TableName.valueOf(<span class="jxr_string">"testFixByTable2"</span>);
+<a class="jxr_linenumber" name="750" href="#750">750</a>     <strong 
class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="751" href="#751">751</a>       
setupTable(table1);
+<a class="jxr_linenumber" name="752" href="#752">752</a>       <em 
class="jxr_comment">// make sure data in regions, if in wal only there is no 
data loss</em>
+<a class="jxr_linenumber" name="753" href="#753">753</a>       
admin.flush(table1);
+<a class="jxr_linenumber" name="754" href="#754">754</a>       <em 
class="jxr_comment">// Mess them up by leaving a hole in the hdfs data</em>
+<a class="jxr_linenumber" name="755" href="#755">755</a>       
deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes(<span 
class="jxr_string">"B"</span>),
+<a class="jxr_linenumber" name="756" href="#756">756</a>           
Bytes.toBytes(<span class="jxr_string">"C"</span>), false, false, <strong 
class="jxr_keyword">true</strong>); <em class="jxr_comment">// don't rm 
meta</em>
+<a class="jxr_linenumber" name="757" href="#757">757</a> 
+<a class="jxr_linenumber" name="758" href="#758">758</a>       
setupTable(table2);
+<a class="jxr_linenumber" name="759" href="#759">759</a>       <em 
class="jxr_comment">// make sure data in regions, if in wal only there is no 
data loss</em>
+<a class="jxr_linenumber" name="760" href="#760">760</a>       
admin.flush(table2);
+<a class="jxr_linenumber" name="761" href="#761">761</a>       <em 
class="jxr_comment">// Mess them up by leaving a hole in the hdfs data</em>
+<a class="jxr_linenumber" name="762" href="#762">762</a>       
deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes(<span 
class="jxr_string">"B"</span>), Bytes.toBytes(<span 
class="jxr_string">"C"</span>), false,
+<a class="jxr_linenumber" name="763" href="#763">763</a>           false, 
<strong class="jxr_keyword">true</strong>); <em class="jxr_comment">// don't rm 
meta</em>
+<a class="jxr_linenumber" name="764" href="#764">764</a> 
+<a class="jxr_linenumber" name="765" href="#765">765</a>       HBaseFsck hbck 
= doFsck(conf, false);
+<a class="jxr_linenumber" name="766" href="#766">766</a>       
assertErrors(hbck, <strong class="jxr_keyword">new</strong> 
HBaseFsck.ErrorReporter.ERROR_CODE[] { 
HBaseFsck.ErrorReporter.ERROR_CODE.NOT_IN_HDFS, 
HBaseFsck.ErrorReporter.ERROR_CODE.NOT_IN_HDFS });
+<a class="jxr_linenumber" name="767" href="#767">767</a> 
+<a class="jxr_linenumber" name="768" href="#768">768</a>       <em 
class="jxr_comment">// fix hole in table 1</em>
+<a class="jxr_linenumber" name="769" href="#769">769</a>       doFsck(conf, 
<strong class="jxr_keyword">true</strong>, table1);
+<a class="jxr_linenumber" name="770" href="#770">770</a>       <em 
class="jxr_comment">// check that hole in table 1 fixed</em>
+<a class="jxr_linenumber" name="771" href="#771">771</a>       
assertNoErrors(doFsck(conf, false, table1));
+<a class="jxr_linenumber" name="772" href="#772">772</a>       <em 
class="jxr_comment">// check that hole in table 2 still there</em>
+<a class="jxr_linenumber" name="773" href="#773">773</a>       
assertErrors(doFsck(conf, false, table2), <strong 
class="jxr_keyword">new</strong> HBaseFsck.ErrorReporter.ERROR_CODE[] { 
HBaseFsck.ErrorReporter.ERROR_CODE.NOT_IN_HDFS });
+<a class="jxr_linenumber" name="774" href="#774">774</a> 
+<a class="jxr_linenumber" name="775" href="#775">775</a>       <em 
class="jxr_comment">// fix hole in table 2</em>
+<a class="jxr_linenumber" name="776" href="#776">776</a>       doFsck(conf, 
<strong class="jxr_keyword">true</strong>, table2);
+<a class="jxr_linenumber" name="777" href="#777">777</a>       <em 
class="jxr_comment">// check that hole in both tables fixed</em>
+<a class="jxr_linenumber" name="778" href="#778">778</a>       
assertNoErrors(doFsck(conf, false));
+<a class="jxr_linenumber" name="779" href="#779">779</a>       
assertEquals(ROWKEYS.length - 2, countRows());
+<a class="jxr_linenumber" name="780" href="#780">780</a>     } <strong 
class="jxr_keyword">finally</strong> {
+<a class="jxr_linenumber" name="781" href="#781">781</a>       
cleanupTable(table1);
+<a class="jxr_linenumber" name="782" href="#782">782</a>       
cleanupTable(table2);
+<a class="jxr_linenumber" name="783" href="#783">783</a>     }
+<a class="jxr_linenumber" name="784" href="#784">784</a>   }
+<a class="jxr_linenumber" name="785" href="#785">785</a>   <em 
class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="786" href="#786">786</a> <em 
class="jxr_javadoccomment">   * A split parent in meta, in hdfs, and not 
deployed</em>
+<a class="jxr_linenumber" name="787" href="#787">787</a> <em 
class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="788" href="#788">788</a>   @Test 
(timeout=180000)
+<a class="jxr_linenumber" name="789" href="#789">789</a>   <strong 
class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> 
testLingeringSplitParent() <strong class="jxr_keyword">throws</strong> 
Exception {
+<a class="jxr_linenumber" name="790" href="#790">790</a>     TableName table =
+<a class="jxr_linenumber" name="791" href="#791">791</a>         
TableName.valueOf(<span class="jxr_string">"testLingeringSplitParent"</span>);
+<a class="jxr_linenumber" name="792" href="#792">792</a>     Table meta = 
<strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="793" href="#793">793</a>     <strong 
class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="794" href="#794">794</a>       
setupTable(table);
+<a class="jxr_linenumber" name="795" href="#795">795</a>       
assertEquals(ROWKEYS.length, countRows());
 <a class="jxr_linenumber" name="796" href="#796">796</a> 
-<a class="jxr_linenumber" name="797" href="#797">797</a>       
MetaTableAccessor.addRegionToMeta(meta, hri, a, b);
-<a class="jxr_linenumber" name="798" href="#798">798</a>       meta.close();
-<a class="jxr_linenumber" name="799" href="#799">799</a>       
admin.flush(TableName.META_TABLE_NAME);
-<a class="jxr_linenumber" name="800" href="#800">800</a> 
-<a class="jxr_linenumber" name="801" href="#801">801</a>       HBaseFsck hbck 
= doFsck(conf, false);
-<a class="jxr_linenumber" name="802" href="#802">802</a>       
assertErrors(hbck, <strong class="jxr_keyword">new</strong> 
HBaseFsck.ErrorReporter.ERROR_CODE[] {
-<a class="jxr_linenumber" name="803" href="#803">803</a>           
HBaseFsck.ErrorReporter.ERROR_CODE.LINGERING_SPLIT_PARENT, 
HBaseFsck.ErrorReporter.ERROR_CODE.HOLE_IN_REGION_CHAIN});
+<a class="jxr_linenumber" name="797" href="#797">797</a>       <em 
class="jxr_comment">// make sure data in regions, if in wal only there is no 
data loss</em>
+<a class="jxr_linenumber" name="798" href="#798">798</a>       
admin.flush(table);
+<a class="jxr_linenumber" name="799" href="#799">799</a> 
+<a class="jxr_linenumber" name="800" href="#800">800</a>       HRegionLocation 
location;
+<a class="jxr_linenumber" name="801" href="#801">801</a>       <strong 
class="jxr_keyword">try</strong>(RegionLocator rl = 
connection.getRegionLocator(tbl.getName())) {
+<a class="jxr_linenumber" name="802" href="#802">802</a>         location = 
rl.getRegionLocation(Bytes.toBytes(<span class="jxr_string">"B"</span>));
+<a class="jxr_linenumber" name="803" href="#803">803</a>       }
 <a class="jxr_linenumber" name="804" href="#804">804</a> 
-<a class="jxr_linenumber" name="805" href="#805">805</a>       <em 
class="jxr_comment">// regular repair cannot fix lingering split parent</em>
-<a class="jxr_linenumber" name="806" href="#806">806</a>       hbck = 
doFsck(conf, <strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="807" href="#807">807</a>       
assertErrors(hbck, <strong class="jxr_keyword">new</strong> 
HBaseFsck.ErrorReporter.ERROR_CODE[] {
-<a class="jxr_linenumber" name="808" href="#808">808</a>           
HBaseFsck.ErrorReporter.ERROR_CODE.LINGERING_SPLIT_PARENT, 
HBaseFsck.ErrorReporter.ERROR_CODE.HOLE_IN_REGION_CHAIN });
-<a class="jxr_linenumber" name="809" href="#809">809</a>       
assertFalse(hbck.shouldRerun());
-<a class="jxr_linenumber" name="810" href="#810">810</a>       hbck = 
doFsck(conf, false);
-<a class="jxr_linenumber" name="811" href="#811">811</a>       
assertErrors(hbck, <strong class="jxr_keyword">new</strong> 
HBaseFsck.ErrorReporter.ERROR_CODE[] {
-<a class="jxr_linenumber" name="812" href="#812">812</a>           
HBaseFsck.ErrorReporter.ERROR_CODE.LINGERING_SPLIT_PARENT, 
HBaseFsck.ErrorReporter.ERROR_CODE.HOLE_IN_REGION_CHAIN});
-<a class="jxr_linenumber" name="813" href="#813">813</a> 
-<a class="jxr_linenumber" name="814" href="#814">814</a>       <em 
class="jxr_comment">// fix lingering split parent</em>
-<a class="jxr_linenumber" name="815" href="#815">815</a>       hbck = <strong 
class="jxr_keyword">new</strong> HBaseFsck(conf, hbfsckExecutorService);
-<a class="jxr_linenumber" name="816" href="#816">816</a>       hbck.connect();
-<a class="jxr_linenumber" name="817" href="#817">817</a>       
HBaseFsck.setDisplayFullReport(); <em class="jxr_comment">// i.e. -details</em>
-<a class="jxr_linenumber" name="818" href="#818">818</a>       
hbck.setTimeLag(0);
-<a class="jxr_linenumber" name="819" href="#819">819</a>       
hbck.setFixSplitParents(<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="820" href="#820">820</a>       
hbck.onlineHbck();
-<a class="jxr_linenumber" name="821" href="#821">821</a>       
assertTrue(hbck.shouldRerun());
-<a class="jxr_linenumber" name="822" href="#822">822</a>       hbck.close();
-<a class="jxr_linenumber" name="823" href="#823">823</a> 
-<a class="jxr_linenumber" name="824" href="#824">824</a>       Get get = 
<strong class="jxr_keyword">new</strong> Get(hri.getRegionName());
-<a class="jxr_linenumber" name="825" href="#825">825</a>       Result result = 
meta.get(get);
-<a class="jxr_linenumber" name="826" href="#826">826</a>       
assertTrue(result.getColumnCells(HConstants.CATALOG_FAMILY,
-<a class="jxr_linenumber" name="827" href="#827">827</a>           
HConstants.SPLITA_QUALIFIER).isEmpty());
-<a class="jxr_linenumber" name="828" href="#828">828</a>       
assertTrue(result.getColumnCells(HConstants.CATALOG_FAMILY,
-<a class="jxr_linenumber" name="829" href="#829">829</a>           
HConstants.SPLITB_QUALIFIER).isEmpty());
-<a class="jxr_linenumber" name="830" href="#830">830</a>       
admin.flush(TableName.META_TABLE_NAME);
-<a class="jxr_linenumber" name="831" href="#831">831</a> 
-<a class="jxr_linenumber" name="832" href="#832">832</a>       <em 
class="jxr_comment">// fix other issues</em>
-<a class="jxr_linenumber" name="833" href="#833">833</a>       doFsck(conf, 
<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="834" href="#834">834</a> 
-<a class="jxr_linenumber" name="835" href="#835">835</a>       <em 
class="jxr_comment">// check that all are fixed</em>
-<a class="jxr_linenumber" name="836" href="#836">836</a>       
assertNoErrors(doFsck(conf, false));
-<a class="jxr_linenumber" name="837" href="#837">837</a>       
assertEquals(ROWKEYS.length, countRows());
-<a class="jxr_linenumber" name="838" href="#838">838</a>     } <strong 
class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="839" href="#839">839</a>       
cleanupTable(table);
-<a class="jxr_linenumber" name="840" href="#840">840</a>       
IOUtils.closeQuietly(meta);
-<a class="jxr_linenumber" name="841" href="#841">841</a>     }
-<a class="jxr_linenumber" name="842" href="#842">842</a>   }
-<a class="jxr_linenumber" name="843" href="#843">843</a> 
-<a class="jxr_linenumber" name="844" href="#844">844</a>   <em 
class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="845" href="#845">845</a> <em 
class="jxr_javadoccomment">   * Tests that LINGERING_SPLIT_PARENT is not 
erroneously reported for</em>
-<a class="jxr_linenumber" name="846" href="#846">846</a> <em 
class="jxr_javadoccomment">   * valid cases where the daughters are there.</em>
-<a class="jxr_linenumber" name="847" href="#847">847</a> <em 
class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="848" href="#848">848</a>   @Test 
(timeout=180000)
-<a class="jxr_linenumber" name="849" href="#849">849</a>   <strong 
class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> 
testValidLingeringSplitParent() <strong class="jxr_keyword">throws</strong> 
Exception {
-<a class="jxr_linenumber" name="850" href="#850">850</a>     TableName table =
-<a class="jxr_linenumber" name="851" href="#851">851</a>         
TableName.valueOf(<span class="jxr_string">"testLingeringSplitParent"</span>);
-<a class="jxr_linenumber" name="852" href="#852">852</a>     Table meta = 
<strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="853" href="#853">853</a>     <strong 
class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="854" href="#854">854</a>       
setupTable(table);
-<a class="jxr_linenumber" name="855" href="#855">855</a>       
assertEquals(ROWKEYS.length, countRows());
-<a class="jxr_linenumber" name="856" href="#856">856</a> 
-<a class="jxr_linenumber" name="857" href="#857">857</a>       <em 
class="jxr_comment">// make sure data in regions, if in wal only there is no 
data loss</em>
-<a class="jxr_linenumber" name="858" href="#858">858</a>       
admin.flush(table);
-<a class="jxr_linenumber" name="859" href="#859">859</a> 
-<a class="jxr_linenumber" name="860" href="#860">860</a>       <strong 
class="jxr_keyword">try</strong>(RegionLocator rl = 
connection.getRegionLocator(tbl.getName())) {
-<a class="jxr_linenumber" name="861" href="#861">861</a>         
HRegionLocation location = rl.getRegionLocation(Bytes.toBytes(<span 
class="jxr_string">"B"</span>));
-<a class="jxr_linenumber" name="862" href="#862">862</a> 
-<a class="jxr_linenumber" name="863" href="#863">863</a>         meta = 
connection.getTable(TableName.META_TABLE_NAME, tableExecutorService);
-<a class="jxr_linenumber" name="864" href="#864">864</a>         HRegionInfo 
hri = location.getRegionInfo();
-<a class="jxr_linenumber" name="865" href="#865">865</a> 
-<a class="jxr_linenumber" name="866" href="#866">866</a>         <em 
class="jxr_comment">// do a regular split</em>
-<a class="jxr_linenumber" name="867" href="#867">867</a>         byte[] 
regionName = location.getRegionInfo().getRegionName();
-<a class="jxr_linenumber" name="868" href="#868">868</a>         
admin.splitRegion(location.getRegionInfo().getRegionName(), Bytes.toBytes(<span 
class="jxr_string">"BM"</span>));
-<a class="jxr_linenumber" name="869" href="#869">869</a>         
TestEndToEndSplitTransaction.blockUntilRegionSplit(conf, 60000, regionName, 
<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="870" href="#870">870</a> 
-<a class="jxr_linenumber" name="871" href="#871">871</a>         <em 
class="jxr_comment">// TODO: fixHdfsHoles does not work against splits, since 
the parent dir lingers on</em>
-<a class="jxr_linenumber" name="872" href="#872">872</a>         <em 
class="jxr_comment">// for some time until children references are deleted. 
HBCK erroneously sees this as</em>
-<a class="jxr_linenumber" name="873" href="#873">873</a>         <em 
class="jxr_comment">// overlapping regions</em>
-<a class="jxr_linenumber" name="874" href="#874">874</a>         HBaseFsck 
hbck = doFsck(conf, <strong class="jxr_keyword">true</strong>, <strong 
class="jxr_keyword">true</strong>, false, false, false, <strong 
class="jxr_keyword">true</strong>, <strong class="jxr_keyword">true</strong>, 
<strong class="jxr_keyword">true</strong>, false,
-<a class="jxr_linenumber" name="875" href="#875">875</a>             false, 
false, <strong class="jxr_keyword">null</strong>);
-<a class="jxr_linenumber" name="876" href="#876">876</a>         
assertErrors(hbck, <strong class="jxr_keyword">new</strong> 
HBaseFsck.ErrorReporter.ERROR_CODE[] {}); <em class="jxr_comment">//no 
LINGERING_SPLIT_PARENT reported</em>
-<a class="jxr_linenumber" name="877" href="#877">877</a> 
-<a class="jxr_linenumber" name="878" href="#878">878</a>         <em 
class="jxr_comment">// assert that the split hbase:meta entry is still 
there.</em>
-<a class="jxr_linenumber" name="879" href="#879">879</a>         Get get = 
<strong class="jxr_keyword">new</strong> Get(hri.getRegionName());
-<a class="jxr_linenumber" name="880" href="#880">880</a>         Result result 
= meta.get(get);
-<a class="jxr_linenumber" name="881" href="#881">881</a>         
assertNotNull(result);
-<a class="jxr_linenumber" name="882" href="#882">882</a>         
assertNotNull(MetaTableAccessor.getHRegionInfo(result));
+<a class="jxr_linenumber" name="805" href="#805">805</a>       <em 
class="jxr_comment">// Delete one region from meta, but not hdfs, unassign 
it.</em>
+<a class="jxr_linenumber" name="806" href="#806">806</a>       
deleteRegion(conf, tbl.getTableDescriptor(), Bytes.toBytes(<span 
class="jxr_string">"B"</span>),
+<a class="jxr_linenumber" name="807" href="#807">807</a>           
Bytes.toBytes(<span class="jxr_string">"C"</span>), <strong 
class="jxr_keyword">true</strong>, <strong class="jxr_keyword">true</strong>, 
false);
+<a class="jxr_linenumber" name="808" href="#808">808</a> 
+<a class="jxr_linenumber" name="809" href="#809">809</a>       <em 
class="jxr_comment">// Create a new meta entry to fake it as a split 
parent.</em>
+<a class="jxr_linenumber" name="810" href="#810">810</a>       meta = 
connection.getTable(TableName.META_TABLE_NAME, tableExecutorService);
+<a class="jxr_linenumber" name="811" href="#811">811</a>       HRegionInfo hri 
= location.getRegionInfo();
+<a class="jxr_linenumber" name="812" href="#812">812</a> 
+<a class="jxr_linenumber" name="813" href="#813">813</a>       HRegionInfo a = 
<strong class="jxr_keyword">new</strong> HRegionInfo(tbl.getName(),
+<a class="jxr_linenumber" name="814" href="#814">814</a>           
Bytes.toBytes(<span class="jxr_string">"B"</span>), Bytes.toBytes(<span 
class="jxr_string">"BM"</span>));
+<a class="jxr_linenumber" name="815" href="#815">815</a>       HRegionInfo b = 
<strong class="jxr_keyword">new</strong> HRegionInfo(tbl.getName(),
+<a class="jxr_linenumber" name="816" href="#816">816</a>           
Bytes.toBytes(<span class="jxr_string">"BM"</span>), Bytes.toBytes(<span 
class="jxr_string">"C"</span>));
+<a class="jxr_linenumber" name="817" href="#817">817</a> 
+<a class="jxr_linenumber" name="818" href="#818">818</a>       
hri.setOffline(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="819" href="#819">819</a>       
hri.setSplit(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="820" href="#820">820</a> 
+<a class="jxr_linenumber" name="821" href="#821">821</a>       
MetaTableAccessor.addRegionToMeta(meta, hri, a, b);
+<a class="jxr_linenumber" name="822" href="#822">822</a>       meta.close();
+<a class="jxr_linenumber" name="823" href="#823">823</a>       
admin.flush(TableName.META_TABLE_NAME);
+<a class="jxr_linenumber" name="824" href="#824">824</a> 
+<a class="jxr_linenumber" name="825" href="#825">825</a>       HBaseFsck hbck 
= doFsck(conf, false);
+<a class="jxr_linenumber" name="826" href="#826">826</a>       
assertErrors(hbck, <strong class="jxr_keyword">new</strong> 
HBaseFsck.ErrorReporter.ERROR_CODE[] {
+<a class="jxr_linenumber" name="827" href="#827">827</a>           
HBaseFsck.ErrorReporter.ERROR_CODE.LINGERING_SPLIT_PARENT, 
HBaseFsck.ErrorReporter.ERROR_CODE.HOLE_IN_REGION_CHAIN});
+<a class="jxr_linenumber" name="828" href="#828">828</a> 
+<a class="jxr_linenumber" name="829" href="#829">829</a>       <em 
class="jxr_comment">// regular repair cannot fix lingering split parent</em>
+<a class="jxr_linenumber" name="830" href="#830">830</a>       hbck = 
doFsck(conf, <strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="831" href="#831">831</a>       
assertErrors(hbck, <strong class="jxr_keyword">new</strong> 
HBaseFsck.ErrorReporter.ERROR_CODE[] {
+<a class="jxr_linenumber" name="832" href="#832">832</a>           
HBaseFsck.ErrorReporter.ERROR_CODE.LINGERING_SPLIT_PARENT, 
HBaseFsck.ErrorReporter.ERROR_CODE.HOLE_IN_REGION_CHAIN });
+<a class="jxr_linenumber" name="833" href="#833">833</a>       
assertFalse(hbck.shouldRerun());
+<a class="jxr_linenumber" name="834" href="#834">834</a>       hbck = 
doFsck(conf, false);
+<a class="jxr_linenumber" name="835" href="#835">835</a>       
assertErrors(hbck, <strong class="jxr_keyword">new</strong> 
HBaseFsck.ErrorReporter.ERROR_CODE[] {
+<a class="jxr_linenumber" name="836" href="#836">836</a>           
HBaseFsck.ErrorReporter.ERROR_CODE.LINGERING_SPLIT_PARENT, 
HBaseFsck.ErrorReporter.ERROR_CODE.HOLE_IN_REGION_CHAIN});
+<a class="jxr_linenumber" name="837" href="#837">837</a> 
+<a class="jxr_linenumber" name="838" href="#838">838</a>       <em 
class="jxr_comment">// fix lingering split parent</em>
+<a class="jxr_linenumber" name="839" href="#839">839</a>       hbck = <strong 
class="jxr_keyword">new</strong> HBaseFsck(conf, hbfsckExecutorService);
+<a class="jxr_linenumber" name="840" href="#840">840</a>       hbck.connect();
+<a class="jxr_linenumber" name="841" href="#841">841</a>       
HBaseFsck.setDisplayFullReport(); <em class="jxr_comment">// i.e. -details</em>
+<a class="jxr_linenumber" name="842" href="#842">842</a>       
hbck.setTimeLag(0);
+<a class="jxr_linenumber" name="843" href="#843">843</a>       
hbck.setFixSplitParents(<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="844" href="#844">844</a>       
hbck.onlineHbck();
+<a class="jxr_linenumber" name="845" href="#845">845</a>       
assertTrue(hbck.shouldRerun());
+<a class="jxr_linenumber" name="846" href="#846">846</a>       hbck.close();
+<a class="jxr_linenumber" name="847" href="#847">847</a> 
+<a class="jxr_linenumber" name="848" href="#848">848</a>       Get get = 
<strong class="jxr_keyword">new</strong> Get(hri.getRegionName());
+<a class="jxr_linenumber" name="849" href="#849">849</a>       Result result = 
meta.get(get);
+<a class="jxr_linenumber" name="850" href="#850">850</a>       
assertTrue(result.getColumnCells(HConstants.CATALOG_FAMILY,
+<a class="jxr_linenumber" name="851" href="#851">851</a>           
HConstants.SPLITA_QUALIFIER).isEmpty());
+<a class="jxr_linenumber" name="852" href="#852">852</a>       
assertTrue(result.getColumnCells(HConstants.CATALOG_FAMILY,
+<a class="jxr_linenumber" name="853" href="#853">853</a>           
HConstants.SPLITB_QUALIFIER).isEmpty());
+<a class="jxr_linenumber" name="854" href="#854">854</a>       
admin.flush(TableName.META_TABLE_NAME);
+<a class="jxr_linenumber" name="855" href="#855">855</a> 
+<a class="jxr_linenumber" name="856" href="#856">856</a>       <em 
class="jxr_comment">// fix other issues</em>
+<a class="jxr_linenumber" name="857" href="#857">857</a>       doFsck(conf, 
<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="858" href="#858">858</a> 
+<a class="jxr_linenumber" name="859" href="#859">859</a>       <em 
class="jxr_comment">// check that all are fixed</em>
+<a class="jxr_linenumber" name="860" href="#860">860</a>       
assertNoErrors(doFsck(conf, false));
+<a class="jxr_linenumber" name="861" href="#861">861</a>       
assertEquals(ROWKEYS.length, countRows());
+<a class="jxr_linenumber" name="862" href="#862">862</a>     } <strong 
class="jxr_keyword">finally</strong> {
+<a class="jxr_linenumber" name="863" href="#863">863</a>       
cleanupTable(table);
+<a class="jxr_linenumber" name="864" href="#864">864</a>       
IOUtils.closeQuietly(meta);
+<a class="jxr_linenumber" name="865" href="#865">865</a>     }
+<a class="jxr_linenumber" name="866" href="#866">866</a>   }
+<a class="jxr_linenumber" name="867" href="#867">867</a> 
+<a class="jxr_linenumber" name="868" href="#868">868</a>   <em 
class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="869" href="#869">869</a> <em 
class="jxr_javadoccomment">   * Tests that LINGERING_SPLIT_PARENT is not 
erroneously reported for</em>
+<a class="jxr_linenumber" name="870" href="#870">870</a> <em 
class="jxr_javadoccomment">   * valid cases where the daughters are there.</em>
+<a class="jxr_linenumber" name="871" href="#871">871</a> <em 
class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="872" href="#872">872</a>   @Test 
(timeout=180000)
+<a class="jxr_linenumber" name="873" href="#873">873</a>   <strong 
class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> 
testValidLingeringSplitParent() <strong class="jxr_keyword">throws</strong> 
Exception {
+<a class="jxr_linenumber" name="874" href="#874">874</a>     TableName table =
+<a class="jxr_linenumber" name="875" href="#875">875</a>         
TableName.valueOf(<span class="jxr_string">"testLingeringSplitParent"</span>);
+<a class="jxr_linenumber" name="876" href="#876">876</a>     Table meta = 
<strong class="jxr_keyword">null</strong>;
+<a class="jxr_linenumber" name="877" href="#877">877</a>     <strong 
class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="878" href="#878">878</a>       
setupTable(table);
+<a class="jxr_linenumber" name="879" href="#879">879</a>       
assertEquals(ROWKEYS.length, countRows());
+<a class="jxr_linenumber" name="880" href="#880">880</a> 
+<a class="jxr_linenumber" name="881" href="#881">881</a>       <em 
class="jxr_comment">// make sure data in regions, if in wal only there is no 
data loss</em>
+<a class="jxr_linenumber" name="882" href="#882">882</a>       
admin.flush(table);
 <a class="jxr_linenumber" name="883" href="#883">883</a> 
-<a class="jxr_linenumber" name="884" href="#884">884</a>         
assertEquals(ROWKEYS.length, countRows());
-<a class="jxr_linenumber" name="885" href="#885">885</a> 
-<a class="jxr_linenumber" name="886" href="#886">886</a>         <em 
class="jxr_comment">// assert that we still have the split regions</em>
-<a class="jxr_linenumber" name="887" href="#887">887</a>         
assertEquals(rl.getStartKeys().length, SPLITS.length + 1 + 1); <em 
class="jxr_comment">//SPLITS + 1 is # regions</em>
-<a class="jxr_linenumber" name="888" href="#888">888</a>         <em 
class="jxr_comment">// pre-split.</em>
-<a class="jxr_linenumber" name="889" href="#889">889</a>         
assertNoErrors(doFsck(conf, false));
-<a class="jxr_linenumber" name="890" href="#890">890</a>       }
-<a class="jxr_linenumber" name="891" href="#891">891</a>     } <strong 
class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="892" href="#892">892</a>       
cleanupTable(table);
-<a class="jxr_linenumber" name="893" href="#893">893</a>       
IOUtils.closeQuietly(meta);
-<a class="jxr_linenumber" name="894" href="#894">894</a>     }
-<a class="jxr_linenumber" name="895" href="#895">895</a>   }
-<a class="jxr_linenumber" name="896" href="#896">896</a> 
-<a class="jxr_linenumber" name="897" href="#897">897</a>   <em 
class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="898" href="#898">898</a> <em 
class="jxr_javadoccomment">   * Split crashed after write to hbase:meta 
finished for the parent region, but</em>
-<a class="jxr_linenumber" name="899" href="#899">899</a> <em 
class="jxr_javadoccomment">   * failed to write daughters (pre HBASE-7721 
codebase)</em>
-<a class="jxr_linenumber" name="900" href="#900">900</a> <em 
class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="901" href="#901">901</a>   @Test(timeout=75000)
-<a class="jxr_linenumber" name="902" href="#902">902</a>   <strong 
class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> 
testSplitDaughtersNotInMeta() <strong class="jxr_keyword">throws</strong> 
Exception {
-<a class="jxr_linenumber" name="903" href="#903">903</a>     TableName table = 
TableName.valueOf(<span 
class="jxr_string">"testSplitdaughtersNotInMeta"</span>);
-<a class="jxr_linenumber" name="904" href="#904">904</a>     Table meta = 
connection.getTable(TableName.META_TABLE_NAME, tableExecutorService);
-<a class="jxr_linenumber" name="905" href="#905">905</a>     <strong 
class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="906" href="#906">906</a>       
setupTable(table);
-<a class="jxr_linenumber" name="907" href="#907">907</a>       
assertEquals(ROWKEYS.length, countRows());
-<a class="jxr_linenumber" name="908" href="#908">908</a> 
-<a class="jxr_linenumber" name="909" href="#909">909</a>       <em 
class="jxr_comment">// make sure data in regions, if in wal only there is no 
data loss</em>
-<a class="jxr_linenumber" name="910" href="#910">910</a>       
admin.flush(table);
-<a class="jxr_linenumber" name="911" href="#911">911</a> 
-<a class="jxr_linenumber" name="912" href="#912">912</a>       <strong 
class="jxr_keyword">try</strong>(RegionLocator rl = 
connection.getRegionLocator(tbl.getName())) {
-<a class="jxr_linenumber" name="913" href="#913">913</a>         
HRegionLocation location = rl.getRegionLocation(Bytes.toBytes(<span 
class="jxr_string">"B"</span>));
-<a class="jxr_linenumber" name="914" href="#914">914</a> 
-<a class="jxr_linenumber" name="915" href="#915">915</a>         HRegionInfo 
hri = location.getRegionInfo();
-<a class="jxr_linenumber" name="916" href="#916">916</a> 
-<a class="jxr_linenumber" name="917" href="#917">917</a>         <em 
class="jxr_comment">// do a regular split</em>
-<a class="jxr_linenumber" name="918" href="#918">918</a>         byte[] 
regionName = location.getRegionInfo().getRegionName();
-<a class="jxr_linenumber" name="919" href="#919">919</a>         
admin.splitRegion(location.getRegionInfo().getRegionName(), Bytes.toBytes(<span 
class="jxr_string">"BM"</span>));
-<a class="jxr_linenumber" name="920" href="#920">920</a>         
TestEndToEndSplitTransaction.blockUntilRegionSplit(conf, 60000, regionName, 
<strong class="jxr_keyword">true</strong>);
-<a class="jxr_linenumber" name="921" href="#921">921</a> 
-<a class="jxr_linenumber" name="922" href="#922">922</a>         
PairOfSameType&lt;HRegionInfo&gt; daughters = 
MetaTableAccessor.getDaughterRegions(
-<a class="jxr_linenumber" name="923" href="#923">923</a>             
meta.get(<strong class="jxr_keyword">new</strong> Get(regionName)));
-<a class="jxr_linenumber" name="924" href="#924">924</a> 
-<a class="jxr_linenumber" name="925" href="#925">925</a>         <em 
class="jxr_comment">// Delete daughter regions from meta, but not hdfs, 
unassign it.</em>
-<a class="jxr_linenumber" name="926" href="#926">926</a> 
-<a class="jxr_linenumber" name="927" href="#927">927</a>         ServerName 
firstSN =
-<a class="jxr_linenumber" name="928" href="#928">928</a>             
rl.getRegionLocation(daughters.getFirst().getStartKey()).getServerName();
-<a class="jxr_linenumber" name="929" href="#929">929</a>         ServerName 
secondSN =
-<a class="jxr_linenumber" name="930" href="#930">930</a>             
rl.getRegionLocation(daughters.getSecond().getStartKey()).getServerName();
-<a class="jxr_linenumber" name="931" href="#931">931</a> 
-<a class="jxr_linenumber" name="932" href="#932">932</a>         
undeployRegion(connection, firstSN, daughters.getFirst());
-<a class="jxr_linenumber" name="933" href="#933">933</a>         
undeployRegion(connection, secondSN, daughters.getSecond());
-<a class="jxr_linenumber" name="934" href="#934">934</a> 
-<a class="jxr_linenumber" name="935" href="#935">935</a>         
List&lt;Delete&gt; deletes = <strong class="jxr_keyword">new</strong> 
ArrayList&lt;&gt;();
-<a class="jxr_linenumber" name="936" href="#936">936</a>         
deletes.add(<strong class="jxr_keyword">new</strong> 
Delete(daughters.getFirst().getRegionName()));
-<a class="jxr_linenumber" name="937" href="#937">937</a>         
deletes.add(<strong class="jxr_keyword">new</strong> 
Delete(daughters.getSecond().getRegionName()));
-<a class="jxr_linenumber" name="938" href="#938">938</a>         
meta.delete(deletes);
-<a class="jxr_linenumber" name="939" href="#939">939</a> 
-<a class="jxr_linenumber" name="940" href="#940">940</a>         <em 
class="jxr_comment">// Remove daughters from regionStates</em>
-<a class="jxr_linenumber" name="941" href="#941">941</a>         RegionStates 
regionStates = TEST_UTIL.getMiniHBaseCluster().getMaster().
-<a class="jxr_linenumber" name="942" href="#942">942</a>             
getAssignmentManager().getRegionStates();
-<a class="jxr_linenumber" name="943" href="#943">943</a>         
regionStates.deleteRegion(daughters.getFirst());
-<a class="jxr_linenumber" name="944" href="#944">944</a>         
regionStates.deleteRegion(daughters.getSecond());
+<a class="jxr_linenumber" name="884" href="#884">884</a>       <strong 
class="jxr_keyword">try</strong>(RegionLocator rl = 
connection.getRegionLocator(tbl.getName())) {
+<a class="jxr_linenumber" name="885" href="#885">885</a>         
HRegionLocation location = rl.getRegionLocation(Bytes.toBytes(<span 
class="jxr_string">"B"</span>));
+<a class="jxr_linenumber" name="886" href="#886">886</a> 
+<a class="jxr_linenumber" name="887" href="#887">887</a>         meta = 
connection.getTable(TableName.META_TABLE_NAME, tableExecutorService);
+<a class="jxr_linenumber" name="888" href="#888">888</a>         HRegionInfo 
hri = location.getRegionInfo();
+<a class="jxr_linenumber" name="889" href="#889">889</a> 
+<a class="jxr_linenumber" name="890" href="#890">890</a>         <em 
class="jxr_comment">// do a regular split</em>
+<a class="jxr_linenumber" name="891" href="#891">891</a>         byte[] 
regionName = location.getRegionInfo().getRegionName();
+<a class="jxr_linenumber" name="892" href="#892">892</a>         
admin.splitRegion(location.getRegionInfo().getRegionName(), Bytes.toBytes(<span 
class="jxr_string">"BM"</span>));
+<a class="jxr_linenumber" name="893" href="#893">893</a>         
TestEndToEndSplitTransaction.blockUntilRegionSplit(conf, 60000, regionName, 
<strong class="jxr_keyword">true</strong>);
+<a class="jxr_linenumber" name="894" href="#894">894</a> 
+<a class="jxr_linenumber" name="895" href="#895">895</a>         <em 
class="jxr_comment">// TODO: fixHdfsHoles does not work against splits, since 
the parent dir lingers on</em>
+<a class="jxr_linenumber" name="896" href="#896">896</a>         <em 
class="jxr_comment">// for some time until children references are deleted. 
HBCK erroneously sees this as</em>
+<a class="jxr_linenumber" name="897" href="#897">897</a>         <em 
class="jxr_comment">// overlapping regions</em>
+<a class="jxr_linenumber" name="898" href="#898">898</a>         HBaseFsck 
hbck = doFsck(conf, <strong class="jxr_keyword">true</strong>, <strong 
class="jxr_keyword">true</strong>, false, false, false, <strong 
class="jxr_keyword">true</strong>, <strong class="jxr_keyword">true</strong>, 
<strong class="jxr_keyword">true</strong>, false,
+<a class="jxr_linenumber" name="899" href="#899">899</a>             false, 
false, <strong class="jxr_keyword">null</strong>);
+<a class="jxr_linenumber" name="900" href="#900">900</a>         
assertErrors(hbck, <strong class="jxr_keyword">new</strong> 
HBaseFsck.ErrorReporter.ERROR_CODE[] {}); <em class="jxr_comment">//no 
LINGERING_SPLIT_PARENT reported</em>
+<a class="jxr_linenumber" name="901" href="#901">901</a> 
+<a class="jxr_linenumber" name="902" href="#902">902</a>         <em 
class="jxr_comment">// assert that the split hbase:meta entry is still 
there.</em>
+<a class="jxr_linenumber" name="903" href="#903">903</a>         Get get = 
<strong class="jxr_keyword">new</strong> Get(hri.getRegionName());
+<a class="jxr_linenumber" name="904" href="#904">904</a>         Result result 
= meta.get(get);
+<a class="jxr_linenumber" name="905" href="#905">905</a>         
assertNotNull(result);
+<a class="jxr_linenumber" name="906" href="#906">906</a>         
assertNotNull(MetaTableAccessor.getHRegionInfo(result));
+<a class="jxr_linenumber" name="907" href="#907">907</a> 
+<a class="jxr_linenumber" name="908" href="#908">908</a>         
assertEquals(ROWKEYS.length, countRows());
+<a class="jxr_linenumber" name="909" href="#909">909</a> 
+<a class="jxr_linenumber" name="910" href="#910">910</a>         <em 
class="jxr_comment">// assert that we still have the split regions</em>
+<a class="jxr_linenumber" name="911" href="#911">911</a>         
assertEquals(rl.getStartKeys().length, SPLITS.length + 1 + 1); <em 
class="jxr_comment">//SPLITS + 1 is # regions</em>
+<a class="jxr_linenumber" name="912" href="#912">912</a>         <em 
class="jxr_comment">// pre-split.</em>
+<a class="jxr_linenumber" name="913" href="#913">913</a>         
assertNoErrors(doFsck(conf, false));
+<a class="jxr_linenumber" name="914" href="#914">914</a>       }
+<a class="jxr_linenumber" name="915" href="#915">915</a>     } <strong 
class="jxr_keyword">finally</strong> {
+<a class="jxr_linenumber" name="916" href="#916">916</a>       
cleanupTable(table);
+<a class="jxr_linenumber" name="917" href="#917">917</a>       
IOUtils.closeQuietly(meta);
+<a class="jxr_linenumber" name="918" href="#918">918</a>     }
+<a class="jxr_linenumber" name="919" href="#919">919</a>   }
+<a class="jxr_linenumber" name="920" href="#920">920</a> 
+<a class="jxr_linenumber" name="921" href="#921">921</a>   <em 
class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="922" href="#922">922</a> <em 
class="jxr_javadoccomment">   * Split crashed after write to hbase:meta 
finished for the parent region, but</em>
+<a class="jxr_linenumber" name="923" href="#923">923</a> <em 
class="jxr_javadoccomment">   * failed to write daughters (pre HBASE-7721 
codebase)</em>
+<a class="jxr_linenumber" name="924" href="#924">924</a> <em 
class="jxr_javadoccomment">   */</em>
+<a class="jxr_linenumber" name="925" href="#925">925</a>   @Test(timeout=75000)
+<a class="jxr_linenumber" name="926" href="#926">926</a>   <strong 
class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> 
testSplitDaughtersNotInMeta() <strong class="jxr_keyword">throws</strong> 
Exception {
+<a class="jxr_linenumber" name="927" href="#927">927</a>     TableName table = 
TableName.valueOf(<span 
class="jxr_string">"testSplitdaughtersNotInMeta"</span>);
+<a class="jxr_linenumber" name="928" href="#928">928</a>     Table meta = 
connection.getTable(TableName.META_TABLE_NAME, tableExecutorService);
+<a class="jxr_linenumber" name="929" href="#929">929</a>     <strong 
class="jxr_keyword">try</strong> {
+<a class="jxr_linenumber" name="930" href="#930">930</a>       
setupTable(table);
+<a class="jxr_linenumber" name="931" href="#931">931</a>       
assertEquals(ROWKEYS.length, countRows());
+<a class="jxr_linenumber" name="932" href="#932">932</a> 
+<a class="jxr_linenumber" name="933" href="#933">933</a>       <em 
class="jxr_comment">// make sure data in regions, if in wal only there is no 
data loss</em>
+<a class="jxr_linenumber" name="934" href="#934">934</a>       
admin.flush(table);
+<a class="jxr_linenumber" name="935" href="#935">935</a> 
+<a class="jxr_linenumber" name="936" href="#936">936</a>       <strong 
class="jxr_keyword">try</strong>(RegionLocator rl = 
connection.getRegionLocator(tbl.getName())) {
+<a class="jxr_linenumber" name="937" href="#937">937</a>         
HRegionLocation location = rl.getRegionLocation(Bytes.toBytes(<span 
class="jxr_string">"B"</span>));
+<a class="jxr_linenumber" name="938" href="#938">938</a> 
+<a class="jxr_linenumber" name="939" href="#939">939</a>         HRegionInfo 
hri = location.getRegionInfo();
+<a class="jxr_linenumber" name="940" href="#940">940</a> 
+<a class="jxr_linenumber" name="941" href="#941">941</a>         <em 
class="jxr_comment">// do a regular split</em>
+<a class="jxr_linenumber" name="942" href="#942">942</a>         byte[] 
regionName = location.getRegionInfo().getRegionName();
+<a class="jxr_linenumber" name="943" href="#943">943</a>         
admin.splitRegion(location.getRegionInfo().getRegionName(), Bytes.toBytes(<span 
class="jxr_string">"BM"</span>));
+<a class="jxr_linenumber" name="944" href="#944">944</a>         
TestEndToEndSplitTransaction.blockUntilRegionSplit(conf, 60000, regionName, 
<strong class="jxr_keyword">true</strong>);
 <a class="jxr_linenumber" name="945" href="#945">945</a> 
-<a class="jxr_linenumber" name="946" href="#946">946</a>         HBaseFsck 
hbck = doFsck(conf, false);
-<a class="jxr_linenumber" name="947" href="#947">947</a>         
assertErrors(hbck, <strong class="jxr_keyword">new</strong> 
HBaseFsck.ErrorReporter.ERROR_CODE[] {
-<a class="jxr_linenumber" name="948" href="#948">948</a>             
HBaseFsck.ErrorReporter.ERROR_CODE.NOT_IN_META_OR_DEPLOYED,
-<a class="jxr_linenumber" name="949" href="#949">949</a>             
HBaseFsck.ErrorReporter.ERROR_CODE.NOT_IN_META_OR_DEPLOYED,
-<a class="jxr_linenumber" name="950" href="#950">950</a>             
HBaseFsck.ErrorReporter.ERROR_CODE.HOLE_IN_REGION_CHAIN }); <em 
class="jxr_comment">//no LINGERING_SPLIT_PARENT</em>
-<a class="jxr_linenumber" name="951" href="#951">951</a> 
-<a class="jxr_linenumber" name="952" href="#952">952</a>         <em 
class="jxr_comment">// now fix it. The fix should not revert the region split, 
but add daughters to META</em>
-<a class="jxr_linenumber" name="953" href="#953">953</a>         hbck = 
doFsck(conf, <strong class="jxr_keyword">true</strong>, <strong 
class="jxr_keyword">true</strong>, false, false, false, false, false, false, 
false,
-<a class="jxr_linenumber" name="954" href="#954">954</a>             false, 
false, <strong class="jxr_keyword">null</strong>);
-<a class="jxr_linenumber" name="955" href="#955">955</a>         
assertErrors(hbck, <strong class="jxr_keyword">new</strong> 
HBaseFsck.ErrorReporter.ERROR_CODE[] {
-<a class="jxr_linenumber" name="956" href="#956">956</a>             
HBaseFsck.ErrorReporter.ERROR_CODE.NOT_IN_META_OR_DEPLOYED,
-<a class="jxr_linenumber" name="957" href="#957">957</a>             
HBaseFsck.ErrorReporter.ERROR_CODE.NOT_IN_META_OR_DEPLOYED,
-<a class="jxr_linenumber" name="958" href="#958">958</a>             
HBaseFsck.ErrorReporter.ERROR_CODE.HOLE_IN_REGION_CHAIN });
-<a class="jxr_linenumber" name="959" href="#959">959</a> 
-<a class="jxr_linenumber" name="960" href="#960">960</a>         <em 
class="jxr_comment">// assert that the split hbase:meta entry is still 
there.</em>
-<a class="jxr_linenumber" name="961" href="#961">961</a>         Get get = 
<strong class="jxr_keyword">new</strong> Get(hri.getRegionName());
-<a class="jxr_linenumber" name="962" href="#962">962</a>         Result result 
= meta.get(get);
-<a class="jxr_linenumber" name="963" href="#963">963</a>         
assertNotNull(result);
-<a class="jxr_linenumber" name="964" href="#964">964</a>         
assertNotNull(MetaTableAccessor.getHRegionInfo(result));
-<a class="jxr_linenumber" name="965" href="#965">965</a> 
-<a class="jxr_linenumber" name="966" href="#966">966</a>         
assertEquals(ROWKEYS.length, countRows());
-<a class="jxr_linenumber" name="967" href="#967">967</a> 
-<a class="jxr_linenumber" name="968" href="#968">968</a>         <em 
class="jxr_comment">// assert that we still have the split regions</em>
-<a class="jxr_linenumber" name="969" href="#969">969</a>         
assertEquals(rl.getStartKeys().length, SPLITS.length + 1 + 1); <em 
class="jxr_comment">//SPLITS + 1 is # regions</em>
-<a class="jxr_linenumber" name="970" href="#970">970</a>         <em 
class="jxr_comment">// pre-split.</em>
-<a class="jxr_linenumber" name="971" href="#971">971</a>         
assertNoErrors(doFsck(conf, false)); <em class="jxr_comment">//should be fixed 
by now</em>
-<a class="jxr_linenumber" name="972" href="#972">972</a>       }
-<a class="jxr_linenumber" name="973" href="#973">973</a>     } <strong 
class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="974" href="#974">974</a>       meta.close();
-<a class="jxr_linenumber" name="975" href="#975">975</a>       
cleanupTable(table);
-<a class="jxr_linenumber" name="976" href="#976">976</a>     }
-<a class="jxr_linenumber" name="977" href="#977">977</a>   }
-<a class="jxr_line

<TRUNCATED>

Reply via email to