commit e45c053f128c27cc358c912d1ac2973bae135e46 Author: Jean-Baptiste Note Date: Thu Jun 27 14:48:59 2013 +0200 Take a read lock rather than a write lock when checkpointing the image diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java index cf5314a..b871e01 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java @@ -997,6 +997,9 @@ public class FSNamesystem implements Namesystem, FSClusterStats, public void readLock() { this.fsLock.readLock().lock(); } + public void readLockInterruptibly() throws InterruptedException { + this.fsLock.readLock().lockInterruptibly(); + } @Override public void readUnlock() { this.fsLock.readLock().unlock(); diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/StandbyCheckpointer.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/StandbyCheckpointer.java index a97e55d..4980942 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/StandbyCheckpointer.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/ha/StandbyCheckpointer.java @@ -144,7 +144,7 @@ public class StandbyCheckpointer { assert canceler != null; long txid; - namesystem.writeLockInterruptibly(); + namesystem.readLockInterruptibly(); try { assert namesystem.getEditLog().isOpenForRead() : "Standby Checkpointer should only attempt a checkpoint when " + @@ -167,7 +167,7 @@ public class StandbyCheckpointer { assert txid == thisCheckpointTxId : "expected to save checkpoint at txid=" + thisCheckpointTxId + " but instead saved at txid=" + txid; } finally { - namesystem.writeUnlock(); + namesystem.readUnlock(); } // Upload the saved checkpoint back to the active