diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java index fe65aa0..7f5c8de 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java @@ -1159,23 +1159,27 @@ public class HRegionServer implements ClientProtocol, } private void closeWAL(final boolean delete) { - try { - if (this.hlogForMeta != null) { - //All hlogs (meta and non-meta) are in the same directory. Don't call - //closeAndDelete here since that would delete all hlogs not just the - //meta ones. We will just 'close' the hlog for meta here, and leave - //the directory cleanup to the follow-on closeAndDelete call. + if (this.hlogForMeta != null) { + // All hlogs (meta and non-meta) are in the same directory. Don't call + // closeAndDelete here since that would delete all hlogs not just the + // meta ones. We will just 'close' the hlog for meta here, and leave + // the directory cleanup to the follow-on closeAndDelete call. + try { this.hlogForMeta.close(); + } catch (Throwable e) { + LOG.error("Metalog close and delete failed", RemoteExceptionHandler.checkThrowable(e)); } - if (this.hlog != null) { + } + if (this.hlog != null) { + try { if (delete) { hlog.closeAndDelete(); } else { hlog.close(); } + } catch (Throwable e) { + LOG.error("Close and delete failed", RemoteExceptionHandler.checkThrowable(e)); } - } catch (Throwable e) { - LOG.error("Close and delete failed", RemoteExceptionHandler.checkThrowable(e)); } } diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationHLogReaderManager.java hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationHLogReaderManager.java index 4ea518e..82b7023 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationHLogReaderManager.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationHLogReaderManager.java @@ -64,6 +64,7 @@ public class ReplicationHLogReaderManager { // Detect if this is a new file, if so get a new reader else // reset the current reader so that we see the new data if (this.reader == null || !this.lastPath.equals(path)) { + this.closeReader(); this.reader = HLogFactory.createReader(this.fs, path, this.conf); this.lastPath = path; } else { diff --git hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.java hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.java index c5bc614..b5a8e51 100644 --- hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.java +++ hbase-server/src/main/java/org/apache/hadoop/hbase/replication/regionserver/ReplicationSource.java @@ -365,6 +365,7 @@ public class ReplicationSource extends Thread } } finally { try { + this.reader = null; this.repLogReader.closeReader(); } catch (IOException e) { gotIOE = true; @@ -525,6 +526,7 @@ public class ReplicationSource extends Thread LOG.info("Log " + this.currentPath + " still exists at " + possibleLogLocation); // Breaking here will make us sleep since reader is null + this.reader = null; return true; } }