HADOOP-17608. Fix NPE in TestKMS (#2828)

This commit is contained in:
Akira Ajisaka 2021-04-01 01:57:31 +09:00 committed by GitHub
parent 6fd0c661b6
commit d69088a097
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -18,6 +18,8 @@
package org.apache.hadoop.crypto.key.kms.server;
import java.util.function.Supplier;
import org.apache.commons.lang3.ThreadUtils;
import org.apache.hadoop.thirdparty.com.google.common.cache.LoadingCache;
import org.apache.curator.test.TestingServer;
import org.apache.hadoop.conf.Configuration;
@ -525,6 +527,7 @@ public void testStartStop(final boolean ssl, final boolean kerberos)
if (ssl) {
sslFactory = new SSLFactory(SSLFactory.Mode.CLIENT, conf);
try {
// the first reloader thread is created here
sslFactory.init();
} catch (GeneralSecurityException ex) {
throw new IOException(ex);
@ -541,31 +544,29 @@ public Void call() throws Exception {
final URI uri = createKMSUri(getKMSUrl());
if (ssl) {
// the second reloader thread is created here
KeyProvider testKp = createProvider(uri, conf);
ThreadGroup threadGroup = Thread.currentThread().getThreadGroup();
while (threadGroup.getParent() != null) {
threadGroup = threadGroup.getParent();
}
Thread[] threads = new Thread[threadGroup.activeCount()];
threadGroup.enumerate(threads);
Thread reloaderThread = null;
for (Thread thread : threads) {
if ((thread.getName() != null)
&& (thread.getName().contains(SSL_RELOADER_THREAD_NAME))) {
reloaderThread = thread;
}
}
Assert.assertTrue("Reloader is not alive", reloaderThread.isAlive());
// Explicitly close the provider so we can verify the internal thread
// is shutdown
Collection<Thread> reloaderThreads =
ThreadUtils.findThreadsByName(SSL_RELOADER_THREAD_NAME);
// now there are two active reloader threads
assertEquals(2, reloaderThreads.size());
// Explicitly close the provider so we can verify
// the second reloader thread is shutdown
testKp.close();
boolean reloaderStillAlive = true;
for (int i = 0; i < 10; i++) {
reloaderStillAlive = reloaderThread.isAlive();
if (!reloaderStillAlive) break;
for (Thread thread : reloaderThreads) {
if (!thread.isAlive()) {
reloaderStillAlive = false;
break;
}
}
Thread.sleep(1000);
}
Assert.assertFalse("Reloader is still alive", reloaderStillAlive);
reloaderThreads =
ThreadUtils.findThreadsByName(SSL_RELOADER_THREAD_NAME);
assertEquals(1, reloaderThreads.size());
}
if (kerberos) {