Fix issue with Gradle daemons hanging indefinitely on shutdown (#44867) (#44878)

This commit is contained in:
Mark Vieira 2019-07-25 15:33:51 -07:00 committed by GitHub
parent 03605169f3
commit aebfdf1477
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 25 deletions

View File

@ -19,16 +19,12 @@ public class TestClusterCleanupOnShutdown implements Runnable {
private Set<ElasticsearchCluster> clustersToWatch = new HashSet<>();
public void watch(Collection<ElasticsearchCluster> cluster) {
synchronized (clustersToWatch) {
clustersToWatch.addAll(clustersToWatch);
}
public synchronized void watch(Collection<ElasticsearchCluster> clusters) {
clustersToWatch.addAll(clusters);
}
public void unWatch(Collection<ElasticsearchCluster> cluster) {
synchronized (clustersToWatch) {
clustersToWatch.removeAll(clustersToWatch);
}
public synchronized void unWatch(Collection<ElasticsearchCluster> clusters) {
clustersToWatch.removeAll(clusters);
}
@Override
@ -38,21 +34,23 @@ public class TestClusterCleanupOnShutdown implements Runnable {
Thread.sleep(Long.MAX_VALUE);
}
} catch (InterruptedException interrupted) {
synchronized (clustersToWatch) {
if (clustersToWatch.isEmpty()) {
return;
}
logger.info("Cleanup thread was interrupted, shutting down all clusters");
Iterator<ElasticsearchCluster> iterator = clustersToWatch.iterator();
while (iterator.hasNext()) {
ElasticsearchCluster cluster = iterator.next();
iterator.remove();
try {
cluster.stop(false);
} catch (Exception e) {
logger.warn("Could not shut down {}", cluster, e);
}
}
shutdownClusters();
}
}
public synchronized void shutdownClusters() {
if (clustersToWatch.isEmpty()) {
return;
}
logger.info("Cleanup thread was interrupted, shutting down all clusters");
Iterator<ElasticsearchCluster> iterator = clustersToWatch.iterator();
while (iterator.hasNext()) {
ElasticsearchCluster cluster = iterator.next();
iterator.remove();
try {
cluster.stop(false);
} catch (Exception e) {
logger.warn("Could not shut down {}", cluster, e);
}
}
}

View File

@ -33,7 +33,6 @@ public class TestClustersCleanupExtension {
executorService.submit(cleanupThread);
}
public static void createExtension(Project project) {
if (project.getRootProject().getExtensions().findByType(TestClustersCleanupExtension.class) != null) {
return;
@ -43,7 +42,7 @@ public class TestClustersCleanupExtension {
"__testclusters_rate_limit",
TestClustersCleanupExtension.class
);
Thread shutdownHook = new Thread(ext.cleanupThread::run);
Thread shutdownHook = new Thread(ext.cleanupThread::shutdownClusters);
Runtime.getRuntime().addShutdownHook(shutdownHook);
project.getGradle().buildFinished(buildResult -> {
ext.executorService.shutdownNow();