Index: hbase-server/src/test/java/org/apache/hadoop/hbase/replication/regionserver/TestReplicationHLogReaderManager.java =================================================================== --- hbase-server/src/test/java/org/apache/hadoop/hbase/replication/regionserver/TestReplicationHLogReaderManager.java (revision 1545168) +++ hbase-server/src/test/java/org/apache/hadoop/hbase/replication/regionserver/TestReplicationHLogReaderManager.java (working copy) @@ -141,12 +141,6 @@ // Grab the path that was generated when the log rolled as part of its creation Path path = pathWatcher.currentPath; - // open it, it's empty so it fails - try { - logManager.openReader(path); - fail("Shouldn't be able to open an empty file"); - } catch (EOFException ex) {} - assertEquals(0, logManager.getPosition()); appendToLog(); @@ -184,12 +178,6 @@ path = pathWatcher.currentPath; - // Finally we have a new empty log, which should still give us EOFs - try { - logManager.openReader(path); - fail(); - } catch (EOFException ex) {} - for (int i = 0; i < nbRows; i++) { appendToLogPlus(walEditKVs); } log.rollWriter(); logManager.openReader(path); Index: hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/FSHLog.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/FSHLog.java (revision 1545168) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/FSHLog.java (working copy) @@ -524,6 +524,13 @@ FSDataOutputStream nextHdfsOut = null; if (nextWriter instanceof ProtobufLogWriter) { nextHdfsOut = ((ProtobufLogWriter)nextWriter).getStream(); + // perform the costly sync before we get the lock to roll writers. + try { + nextWriter.sync(); + } catch (IOException e) { + // optimization failed, no need to abort here. + LOG.warn("pre-sync failed", e); + } } Path oldFile = null;