This is an automated email from the ASF dual-hosted git repository.

gifuma pushed a commit to branch HDFS-13891
in repository https://gitbox.apache.org/repos/asf/hadoop.git


The following commit(s) were added to refs/heads/HDFS-13891 by this push:
     new 5439c4c  HDFS-14426. RBF: Add delegation token total count as one of 
the federation metrics. Contributed by Fengnan Li.
5439c4c is described below

commit 5439c4c5f478817e293d3878d9f15762764f17df
Author: Giovanni Matteo Fumarola <[email protected]>
AuthorDate: Mon May 13 12:18:10 2019 -0700

    HDFS-14426. RBF: Add delegation token total count as one of the federation 
metrics. Contributed by Fengnan Li.
---
 .../server/federation/metrics/FederationMBean.java   |  6 ++++++
 .../server/federation/metrics/FederationMetrics.java | 11 +++++++++++
 .../fs/contract/router/RouterHDFSContract.java       |  7 ++++++-
 .../TestRouterHDFSContractDelegationToken.java       | 20 ++++++++++++++++----
 4 files changed, 39 insertions(+), 5 deletions(-)

diff --git 
a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/metrics/FederationMBean.java
 
b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/metrics/FederationMBean.java
index 8f24fcb..e33a77e 100644
--- 
a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/metrics/FederationMBean.java
+++ 
b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/metrics/FederationMBean.java
@@ -244,4 +244,10 @@ public interface FederationMBean {
    * @return String label for the current router state.
    */
   String getRouterStatus();
+
+  /**
+   * Get the current number of delegation tokens in memory.
+   * @return number of DTs
+   */
+  long getCurrentTokensCount();
 }
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/metrics/FederationMetrics.java
 
b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/metrics/FederationMetrics.java
index a39f17d..a196098 100644
--- 
a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/metrics/FederationMetrics.java
+++ 
b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/main/java/org/apache/hadoop/hdfs/server/federation/metrics/FederationMetrics.java
@@ -57,6 +57,7 @@ import 
org.apache.hadoop.hdfs.server.federation.resolver.RemoteLocation;
 import org.apache.hadoop.hdfs.server.federation.router.RBFConfigKeys;
 import org.apache.hadoop.hdfs.server.federation.router.Router;
 import org.apache.hadoop.hdfs.server.federation.router.RouterRpcServer;
+import 
org.apache.hadoop.hdfs.server.federation.router.security.RouterSecurityManager;
 import org.apache.hadoop.hdfs.server.federation.store.MembershipStore;
 import org.apache.hadoop.hdfs.server.federation.store.MountTableStore;
 import org.apache.hadoop.hdfs.server.federation.store.RouterStore;
@@ -604,6 +605,16 @@ public class FederationMetrics implements FederationMBean {
     return this.router.getRouterState().toString();
   }
 
+  @Override
+  public long getCurrentTokensCount() {
+    RouterSecurityManager mgr =
+        this.router.getRpcServer().getRouterSecurityManager();
+    if (mgr != null && mgr.getSecretManager() != null) {
+      return mgr.getSecretManager().getCurrentTokensSize();
+    }
+    return -1;
+  }
+
   /**
    * Build a set of unique values found in all namespaces.
    *
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/fs/contract/router/RouterHDFSContract.java
 
b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/fs/contract/router/RouterHDFSContract.java
index 46339a3..572da90 100644
--- 
a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/fs/contract/router/RouterHDFSContract.java
+++ 
b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/fs/contract/router/RouterHDFSContract.java
@@ -47,8 +47,13 @@ public class RouterHDFSContract extends HDFSContract {
   }
 
   public static void createCluster(Configuration conf) throws IOException {
+    createCluster(true, 2, conf);
+  }
+
+  public static void createCluster(
+      boolean ha, int numNameServices, Configuration conf) throws IOException {
     try {
-      cluster = new MiniRouterDFSCluster(true, 2, conf);
+      cluster = new MiniRouterDFSCluster(ha, numNameServices, conf);
 
       // Start NNs and DNs and wait until ready
       cluster.startCluster(conf);
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/fs/contract/router/TestRouterHDFSContractDelegationToken.java
 
b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/fs/contract/router/TestRouterHDFSContractDelegationToken.java
index 062079f..137c2ab 100644
--- 
a/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/fs/contract/router/TestRouterHDFSContractDelegationToken.java
+++ 
b/hadoop-hdfs-project/hadoop-hdfs-rbf/src/test/java/org/apache/hadoop/fs/contract/router/TestRouterHDFSContractDelegationToken.java
@@ -18,11 +18,18 @@
 
 package org.apache.hadoop.fs.contract.router;
 
+import static 
org.apache.hadoop.fs.contract.router.SecurityConfUtil.initSecurity;
+import static 
org.apache.hadoop.hdfs.server.federation.metrics.TestFederationMetrics.FEDERATION_BEAN;
+
+import java.io.IOException;
+
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.fs.contract.AbstractFSContract;
 import org.apache.hadoop.fs.contract.AbstractFSContractTestBase;
 import 
org.apache.hadoop.hdfs.security.token.delegation.DelegationTokenIdentifier;
+import org.apache.hadoop.hdfs.server.federation.FederationTestUtils;
+import org.apache.hadoop.hdfs.server.federation.metrics.FederationMBean;
 import org.apache.hadoop.security.token.SecretManager;
 import org.apache.hadoop.security.token.Token;
 import org.junit.AfterClass;
@@ -31,9 +38,6 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 
-import java.io.IOException;
-import static 
org.apache.hadoop.fs.contract.router.SecurityConfUtil.initSecurity;
-
 /**
  * Test to verify router contracts for delegation token operations.
  */
@@ -42,7 +46,7 @@ public class TestRouterHDFSContractDelegationToken
 
   @BeforeClass
   public static void createCluster() throws Exception {
-    RouterHDFSContract.createCluster(initSecurity());
+    RouterHDFSContract.createCluster(false, 1, initSecurity());
   }
 
   @AfterClass
@@ -60,6 +64,10 @@ public class TestRouterHDFSContractDelegationToken
 
   @Test
   public void testRouterDelegationToken() throws Exception {
+    FederationMBean bean = FederationTestUtils.getBean(
+        FEDERATION_BEAN, FederationMBean.class);
+    // Initially there is no token in memory
+    assertEquals(0, bean.getCurrentTokensCount());
     // Generate delegation token
     Token<DelegationTokenIdentifier> token =
         (Token<DelegationTokenIdentifier>) getFileSystem()
@@ -81,6 +89,8 @@ public class TestRouterHDFSContractDelegationToken
     assertTrue(sequenceNumber > 0);
     long existingMaxTime = token.decodeIdentifier().getMaxDate();
     assertTrue(identifier.getMaxDate() >= identifier.getIssueDate());
+    // one token is expected after the generation
+    assertEquals(1, bean.getCurrentTokensCount());
 
     // Renew delegation token
     long expiryTime = token.renew(initSecurity());
@@ -92,9 +102,11 @@ public class TestRouterHDFSContractDelegationToken
     identifier = token.decodeIdentifier();
     assertEquals(identifier.getMasterKeyId(), masterKeyId);
     assertEquals(identifier.getSequenceNumber(), sequenceNumber);
+    assertEquals(1, bean.getCurrentTokensCount());
 
     // Cancel delegation token
     token.cancel(initSecurity());
+    assertEquals(0, bean.getCurrentTokensCount());
 
     // Renew a cancelled token
     exceptionRule.expect(SecretManager.InvalidToken.class);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to