diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/wal/FSHLogProvider.java hbase-server/src/main/java/org/apache/hadoop/hbase/wal/FSHLogProvider.java index f1d6e60..5631db8 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/wal/FSHLogProvider.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/wal/FSHLogProvider.java @@ -55,12 +55,20 @@ public class FSHLogProvider extends AbstractFSWALProvider { // Configuration already does caching for the Class lookup. Class logWriterClass = conf.getClass("hbase.regionserver.hlog.writer.impl", ProtobufLogWriter.class, Writer.class); + Writer writer = null; try { - Writer writer = logWriterClass.newInstance(); + writer = logWriterClass.newInstance(); writer.init(fs, path, conf, overwritable); return writer; - } catch (Exception e) { - LOG.debug("Error instantiating log writer.", e); + } catch (Exception e) { + LOG.debug("Error instantiating log writer.", e); + if (writer != null) { + try{ + writer.close(); + } catch(IOException ee){ + LOG.error("cannot close log writer", ee); + } + } throw new IOException("cannot get log writer", e); } } diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALFactory.java hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALFactory.java index ccd2c6e..c9826d6 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALFactory.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALFactory.java @@ -291,11 +291,12 @@ public class WALFactory { long openTimeout = timeoutMillis + startWaiting; int nbAttempt = 0; FSDataInputStream stream = null; + AbstractFSWALProvider.Reader reader = null; while (true) { try { if (lrClass != ProtobufLogReader.class) { // User is overriding the WAL reader, let them. - AbstractFSWALProvider.Reader reader = lrClass.newInstance(); + reader = lrClass.newInstance(); reader.init(fs, path, conf, null); return reader; } else { @@ -307,8 +308,7 @@ public class WALFactory { byte[] magic = new byte[ProtobufLogReader.PB_WAL_MAGIC.length]; boolean isPbWal = (stream.read(magic) == magic.length) && Arrays.equals(magic, ProtobufLogReader.PB_WAL_MAGIC); - AbstractFSWALProvider.Reader reader = - isPbWal ? new ProtobufLogReader() : new SequenceFileLogReader(); + reader = isPbWal ? new ProtobufLogReader() : new SequenceFileLogReader(); reader.init(fs, path, conf, stream); return reader; } @@ -317,6 +317,9 @@ public class WALFactory { if (stream != null) { stream.close(); } + if (reader != null) { + reader.close(); + } } catch (IOException exception) { LOG.warn("Could not close FSDataInputStream" + exception.getMessage()); LOG.debug("exception details", exception);