Author: enis
Date: Wed May 15 18:52:20 2013
New Revision: 1483004

URL: http://svn.apache.org/r1483004
Log:
HBASE-5995 Fix and reenable TestLogRolling.testLogRollOnPipelineRestart

Modified:
    
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/FSHLog.java
    
hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestLogRolling.java

Modified: 
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/FSHLog.java
URL: 
http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/FSHLog.java?rev=1483004&r1=1483003&r2=1483004&view=diff
==============================================================================
--- 
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/FSHLog.java
 (original)
+++ 
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/FSHLog.java
 Wed May 15 18:52:20 2013
@@ -475,11 +475,14 @@ class FSHLog implements HLog, Syncable {
         return null;
       }
       byte [][] regionsToFlush = null;
+      if (closed) {
+        LOG.debug("HLog closed. Skipping rolling of writer");
+        return null;
+      }
       try {
         this.logRollRunning = true;
-        boolean isClosed = closed;
-        if (isClosed || !closeBarrier.beginOp()) {
-          LOG.debug("HLog " + (isClosed ? "closed" : "closing") + ". Skipping 
rolling of writer");
+        if (!closeBarrier.beginOp()) {
+          LOG.debug("HLog closing. Skipping rolling of writer");
           return regionsToFlush;
         }
         // Do all the preparation outside of the updateLock to block
@@ -955,6 +958,7 @@ class FSHLog implements HLog, Syncable {
           } catch (IOException e) {
             LOG.error("Error while syncing, requesting close of hlog ", e);
             requestLogRoll();
+            Threads.sleep(this.optionalFlushInterval);
           }
         }
       } catch (InterruptedException e) {
@@ -1081,7 +1085,7 @@ class FSHLog implements HLog, Syncable {
         }
       }
     } catch (IOException e) {
-      LOG.fatal("Could not sync. Requesting close of hlog", e);
+      LOG.fatal("Could not sync. Requesting roll of hlog", e);
       requestLogRoll();
       throw e;
     }
@@ -1160,18 +1164,22 @@ class FSHLog implements HLog, Syncable {
     return this.getNumCurrentReplicas != null;
   }
 
+  @Override
   public void hsync() throws IOException {
     syncer();
   }
 
+  @Override
   public void hflush() throws IOException {
     syncer();
   }
 
+  @Override
   public void sync() throws IOException {
     syncer();
   }
 
+  @Override
   public void sync(long txid) throws IOException {
     syncer(txid);
   }

Modified: 
hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestLogRolling.java
URL: 
http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestLogRolling.java?rev=1483004&r1=1483003&r2=1483004&view=diff
==============================================================================
--- 
hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestLogRolling.java
 (original)
+++ 
hbase/trunk/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestLogRolling.java
 Wed May 15 18:52:20 2013
@@ -18,33 +18,60 @@
  */
 package org.apache.hadoop.hbase.regionserver.wal;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.EOFException;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.commons.logging.impl.Log4JLogger;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
-import org.apache.hadoop.hbase.*;
-import org.apache.hadoop.hbase.client.*;
+import org.apache.hadoop.hbase.HBaseTestingUtility;
+import org.apache.hadoop.hbase.HColumnDescriptor;
+import org.apache.hadoop.hbase.HConstants;
+import org.apache.hadoop.hbase.HRegionInfo;
+import org.apache.hadoop.hbase.HTableDescriptor;
+import org.apache.hadoop.hbase.KeyValue;
+import org.apache.hadoop.hbase.LargeTests;
+import org.apache.hadoop.hbase.MiniHBaseCluster;
+import org.apache.hadoop.hbase.client.Get;
+import org.apache.hadoop.hbase.client.HBaseAdmin;
+import org.apache.hadoop.hbase.client.HTable;
+import org.apache.hadoop.hbase.client.Put;
+import org.apache.hadoop.hbase.client.Result;
+import org.apache.hadoop.hbase.client.ResultScanner;
+import org.apache.hadoop.hbase.client.Scan;
 import org.apache.hadoop.hbase.exceptions.FailedLogCloseException;
+import org.apache.hadoop.hbase.fs.HFileSystem;
 import org.apache.hadoop.hbase.regionserver.HRegion;
 import org.apache.hadoop.hbase.regionserver.HRegionServer;
-import org.apache.hadoop.hbase.util.*;
+import org.apache.hadoop.hbase.util.Bytes;
+import org.apache.hadoop.hbase.util.FSUtils;
+import org.apache.hadoop.hbase.util.JVMClusterUtil;
 import org.apache.hadoop.hdfs.DFSClient;
 import org.apache.hadoop.hdfs.MiniDFSCluster;
 import org.apache.hadoop.hdfs.protocol.DatanodeInfo;
 import org.apache.hadoop.hdfs.server.datanode.DataNode;
 import org.apache.hadoop.hdfs.server.namenode.LeaseManager;
 import org.apache.log4j.Level;
-import org.junit.*;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
 import org.junit.experimental.categories.Category;
 
-import java.io.*;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.*;
-
-import static org.junit.Assert.*;
-
 /**
  * Test log deletion as logs are rolled.
  */
@@ -403,7 +430,7 @@ public class TestLogRolling  {
    * restarted.
    * @throws Exception
    */
-  //DISABLED BECAUSE FLAKEY @Test
+  @Test
   public void testLogRollOnPipelineRestart() throws Exception {
     LOG.info("Starting testLogRollOnPipelineRestart");
     assertTrue("This test requires HLog file replication.",
@@ -504,11 +531,15 @@ public class TestLogRolling  {
 
     // read back the data written
     Set<String> loggedRows = new HashSet<String>();
+    FSUtils fsUtils = FSUtils.getInstance(fs, TEST_UTIL.getConfiguration());
     for (Path p : paths) {
+      LOG.debug("recovering lease for " + p);
+      fsUtils.recoverFileLease(((HFileSystem)fs).getBackingFs(), p, 
TEST_UTIL.getConfiguration(), null);
+
       LOG.debug("Reading HLog "+FSUtils.getPath(p));
       HLog.Reader reader = null;
       try {
-        reader = HLogFactory.createReader(fs, p, 
+        reader = HLogFactory.createReader(fs, p,
             TEST_UTIL.getConfiguration());
         HLog.Entry entry;
         while ((entry = reader.next()) != null) {


Reply via email to