Index: src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestHLog.java =================================================================== --- src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestHLog.java (revision 1150245) +++ src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestHLog.java (working copy) @@ -722,5 +722,16 @@ public void logCloseRequested() { // not interested } + + @Override + public void logArchiveStart(Path oldPath, Path newPath) throws IOException { + // not interested + } + + @Override + public void logArchiveComplete(Path oldPath, Path newPath, + boolean archivalWasSuccessful) throws IOException { + // not interested + } } } Index: src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestWALObserver.java =================================================================== --- src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestWALObserver.java (revision 1150245) +++ src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestWALObserver.java (working copy) @@ -19,6 +19,7 @@ */ package org.apache.hadoop.hbase.regionserver.wal; +import java.io.IOException; import java.util.ArrayList; import java.util.List; @@ -147,5 +148,15 @@ //To change body of implemented methods use File | Settings | File Templates. } + @Override + public void logArchiveStart(Path oldPath, Path newPath) throws IOException { + // not interested + } + + @Override + public void logArchiveComplete(Path oldPath, Path newPath, + boolean archivalWasSuccessful) throws IOException { + // not interested + } } -} \ No newline at end of file +} Index: src/main/java/org/apache/hadoop/hbase/regionserver/LogRoller.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/regionserver/LogRoller.java (revision 1150245) +++ src/main/java/org/apache/hadoop/hbase/regionserver/LogRoller.java (working copy) @@ -172,4 +172,16 @@ public void logCloseRequested() { // not interested } + + @Override + public void logArchiveStart(Path oldPath, Path newPath) throws IOException { + // not interested + } + + @Override + public void logArchiveComplete(Path oldPath, Path newPath, + boolean archivalWasSuccessful) throws IOException { + // not interested + } + } Index: src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLog.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLog.java (revision 1150245) +++ src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLog.java (working copy) @@ -746,9 +746,28 @@ LOG.info("moving old hlog file " + FSUtils.getPath(p) + " whose highest sequenceid is " + seqno + " to " + FSUtils.getPath(newPath)); - if (!this.fs.rename(p, newPath)) { - throw new IOException("Unable to rename " + p + " to " + newPath); + + // Tell our listeners that a log is going to be archived. + if (!this.listeners.isEmpty()) { + for (WALObserver i : this.listeners) { + i.logArchiveStart(p, newPath); + } } + boolean success = false; + + try { + if (!this.fs.rename(p, newPath)) { + throw new IOException("Unable to rename " + p + " to " + newPath); + } + success = true; + } finally { + // Tell our listeners that a log was archived + if (!this.listeners.isEmpty()) { + for (WALObserver i : this.listeners) { + i.logArchiveComplete(p, newPath, success); + } + } + } } /** Index: src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALObserver.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALObserver.java (revision 1150245) +++ src/main/java/org/apache/hadoop/hbase/regionserver/wal/WALObserver.java (working copy) @@ -19,6 +19,7 @@ */ package org.apache.hadoop.hbase.regionserver.wal; +import java.io.IOException; import org.apache.hadoop.fs.Path; import org.apache.hadoop.hbase.HRegionInfo; import org.apache.hadoop.hbase.HTableDescriptor; @@ -62,4 +63,21 @@ public void visitLogEntryBeforeWrite(HTableDescriptor htd, HLogKey logKey, WALEdit logEdit); + /** + * The WAL needs to be archived. + * It is going to be moved from oldPath to newPath. + * @param oldPath the path to the old hlog + * @param newPath the path to the new hlog + */ + public void logArchiveStart(Path oldPath, Path newPath) throws IOException; + + /** + * The WAL has been archived. + * It is moved from oldPath to newPath. + * @param oldPath the path to the old hlog + * @param newPath the path to the new hlog + * @param archivalWasSuccessful true, if the archival was successful + */ + public void logArchiveComplete(Path oldPath, Path newPath, + boolean archivalWasSuccessful) throws IOException; } Index: src/main/java/org/apache/hadoop/hbase/replication/regionserver/Replication.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/replication/regionserver/Replication.java (revision 1150245) +++ src/main/java/org/apache/hadoop/hbase/replication/regionserver/Replication.java (working copy) @@ -185,4 +185,15 @@ public void logCloseRequested() { // not interested } + + @Override + public void logArchiveStart(Path oldPath, Path newPath) throws IOException { + // not interested + } + + @Override + public void logArchiveComplete(Path oldPath, Path newPath, + boolean archivalWasSuccessful) throws IOException { + // not interested + } }