Author: stack
Date: Thu Jun 16 20:43:28 2011
New Revision: 1136659

URL: http://svn.apache.org/viewvc?rev=1136659&view=rev
Log:
HBASE-3889  NPE in Distributed Log Splitting

Modified:
    hbase/trunk/CHANGES.txt
    
hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/SplitLogWorker.java
    
hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestHLogSplit.java

Modified: hbase/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/hbase/trunk/CHANGES.txt?rev=1136659&r1=1136658&r2=1136659&view=diff
==============================================================================
--- hbase/trunk/CHANGES.txt (original)
+++ hbase/trunk/CHANGES.txt Thu Jun 16 20:43:28 2011
@@ -127,6 +127,7 @@ Release 0.91.0 - Unreleased
    HBASE-3983  list command in shell seems broken
    HBASE-3793  HBASE-3468 Broke checkAndPut with null value (Ming Ma)
    HBASE-3995  HBASE-3946 broke TestMasterFailover
+   HBASE-3889  NPE in Distributed Log Splitting (Anirudh Todi)
 
   IMPROVEMENTS
    HBASE-3290  Max Compaction Size (Nicolas Spiegelberg via Stack)  

Modified: 
hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/SplitLogWorker.java
URL: 
http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/SplitLogWorker.java?rev=1136659&r1=1136658&r2=1136659&view=diff
==============================================================================
--- 
hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/SplitLogWorker.java
 (original)
+++ 
hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/SplitLogWorker.java
 Thu Jun 16 20:43:28 2011
@@ -136,6 +136,7 @@ public class SplitLogWorker extends ZooK
 
   @Override
   public void run() {
+   try {
     LOG.info("SplitLogWorker " + this.serverName + " starting");
     this.watcher.registerListener(this);
     int res;
@@ -162,8 +163,13 @@ public class SplitLogWorker extends ZooK
     }
 
     taskLoop();
-
-    LOG.info("SplitLogWorker " + this.serverName + " exiting");
+   } catch (Throwable t) {
+          // only a logical error can cause here. Printing it out 
+          // to make debugging easier
+          LOG.error("unexpected error ", t);
+   } finally {
+          LOG.info("SplitLogWorker " + this.serverName + " exiting");
+   }
   }
 
   /**

Modified: 
hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestHLogSplit.java
URL: 
http://svn.apache.org/viewvc/hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestHLogSplit.java?rev=1136659&r1=1136658&r2=1136659&view=diff
==============================================================================
--- 
hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestHLogSplit.java
 (original)
+++ 
hbase/trunk/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestHLogSplit.java
 Thu Jun 16 20:43:28 2011
@@ -152,7 +152,8 @@ public class TestHLogSplit {
    * @throws IOException
    * @see https://issues.apache.org/jira/browse/HBASE-3020
    */
-  @Test public void testRecoveredEditsPathForMeta() throws IOException {
+  @Test 
+  public void testRecoveredEditsPathForMeta() throws IOException {
     FileSystem fs = FileSystem.get(TEST_UTIL.getConfiguration());
     byte [] encoded = 
HRegionInfo.FIRST_META_REGIONINFO.getEncodedNameAsBytes();
     Path tdir = new Path(hbaseDir, Bytes.toString(HConstants.META_TABLE_NAME));
@@ -952,7 +953,35 @@ public class TestHLogSplit {
 
     assertEquals(true, logsAreEqual(originalLog, splitLog));
   }
+  
+  @Test
+  public void testSplitLogFileDeletedRegionDir()
+  throws IOException {
+       LOG.info("testSplitLogFileDeletedRegionDir");
+       final String REGION = "region__1";
+    regions.removeAll(regions);
+    regions.add(REGION);
+
+
+    generateHLogs(1, 10, -1);
+    FileStatus logfile = fs.listStatus(hlogDir)[0];
+    fs.initialize(fs.getUri(), conf);
+    
+    Path regiondir = new Path(tabledir, REGION);
+    LOG.info("Region directory is" + regiondir);
+    fs.delete(regiondir, true);
+    
+    HLogSplitter.splitLogFileToTemp(hbaseDir, "tmpdir", logfile, fs,
+        conf, reporter);
+    HLogSplitter.moveRecoveredEditsFromTemp("tmpdir", hbaseDir, oldLogDir,
+        logfile.getPath().toString(), conf);
+    
+    assertTrue(!fs.exists(regiondir));
+    assertTrue(true);
+  }
 
+  
+  
   @Test
   public void testSplitLogFileEmpty() throws IOException {
     LOG.info("testSplitLogFileEmpty");
@@ -1009,7 +1038,6 @@ public class TestHLogSplit {
     assertEquals(1, fs.listStatus(corruptDir).length);
   }
 
-
   private void flushToConsole(String s) {
     System.out.println(s);
     System.out.flush();


Reply via email to