|
@@ -47,6 +47,7 @@ import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
import java.util.Set;
|
|
import java.util.Set;
|
|
import java.util.concurrent.TimeUnit;
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
+import java.util.concurrent.atomic.AtomicBoolean;
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
|
|
|
|
import javax.security.auth.DestroyFailedException;
|
|
import javax.security.auth.DestroyFailedException;
|
|
@@ -1843,6 +1844,7 @@ public class UserGroupInformation {
|
|
private static class HadoopLoginContext extends LoginContext {
|
|
private static class HadoopLoginContext extends LoginContext {
|
|
private final String appName;
|
|
private final String appName;
|
|
private final HadoopConfiguration conf;
|
|
private final HadoopConfiguration conf;
|
|
|
|
+ private AtomicBoolean isLoggedIn = new AtomicBoolean();
|
|
|
|
|
|
HadoopLoginContext(String appName, Subject subject,
|
|
HadoopLoginContext(String appName, Subject subject,
|
|
HadoopConfiguration conf) throws LoginException {
|
|
HadoopConfiguration conf) throws LoginException {
|
|
@@ -1875,6 +1877,7 @@ public class UserGroupInformation {
|
|
long start = Time.monotonicNow();
|
|
long start = Time.monotonicNow();
|
|
try {
|
|
try {
|
|
super.login();
|
|
super.login();
|
|
|
|
+ isLoggedIn.set(true);
|
|
metric = metrics.loginSuccess;
|
|
metric = metrics.loginSuccess;
|
|
} finally {
|
|
} finally {
|
|
metric.add(Time.monotonicNow() - start);
|
|
metric.add(Time.monotonicNow() - start);
|
|
@@ -1885,8 +1888,7 @@ public class UserGroupInformation {
|
|
@Override
|
|
@Override
|
|
public void logout() throws LoginException {
|
|
public void logout() throws LoginException {
|
|
synchronized(getSubjectLock()) {
|
|
synchronized(getSubjectLock()) {
|
|
- if (this.getSubject() != null
|
|
|
|
- && !this.getSubject().getPrivateCredentials().isEmpty()) {
|
|
|
|
|
|
+ if (isLoggedIn.compareAndSet(true, false)) {
|
|
super.logout();
|
|
super.logout();
|
|
}
|
|
}
|
|
}
|
|
}
|