Details
-
Improvement
-
Status: Open
-
Minor
-
Resolution: Unresolved
-
3.3.1, 3.3.3
-
None
-
Hadoop3.3.1 with Kerberos
Description
The DelegationTokenRenewerPoolTracker thread wastes of CPU resources when no application running,the run method always executes a for loop, but actually does nothing.
// code with no change @Override public void run() { while (true) { for (Map.Entry<DelegationTokenRenewerEvent, Future<?>> entry : futures .entrySet()) { DelegationTokenRenewerEvent evt = entry.getKey(); Future<?> future = entry.getValue(); try { future.get(tokenRenewerThreadTimeout, TimeUnit.MILLISECONDS); } catch (TimeoutException e) { // Cancel thread and retry the same event in case of timeout if (future != null && !future.isDone() && !future.isCancelled()) { future.cancel(true); futures.remove(evt); if (evt.getAttempt() < tokenRenewerThreadRetryMaxAttempts) { renewalTimer.schedule( getTimerTask((AbstractDelegationTokenRenewerAppEvent) evt), tokenRenewerThreadRetryInterval); } else { LOG.info( "Exhausted max retry attempts {} in token renewer " + "thread for {}", tokenRenewerThreadRetryMaxAttempts, evt.getApplicationId()); } } } catch (Exception e) { LOG.info("Problem in submitting renew tasks in token renewer " + "thread.", e); } } } }
Maybe we can add a tiny sleep to avoid waste of CPU resources. For example below,
// code with a tiny sleep public void run() { while (true) { try { Thread.sleep(1); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } for (Map.Entry<DelegationTokenRenewerEvent, Future<?>> entry : futures .entrySet()) { DelegationTokenRenewerEvent evt = entry.getKey(); ...
Attachments
Attachments
Issue Links
- links to