diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java index 7bae831..b9d24b2 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java @@ -129,6 +129,7 @@ import org.apache.hadoop.util.Tool; import org.apache.hadoop.util.ToolRunner; import org.apache.zookeeper.KeeperException; +import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Joiner; import com.google.common.base.Preconditions; import com.google.common.collect.Lists; @@ -321,7 +322,7 @@ public class HBaseFsck extends Configured { errors = getErrorReporter(getConf()); this.executor = exec; } - + /** * This method maintains a lock using a file. If the creation fails we return null * @@ -329,6 +330,7 @@ public class HBaseFsck extends Configured { * @throws IOException */ private FSDataOutputStream checkAndMarkRunningHbck() throws IOException { + long start = EnvironmentEdgeManager.currentTime(); try { FileSystem fs = FSUtils.getCurrentFileSystem(getConf()); FsPermission defaultPerms = FSUtils.getFilePermissions(fs, getConf(), @@ -346,6 +348,13 @@ public class HBaseFsck extends Configured { } else { throw e; } + } finally { + long duration = EnvironmentEdgeManager.currentTime() - start; + if (duration > 30000) { + LOG.warn("Took " + duration + " milliseconds to obtain lock"); + // took too long to obtain lock + return null; + } } }