diff --git a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/NamenodeHeartbeatService.java b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/NamenodeHeartbeatService.java index fb8cc693c6c1a..63f1243d2ee4c 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/NamenodeHeartbeatService.java +++ b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/router/NamenodeHeartbeatService.java @@ -24,6 +24,7 @@ import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.URI; +import java.security.PrivilegedExceptionAction; import java.util.Map; import org.apache.hadoop.conf.Configuration; @@ -41,6 +42,7 @@ import org.apache.hadoop.hdfs.tools.DFSHAAdmin; import org.apache.hadoop.hdfs.tools.NNHAServiceTarget; import org.apache.hadoop.hdfs.web.URLConnectionFactory; +import org.apache.hadoop.security.SecurityUtil; import org.codehaus.jettison.json.JSONArray; import org.codehaus.jettison.json.JSONException; import org.codehaus.jettison.json.JSONObject; @@ -170,7 +172,20 @@ protected void serviceInit(Configuration configuration) throws Exception { @Override public void periodicInvoke() { - updateState(); + try { + SecurityUtil.doAsCurrentUser( + new PrivilegedExceptionAction() { + @Override + public Object run() { + updateState(); + return null; + } + }); + } catch (IOException e) { + // Generic error that we don't know about + LOG.error("Unexpected exception while communicating with {}: {}", + getNamenodeDesc(), e.getMessage(), e); + } } /**