commit adea557e63ffe728e54cf3f4747ef9356eb892f1 Author: Vihang Karajgaonkar Date: Wed Nov 22 20:13:50 2017 -0800 HIVE-16708 : Exception while renewing a Delegation Token diff --git a/itests/hive-minikdc/src/test/java/org/apache/hive/minikdc/TestJdbcWithMiniKdc.java b/itests/hive-minikdc/src/test/java/org/apache/hive/minikdc/TestJdbcWithMiniKdc.java index bd66d153e5bc9563ae60c8efa2b0ac698f9368e1..089c359f20731ce9ee3a909bb09d6ca49bd6d358 100644 --- a/itests/hive-minikdc/src/test/java/org/apache/hive/minikdc/TestJdbcWithMiniKdc.java +++ b/itests/hive-minikdc/src/test/java/org/apache/hive/minikdc/TestJdbcWithMiniKdc.java @@ -174,6 +174,22 @@ public void testTokenAuth() throws Exception { } @Test + public void testRenewDelegationToken() throws Exception { + UserGroupInformation currentUGI = miniHiveKdc.loginUser(MiniHiveKdc.HIVE_TEST_SUPER_USER); + hs2Conn = DriverManager.getConnection(miniHS2.getJdbcURL()); + String currentUser = currentUGI.getUserName(); + // retrieve token and store in the cache + String token = ((HiveConnection) hs2Conn) + .getDelegationToken(MiniHiveKdc.HIVE_TEST_USER_1, + miniHiveKdc.getFullyQualifiedServicePrincipal(MiniHiveKdc.HIVE_TEST_SUPER_USER)); + assertTrue(token != null && !token.isEmpty()); + + ((HiveConnection) hs2Conn).renewDelegationToken(token); + + hs2Conn.close(); + } + + @Test public void testCancelRenewTokenFlow() throws Exception { miniHiveKdc.loginUser(MiniHiveKdc.HIVE_TEST_SUPER_USER); hs2Conn = DriverManager.getConnection(miniHS2.getJdbcURL()); diff --git a/shims/common/src/main/java/org/apache/hadoop/hive/thrift/DelegationTokenSecretManager.java b/shims/common/src/main/java/org/apache/hadoop/hive/thrift/DelegationTokenSecretManager.java index 6a863d8a53d15d841764e562e7e88210941171ff..f39c5c97379b7bd54694d147b2e0f60fb0c507f2 100644 --- a/shims/common/src/main/java/org/apache/hadoop/hive/thrift/DelegationTokenSecretManager.java +++ b/shims/common/src/main/java/org/apache/hadoop/hive/thrift/DelegationTokenSecretManager.java @@ -93,7 +93,13 @@ public synchronized void cancelDelegationToken(String tokenStrForm) throws IOExc public synchronized long renewDelegationToken(String tokenStrForm) throws IOException { Token t= new Token(); t.decodeFromUrlString(tokenStrForm); - String user = UserGroupInformation.getCurrentUser().getUserName(); + //when a token is created the renewer of the token is stored + //as shortName in AbstractDelegationTokenIdentifier.setRenewer() + //this seems like an inconsistency because while cancelling the token + //it uses the shortname to compare the renewer while it does not use + //shortname during token renewal. Use getShortUserName() until its fixed + //in HADOOP-15068 + String user = UserGroupInformation.getCurrentUser().getShortUserName(); return renewToken(t, user); }