[
https://issues.apache.org/jira/browse/HADOOP-18167?focusedWorklogId=757544&page=com.atlassian.jira.plugin.system.issuetabpanels:worklog-tabpanel#worklog-757544
]
ASF GitHub Bot logged work on HADOOP-18167:
-------------------------------------------
Author: ASF GitHub Bot
Created on: 16/Apr/22 01:00
Start Date: 16/Apr/22 01:00
Worklog Time Spent: 10m
Work Description: goiri commented on code in PR #4092:
URL: https://github.com/apache/hadoop/pull/4092#discussion_r851566919
##########
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/security/token/delegation/AbstractDelegationTokenSecretManager.java:
##########
@@ -825,4 +859,68 @@ protected void syncTokenOwnerStats() {
addTokenForOwnerStats(id);
}
}
+
+ /**
+ * DelegationTokenSecretManagerMetrics tracks token management operations
+ * and publishes them through the metrics interfaces.
+ */
+ @Metrics(about="Delegation token secret manager metrics", context="token")
+ static class DelegationTokenSecretManagerMetrics implements
IOStatisticsSource {
+ private static final Logger LOG =
LoggerFactory.getLogger(DelegationTokenSecretManagerMetrics.class);
+
+ final static String STORE_TOKEN_STAT = "storeToken";
+ final static String UPDATE_TOKEN_STAT = "updateToken";
+ final static String REMOVE_TOKEN_STAT = "removeToken";
+ final static String TOKEN_FAILURE_STAT = "tokenFailure";
+
+ final MetricsRegistry registry;
+ final IOStatisticsStore ioStatistics;
+
+ @Metric("Rate of storage of delegation tokens and latency (milliseconds)")
+ MutableRate storeToken;
+ @Metric("Rate of update of delegation tokens and latency (milliseconds)")
+ MutableRate updateToken;
+ @Metric("Rate of removal of delegation tokens and latency (milliseconds)")
+ MutableRate removeToken;
+ @Metric("Counter of delegation tokens operation failures")
+ MutableCounterLong tokenFailure;
+
+ static DelegationTokenSecretManagerMetrics create() {
+ return DefaultMetricsSystem.instance().register(new
DelegationTokenSecretManagerMetrics());
+ }
+
+ public DelegationTokenSecretManagerMetrics() {
+ ioStatistics = iostatisticsStore()
Review Comment:
For this specific case, I would skip the static import and just do:
IOStatisticsBinding.iostatisticsStore()
##########
hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/security/token/delegation/TestDelegationToken.java:
##########
@@ -579,4 +616,55 @@ public void testEmptyToken() throws IOException {
assertEquals(token1, token2);
assertEquals(token1.encodeToUrlString(), token2.encodeToUrlString());
}
+
+ @Test
+ public void testDelegationTokenSecretManagerMetrics() throws Exception {
+ TestDelegationTokenSecretManager dtSecretManager =
+ new TestDelegationTokenSecretManager(24*60*60*1000,
+ 10*1000, 1*1000, 60*60*1000);
+ try {
+ dtSecretManager.startThreads();
+
+ Assert.assertEquals(0,
dtSecretManager.metrics.storeToken.lastStat().numSamples());
+ final Token<TestDelegationTokenIdentifier> token =
+ generateDelegationToken(dtSecretManager, "SomeUser", "JobTracker");
+ Assert.assertEquals(1,
dtSecretManager.metrics.storeToken.lastStat().numSamples());
+
+ Assert.assertEquals(0,
dtSecretManager.metrics.updateToken.lastStat().numSamples());
+ dtSecretManager.renewToken(token, "JobTracker");
+ Assert.assertEquals(1,
dtSecretManager.metrics.updateToken.lastStat().numSamples());
+
+ Assert.assertEquals(0,
dtSecretManager.metrics.removeToken.lastStat().numSamples());
+ dtSecretManager.cancelToken(token, "JobTracker");
+ Assert.assertEquals(1,
dtSecretManager.metrics.removeToken.lastStat().numSamples());
+ } finally {
+ dtSecretManager.stopThreads();
+ }
+ }
+
+ @Test
+ public void testDelegationTokenSecretManagerMetricsFailures() throws
Exception {
+ TestFailureDelegationTokenSecretManager dtSecretManager = new
TestFailureDelegationTokenSecretManager();
+
+ try {
+ dtSecretManager.startThreads();
+
+ final Token<TestDelegationTokenIdentifier> token =
+ generateDelegationToken(dtSecretManager, "SomeUser", "JobTracker");
+
+ dtSecretManager.setThrowError(true);
+
+ Assert.assertEquals(0, dtSecretManager.metrics.tokenFailure.value());
+ generateDelegationToken(dtSecretManager, "SomeUser", "JobTracker");
+ Assert.assertEquals(1, dtSecretManager.metrics.tokenFailure.value());
+
+ LambdaTestUtils.intercept(Exception.class, () ->
dtSecretManager.renewToken(token, "JobTracker"));
Review Comment:
It would be nice to be a little more specific than just Exception
Issue Time Tracking
-------------------
Worklog Id: (was: 757544)
Time Spent: 3h 20m (was: 3h 10m)
> Add metrics to track delegation token secret manager operations
> ---------------------------------------------------------------
>
> Key: HADOOP-18167
> URL: https://issues.apache.org/jira/browse/HADOOP-18167
> Project: Hadoop Common
> Issue Type: Improvement
> Reporter: Hector Sandoval Chaverri
> Priority: Major
> Labels: pull-request-available
> Attachments: HADOOP-18167-branch-2.10-2.patch,
> HADOOP-18167-branch-2.10-3.patch, HADOOP-18167-branch-2.10.patch
>
> Time Spent: 3h 20m
> Remaining Estimate: 0h
>
> New metrics to track operations that store, update and remove delegation
> tokens in implementations of AbstractDelegationTokenSecretManager. This will
> help evaluate the impact of using different secret managers and add
> optimizations.
--
This message was sent by Atlassian Jira
(v8.20.1#820001)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]