From 5ba6ca28f72488a05e463a03a56308e605ae9fb1 Mon Sep 17 00:00:00 2001 From: stack Date: Wed, 9 Sep 2015 10:06:30 -0700 Subject: [PATCH] HBASE-14392 [tests] TestLogRollingNoCluster fails on master from time to time --- .../hadoop/hbase/regionserver/wal/ProtobufLogWriter.java | 10 ++++++---- .../hadoop/hbase/regionserver/wal/TestLogRollingNoCluster.java | 4 +--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.java index a6e4eb5..d3d9eb3 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/ProtobufLogWriter.java @@ -157,6 +157,7 @@ public class ProtobufLogWriter extends WriterBase { this.trailer.writeTo(output); output.writeInt(trailerSize); output.write(ProtobufLogReader.PB_WAL_COMPLETE_MAGIC); + sync(); this.trailerWritten = true; } catch (IOException ioe) { LOG.warn("Failed to write trailer, non-fatal, continuing...", ioe); @@ -166,11 +167,12 @@ public class ProtobufLogWriter extends WriterBase { @Override public void sync() throws IOException { try { + FSDataOutputStream fsdos = this.output; + if (fsdos == null) return; // Presume closed // This looks to be a noop but its what we have always done. Leaving for now. - this.output.flush(); + fsdos.flush(); // TODO: Add in option to call hsync. See HBASE-5954 Allow proper fsync support for HBase - // - this.output.hflush(); + fsdos.hflush(); } catch (NullPointerException npe) { // Concurrent close... throw new IOException(npe); @@ -194,4 +196,4 @@ public class ProtobufLogWriter extends WriterBase { void setWALTrailer(WALTrailer walTrailer) { this.trailer = walTrailer; } -} +} \ No newline at end of file diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestLogRollingNoCluster.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestLogRollingNoCluster.java index 41e05ae..bc33fc0 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestLogRollingNoCluster.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestLogRollingNoCluster.java @@ -25,7 +25,6 @@ import java.util.concurrent.atomic.AtomicLong; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.conf.Configuration; -import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.hbase.HBaseTestingUtility; import org.apache.hadoop.hbase.HConstants; @@ -44,7 +43,7 @@ import org.junit.Test; import org.junit.experimental.categories.Category; /** - * Test many concurrent appenders to an {@link #WAL} while rolling the log. + * Test many concurrent appenders to an WAL while rolling the log. */ @Category({RegionServerTests.class, SmallTests.class}) public class TestLogRollingNoCluster { @@ -60,7 +59,6 @@ public class TestLogRollingNoCluster { */ @Test public void testContendedLogRolling() throws IOException, InterruptedException { - FileSystem fs = FileSystem.get(TEST_UTIL.getConfiguration()); Path dir = TEST_UTIL.getDataTestDir(); // The implementation needs to know the 'handler' count. TEST_UTIL.getConfiguration().setInt(HConstants.REGION_SERVER_HANDLER_COUNT, THREAD_COUNT); -- 2.2.1