You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2020/08/11 06:07:30 UTC
[lucene-solr] 04/04: @496 A bit more exec/qtp cleanup / improve.
This is an automated email from the ASF dual-hosted git repository.
markrmiller pushed a commit to branch reference_impl
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git
commit b7b3f5d45a1b17ba1c09ae0ccdf7c25136e25900
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Tue Aug 11 00:05:04 2020 -0500
@496 A bit more exec/qtp cleanup / improve.
---
.../client/solrj/embedded/JettySolrRunner.java | 2 +-
.../org/apache/solr/update/UpdateShardHandler.java | 7 +-
.../CollectionsAPIDistributedZkTest.java | 2 -
.../solr/client/solrj/impl/Http2SolrClient.java | 1 +
.../org/apache/solr/common/ParWorkExecService.java | 106 ++++++++++++---------
5 files changed, 66 insertions(+), 52 deletions(-)
diff --git a/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java b/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java
index ad89877..94f6c80 100644
--- a/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java
+++ b/solr/core/src/java/org/apache/solr/client/solrj/embedded/JettySolrRunner.java
@@ -751,7 +751,7 @@ public class JettySolrRunner implements Closeable {
if (config.qtp == null) {
qtp.waitForStopping();
}
- } catch (InterruptedException e) {
+ } catch (Exception e) {
ParWork.propegateInterrupt(e);
}
});
diff --git a/solr/core/src/java/org/apache/solr/update/UpdateShardHandler.java b/solr/core/src/java/org/apache/solr/update/UpdateShardHandler.java
index faa130a..e354a46 100644
--- a/solr/core/src/java/org/apache/solr/update/UpdateShardHandler.java
+++ b/solr/core/src/java/org/apache/solr/update/UpdateShardHandler.java
@@ -213,18 +213,21 @@ public class UpdateShardHandler implements SolrInfoBean {
}
if (updateOnlyClient != null) updateOnlyClient.disableCloseLock();
try (ParWork closer = new ParWork(this, true)) {
+ closer.collect(recoveryExecutor);
closer.collect(() -> {
HttpClientUtil.close(defaultClient);
return defaultClient;
});
- closer.collect(recoveryExecutor);
+ closer.addCollect("recoveryExecutor");
+
+
closer.collect(updateOnlyClient);
closer.collect(defaultConnectionManager);
closer.collect(() -> {
SolrInfoBean.super.close();
return this;
});
- closer.addCollect("updateshardhandler");
+ closer.addCollect("updateshardhandlerClients");
}
ObjectReleaseTracker.release(this);
}
diff --git a/solr/core/src/test/org/apache/solr/cloud/api/collections/CollectionsAPIDistributedZkTest.java b/solr/core/src/test/org/apache/solr/cloud/api/collections/CollectionsAPIDistributedZkTest.java
index 2daa136..538e80e 100644
--- a/solr/core/src/test/org/apache/solr/cloud/api/collections/CollectionsAPIDistributedZkTest.java
+++ b/solr/core/src/test/org/apache/solr/cloud/api/collections/CollectionsAPIDistributedZkTest.java
@@ -65,8 +65,6 @@ public class CollectionsAPIDistributedZkTest extends SolrCloudTestCase {
if (TEST_NIGHTLY) {
System.setProperty("createCollectionWaitTimeTillActive", "10");
TestInjection.randomDelayInCoreCreation = "true:5";
- } else {
- System.setProperty("createCollectionWaitTimeTillActive", "10");
}
configureCluster(TEST_NIGHTLY ? 4 : 2)
diff --git a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
index cc61151..02044e5 100644
--- a/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
+++ b/solr/solrj/src/java/org/apache/solr/client/solrj/impl/Http2SolrClient.java
@@ -260,6 +260,7 @@ public class Http2SolrClient extends SolrClient {
}
});
}
+ closer.collect(httpClientExecutor);
closer.collect(() -> {
try {
diff --git a/solr/solrj/src/java/org/apache/solr/common/ParWorkExecService.java b/solr/solrj/src/java/org/apache/solr/common/ParWorkExecService.java
index d4c7a8f..7b51cb0 100644
--- a/solr/solrj/src/java/org/apache/solr/common/ParWorkExecService.java
+++ b/solr/solrj/src/java/org/apache/solr/common/ParWorkExecService.java
@@ -99,7 +99,11 @@ public class ParWorkExecService implements ExecutorService {
return CompletableFuture.completedFuture(callable.call());
}
} else {
- available.acquireUninterruptibly();
+ try {
+ available.acquire();
+ } catch (InterruptedException e) {
+ available.acquire();
+ }
}
Future<T> future = service.submit(callable);
return new Future<T>() {
@@ -177,62 +181,70 @@ public class ParWorkExecService implements ExecutorService {
}
public Future<?> doSubmit(Runnable runnable, boolean requiresAnotherThread) {
- if (!requiresAnotherThread) {
- boolean success = checkLoad();
- if (success) {
- success = available.tryAcquire();
- }
- if (!success) {
- runnable.run();
- return CompletableFuture.completedFuture(null);
- }
- } else {
- available.acquireUninterruptibly();
- }
- Future<?> future = service.submit(runnable);
-
- return new Future<>() {
- @Override
- public boolean cancel(boolean b) {
- return future.cancel(b);
+ try {
+ if (!requiresAnotherThread) {
+ boolean success = checkLoad();
+ if (success) {
+ success = available.tryAcquire();
+ }
+ if (!success) {
+ runnable.run();
+ return CompletableFuture.completedFuture(null);
+ }
+ } else {
+ try {
+ available.acquire();
+ } catch (InterruptedException e) {
+ available.acquire();
+ }
}
+ Future<?> future = service.submit(runnable);
- @Override
- public boolean isCancelled() {
- return future.isCancelled();
- }
+ return new Future<>() {
+ @Override
+ public boolean cancel(boolean b) {
+ return future.cancel(b);
+ }
- @Override
- public boolean isDone() {
- return future.isDone();
- }
+ @Override
+ public boolean isCancelled() {
+ return future.isCancelled();
+ }
- @Override
- public Object get() throws InterruptedException, ExecutionException {
- Object ret;
- try {
- ret = future.get();
- } finally {
- available.release();
+ @Override
+ public boolean isDone() {
+ return future.isDone();
}
- return ret;
- }
+ @Override
+ public Object get() throws InterruptedException, ExecutionException {
+ Object ret;
+ try {
+ ret = future.get();
+ } finally {
+ available.release();
+ }
- @Override
- public Object get(long l, TimeUnit timeUnit)
- throws InterruptedException, ExecutionException, TimeoutException {
- Object ret;
- try {
- ret = future.get();
- } finally {
- available.release();
+ return ret;
}
- return ret;
- }
- };
+ @Override
+ public Object get(long l, TimeUnit timeUnit)
+ throws InterruptedException, ExecutionException, TimeoutException {
+ Object ret;
+ try {
+ ret = future.get();
+ } finally {
+ available.release();
+ }
+ return ret;
+ }
+ };
+ } catch (Exception e) {
+ ParWork.propegateInterrupt(e);
+ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
+ }
}
@Override