diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java index 89bfbf3..cab12e7 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegionServer.java @@ -1906,6 +1906,11 @@ public class HRegionServer extends HasThread implements private static final byte[] UNSPECIFIED_REGION = new byte[]{}; @Override + public long getHighestFilenum() { + return walFactory.getHighestFilenum(); + } + + @Override public WAL getWAL(HRegionInfo regionInfo) throws IOException { WAL wal; LogRoller roller = walRoller; diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerServices.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerServices.java index 356a88b..2b7f83f 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerServices.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/RegionServerServices.java @@ -55,6 +55,12 @@ public interface RegionServerServices extends OnlineRegions, FavoredNodesForRegi * default (common) WAL */ WAL getWAL(HRegionInfo regionInfo) throws IOException; + /* + * Filenum of WAL file is the timestamp when it is created. + * @return the highest filenum among all the WAL files + */ + long getHighestFilenum(); + /** * @return Implementation of {@link CompactionRequestor} or null. */ diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.java index 3aafc23..6caad18 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/AbstractFSWAL.java @@ -239,6 +239,10 @@ public abstract class AbstractFSWAL implements WAL { */ private final ConcurrentMap syncFuturesByHandler; + public long getFileNum() { + return this.filenum.get(); + } + /** * A log file has a creation timestamp (in ms) in its file name ({@link #filenum}. This helper * method returns the creation timestamp from a given log file. It extracts the timestamp assuming diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.java index e495e99..fb070fb 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/AbstractFSWALProvider.java @@ -109,6 +109,14 @@ public abstract class AbstractFSWALProvider> implemen } @Override + public long getHighestFilenum() { + if (wal == null) { + return 0; + } + return wal.getFileNum(); + } + + @Override public T getWAL(byte[] identifier, byte[] namespace) throws IOException { T walCopy = wal; if (walCopy == null) { diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/DisabledWALProvider.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/DisabledWALProvider.java index b5ddd00..610d2ca 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/DisabledWALProvider.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/DisabledWALProvider.java @@ -65,6 +65,11 @@ class DisabledWALProvider implements WALProvider { } @Override + public long getHighestFilenum() { + return 0; + } + + @Override public WAL getWAL(final byte[] identifier, byte[] namespace) throws IOException { return disabled; } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/RegionGroupingProvider.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/RegionGroupingProvider.java index b447e94..f26a0b0 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/RegionGroupingProvider.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/RegionGroupingProvider.java @@ -168,6 +168,17 @@ public class RegionGroupingProvider implements WALProvider { } } + @Override + public long getHighestFilenum() { + long filenum = 0; + for (WALProvider provider : cached.values()) { + if (provider.getHighestFilenum() > filenum) { + filenum = provider.getHighestFilenum(); + } + } + return filenum; + } + private WAL getWAL(final String group) throws IOException { WALProvider provider = cached.get(group); if (provider == null) { diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALFactory.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALFactory.java index 26c4ea1..7b1b3da 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALFactory.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALFactory.java @@ -233,6 +233,10 @@ public class WALFactory { } } + public long getHighestFilenum() { + return provider.getHighestFilenum(); + } + /** * @param identifier may not be null, contents will not be altered * @param namespace could be null, and will use default namespace if null diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALProvider.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALProvider.java index 96bc023..04e6db4 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALProvider.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/wal/WALProvider.java @@ -58,6 +58,12 @@ public interface WALProvider { */ WAL getWAL(final byte[] identifier, byte[] namespace) throws IOException; + /* + * Filenum of WAL file is the timestamp when it is created. + * @return the highest filenum among all the WAL files + */ + long getHighestFilenum(); + /** * persist outstanding WALs to storage and stop accepting new appends. * This method serves as shorthand for sending a sync to every WAL provided by a given diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/MockRegionServerServices.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/MockRegionServerServices.java index 6f225d6..b05b6a8 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/MockRegionServerServices.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/MockRegionServerServices.java @@ -246,6 +246,11 @@ public class MockRegionServerServices implements RegionServerServices { } @Override + public long getHighestFilenum() { + return 0; + } + + @Override public WAL getWAL(HRegionInfo regionInfo) throws IOException { return null; } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockRegionServer.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockRegionServer.java index 2927023..a0406f7 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockRegionServer.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/master/MockRegionServer.java @@ -568,8 +568,12 @@ ClientProtos.ClientService.BlockingInterface, RegionServerServices { } @Override + public long getHighestFilenum() { + return 0; + } + + @Override public WAL getWAL(HRegionInfo regionInfo) throws IOException { - // TODO Auto-generated method stub return null; } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/wal/IOTestProvider.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/wal/IOTestProvider.java index 0a732a7..d13ca1d 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/wal/IOTestProvider.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/wal/IOTestProvider.java @@ -106,6 +106,11 @@ public class IOTestProvider implements WALProvider { } @Override + public long getHighestFilenum() { + return log.getFileNum(); + } + + @Override public WAL getWAL(final byte[] identifier, byte[] namespace) throws IOException { return log; }