You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-commits@hadoop.apache.org by to...@apache.org on 2011/11/24 01:55:38 UTC
svn commit: r1205689 - in
/hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs: ./
src/main/java/org/apache/hadoop/hdfs/server/namenode/
src/main/java/org/apache/hadoop/hdfs/util/
src/test/java/org/apache/hadoop/hdfs/server/namenode/
Author: todd
Date: Thu Nov 24 00:55:37 2011
New Revision: 1205689
URL: http://svn.apache.org/viewvc?rev=1205689&view=rev
Log:
HDFS-2577. NN fails to start since it tries to start secret manager in safemode. Contributed by Todd Lipcon.
Modified:
hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-1623.txt
hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/LeaseManager.java
hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/util/RwLock.java
hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/NameNodeAdapter.java
Modified: hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-1623.txt
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-1623.txt?rev=1205689&r1=1205688&r2=1205689&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-1623.txt (original)
+++ hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/CHANGES.HDFS-1623.txt Thu Nov 24 00:55:37 2011
@@ -21,3 +21,5 @@ HDFS-2418. Change ConfiguredFailoverProx
HDFS-2393. Mark appropriate methods of ClientProtocol with the idempotent annotation. (atm)
HDFS-2523. Small NN fixes to include HAServiceProtocol and prevent NPE on shutdown. (todd)
+
+HDFS-2577. NN fails to start since it tries to start secret manager in safemode. (todd)
Modified: hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java?rev=1205689&r1=1205688&r2=1205689&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java (original)
+++ hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSNamesystem.java Thu Nov 24 00:55:37 2011
@@ -258,7 +258,6 @@ public class FSNamesystem implements Nam
LeaseManager leaseManager = new LeaseManager(this);
- Daemon lmthread = null; // LeaseMonitor thread
Daemon smmthread = null; // SafeModeMonitor thread
Daemon nnrmthread = null; // NamenodeResourceMonitor thread
@@ -450,9 +449,10 @@ public class FSNamesystem implements Nam
LOG.info("Starting services required for active state");
writeLock();
try {
- startSecretManager();
- lmthread = new Daemon(leaseManager.new Monitor());
- lmthread.start();
+ if (UserGroupInformation.isSecurityEnabled()) {
+ startSecretManager();
+ }
+ leaseManager.startMonitor();
} finally {
writeUnlock();
}
@@ -467,14 +467,8 @@ public class FSNamesystem implements Nam
writeLock();
try {
stopSecretManager();
- if (lmthread != null) {
- try {
- lmthread.interrupt();
- lmthread.join(3000);
- } catch (InterruptedException ie) {
- LOG.warn("Encountered exception ", ie);
- }
- lmthread = null;
+ if (leaseManager != null) {
+ leaseManager.stopMonitor();
}
} finally {
writeUnlock();
@@ -542,6 +536,10 @@ public class FSNamesystem implements Nam
this.fsLock.writeLock().lock();
}
@Override
+ public void writeLockInterruptibly() throws InterruptedException {
+ this.fsLock.writeLock().lockInterruptibly();
+ }
+ @Override
public void writeUnlock() {
this.fsLock.writeLock().unlock();
}
Modified: hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/LeaseManager.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/LeaseManager.java?rev=1205689&r1=1205688&r2=1205689&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/LeaseManager.java (original)
+++ hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/LeaseManager.java Thu Nov 24 00:55:37 2011
@@ -34,6 +34,10 @@ import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.UnresolvedLinkException;
import org.apache.hadoop.hdfs.protocol.HdfsConstants;
import org.apache.hadoop.hdfs.server.common.HdfsServerConstants;
+import org.apache.hadoop.util.Daemon;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Preconditions;
import static org.apache.hadoop.hdfs.server.common.Util.now;
@@ -82,6 +86,9 @@ public class LeaseManager {
//
private SortedMap<String, Lease> sortedLeasesByPath = new TreeMap<String, Lease>();
+ private Daemon lmthread;
+ private volatile boolean shouldRunMonitor;
+
LeaseManager(FSNamesystem fsnamesystem) {this.fsnamesystem = fsnamesystem;}
Lease getLease(String holder) {
@@ -367,18 +374,18 @@ public class LeaseManager {
/** Check leases periodically. */
public void run() {
- for(; fsnamesystem.isRunning(); ) {
- fsnamesystem.writeLock();
+ for(; shouldRunMonitor && fsnamesystem.isRunning(); ) {
try {
- if (!fsnamesystem.isInSafeMode()) {
- checkLeases();
+ fsnamesystem.writeLockInterruptibly();
+ try {
+ if (!fsnamesystem.isInSafeMode()) {
+ checkLeases();
+ }
+ } finally {
+ fsnamesystem.writeUnlock();
}
- } finally {
- fsnamesystem.writeUnlock();
- }
-
-
- try {
+
+
Thread.sleep(HdfsServerConstants.NAMENODE_LEASE_RECHECK_INTERVAL);
} catch(InterruptedException ie) {
if (LOG.isDebugEnabled()) {
@@ -437,4 +444,36 @@ public class LeaseManager {
+ "\n sortedLeasesByPath=" + sortedLeasesByPath
+ "\n}";
}
+
+ void startMonitor() {
+ Preconditions.checkState(lmthread == null,
+ "Lease Monitor already running");
+ shouldRunMonitor = true;
+ lmthread = new Daemon(new Monitor());
+ lmthread.start();
+ }
+
+ void stopMonitor() {
+ if (lmthread != null) {
+ shouldRunMonitor = false;
+ try {
+ lmthread.interrupt();
+ lmthread.join(3000);
+ } catch (InterruptedException ie) {
+ LOG.warn("Encountered exception ", ie);
+ }
+ lmthread = null;
+ }
+ }
+
+ /**
+ * Trigger the currently-running Lease monitor to re-check
+ * its leases immediately. This is for use by unit tests.
+ */
+ @VisibleForTesting
+ void triggerMonitorCheckNow() {
+ Preconditions.checkState(lmthread != null,
+ "Lease monitor is not running");
+ lmthread.interrupt();
+ }
}
Modified: hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/util/RwLock.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/util/RwLock.java?rev=1205689&r1=1205688&r2=1205689&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/util/RwLock.java (original)
+++ hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/util/RwLock.java Thu Nov 24 00:55:37 2011
@@ -30,6 +30,9 @@ public interface RwLock {
/** Acquire write lock. */
public void writeLock();
+
+ /** Acquire write lock, unless interrupted while waiting */
+ void writeLockInterruptibly() throws InterruptedException;
/** Release write lock. */
public void writeUnlock();
Modified: hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/NameNodeAdapter.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/NameNodeAdapter.java?rev=1205689&r1=1205688&r2=1205689&view=diff
==============================================================================
--- hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/NameNodeAdapter.java (original)
+++ hadoop/common/branches/HDFS-1623/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/namenode/NameNodeAdapter.java Thu Nov 24 00:55:37 2011
@@ -78,7 +78,7 @@ public class NameNodeAdapter {
/** Set the softLimit and hardLimit of client lease periods. */
public static void setLeasePeriod(final FSNamesystem namesystem, long soft, long hard) {
getLeaseManager(namesystem).setLeasePeriod(soft, hard);
- namesystem.lmthread.interrupt();
+ namesystem.leaseManager.triggerMonitorCheckNow();
}
public static String getLeaseHolderForPath(NameNode namenode, String path) {