Why not get rid of journal stream completely? Perhaps we can do this in a later JIRA.
Still have a findbug warning because of the custom synchronization in logSync.
synchronization is manually done in logSync()
<Class name="org.apache.hadoop.hdfs.server.namenode.FSEditLog" />
<Field name="editLogStream" />
<Bug pattern="IS2_INCONSISTENT_SYNC" />
You've added a new log statement in EditLogFileOutputStream#flushAndSync. Shouldn't it be a LOG.warn()? There should be any instance of calling flush without data having been written to the stream first. The only case it could happen is when the stream has errored on a previous write, but it should have been removed from JournalSetOutputStream at that point. In fact, Im not sure how this worked in the old code either.
In FSEditLog#close you removed the assert for !journals.isEmpty. Instead you could put assert editLogStream != null;
In FSEditLog#logEdit, you catch the IOException, log and continue as normal. I can't see where the error is handled later. I don't think editLogStream.setReadyToFlush() will throw an exception if no active journals are found.
JournalSet#getSyncTimes doesn't return anything, so it's not really a getter. I think this would be cleaner if getSyncTimes() just returned a String rather than taking in a StringBuilder.
The finalizeLogSegments takes parameters which are not available in close method.
The last txid should be available to stream, as it must have passed through write(). Same for first tx id. In any case, it's not that important to me, just something I thought would make things nicer.