HDFS-4548. Webhdfs doesn't renegotiate SPNEGO token. Contributed by Daryn Sharp.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1464548 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Kihwal Lee 2013-04-04 13:50:31 +00:00
parent d088d2ddea
commit 547d2b0bac
2 changed files with 4 additions and 9 deletions

View File

@ -2490,6 +2490,8 @@ Release 0.23.7 - UNRELEASED
HDFS-4649. Webhdfs cannot list large directories (daryn via kihwal) HDFS-4649. Webhdfs cannot list large directories (daryn via kihwal)
HDFS-4548. Webhdfs doesn't renegotiate SPNEGO token (daryn via kihwal)
Release 0.23.6 - UNRELEASED Release 0.23.6 - UNRELEASED
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -156,7 +156,6 @@ public static boolean isEnabled(final Configuration conf, final Log log) {
private URI uri; private URI uri;
private boolean hasInitedToken; private boolean hasInitedToken;
private Token<?> delegationToken; private Token<?> delegationToken;
private final AuthenticatedURL.Token authToken = new AuthenticatedURL.Token();
private RetryPolicy retryPolicy = null; private RetryPolicy retryPolicy = null;
private Path workingDir; private Path workingDir;
@ -481,6 +480,8 @@ private HttpURLConnection openHttpUrlConnection(final URL url)
try { try {
if (op.getRequireAuth()) { if (op.getRequireAuth()) {
LOG.debug("open AuthenticatedURL connection"); LOG.debug("open AuthenticatedURL connection");
UserGroupInformation.getCurrentUser().checkTGTAndReloginFromKeytab();
final AuthenticatedURL.Token authToken = new AuthenticatedURL.Token();
conn = new AuthenticatedURL(AUTH).openConnection(url, authToken); conn = new AuthenticatedURL(AUTH).openConnection(url, authToken);
} else { } else {
LOG.debug("open URL connection"); LOG.debug("open URL connection");
@ -1006,20 +1007,12 @@ private static WebHdfsFileSystem getWebHdfs(
@Override @Override
public long renew(final Token<?> token, final Configuration conf public long renew(final Token<?> token, final Configuration conf
) throws IOException, InterruptedException { ) throws IOException, InterruptedException {
final UserGroupInformation ugi = UserGroupInformation.getLoginUser();
// update the kerberos credentials, if they are coming from a keytab
ugi.reloginFromKeytab();
return getWebHdfs(token, conf).renewDelegationToken(token); return getWebHdfs(token, conf).renewDelegationToken(token);
} }
@Override @Override
public void cancel(final Token<?> token, final Configuration conf public void cancel(final Token<?> token, final Configuration conf
) throws IOException, InterruptedException { ) throws IOException, InterruptedException {
final UserGroupInformation ugi = UserGroupInformation.getLoginUser();
// update the kerberos credentials, if they are coming from a keytab
ugi.checkTGTAndReloginFromKeytab();
getWebHdfs(token, conf).cancelDelegationToken(token); getWebHdfs(token, conf).cancelDelegationToken(token);
} }
} }