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/14 16:49:30 UTC

[lucene-solr] branch reference_impl_dev updated: @538 ParExecutorService polish.

This is an automated email from the ASF dual-hosted git repository.

markrmiller pushed a commit to branch reference_impl_dev
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/reference_impl_dev by this push:
     new 67ae8d7  @538 ParExecutorService polish.
67ae8d7 is described below

commit 67ae8d7a672ce18746d85e9011a927f12101979c
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Fri Aug 14 11:49:05 2020 -0500

    @538 ParExecutorService polish.
---
 .../org/apache/solr/common/ParWorkExecService.java | 108 ++++++---------------
 1 file changed, 31 insertions(+), 77 deletions(-)

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 bd33ac2..fb84d6d 100644
--- a/solr/solrj/src/java/org/apache/solr/common/ParWorkExecService.java
+++ b/solr/solrj/src/java/org/apache/solr/common/ParWorkExecService.java
@@ -1,6 +1,5 @@
 package org.apache.solr.common;
 
-import org.apache.solr.common.util.CloseTracker;
 import org.apache.solr.common.util.ObjectReleaseTracker;
 import org.apache.solr.common.util.SysStats;
 import org.apache.solr.common.util.TimeOut;
@@ -10,26 +9,17 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.lang.invoke.MethodHandles;
-import java.lang.management.ManagementFactory;
-import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.AbstractExecutorService;
-import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.Callable;
-import java.util.concurrent.CompletableFuture;
-import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Future;
 import java.util.concurrent.FutureTask;
-import java.util.concurrent.Phaser;
 import java.util.concurrent.RejectedExecutionException;
 import java.util.concurrent.RunnableFuture;
 import java.util.concurrent.Semaphore;
 import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
 import java.util.concurrent.atomic.AtomicInteger;
 
 public class ParWorkExecService extends AbstractExecutorService {
@@ -99,23 +89,7 @@ public class ParWorkExecService extends AbstractExecutorService {
         service.execute(new Runnable() {
           @Override
           public void run() {
-            try {
-              finalRunnable.run();
-            } finally {
-              try {
-                if (finalRunnable instanceof ParWork.SolrFutureTask) {
-
-                } else {
-                  available.release();
-                }
-              } finally {
-                ParWork.closeExecutor();
-                running.decrementAndGet();
-                synchronized (awaitTerminate) {
-                  awaitTerminate.notifyAll();
-                }
-              }
-            }
+            runIt(finalRunnable, false);
           }
         });
       }
@@ -236,14 +210,7 @@ public class ParWorkExecService extends AbstractExecutorService {
       service.execute(new Runnable() {
         @Override
         public void run() {
-          try {
-            runnable.run();
-          } finally {
-            running.decrementAndGet();
-            synchronized (awaitTerminate) {
-              awaitTerminate.notifyAll();
-            }
-          }
+          runIt(runnable, false);
         }
       });
       return;
@@ -253,34 +220,15 @@ public class ParWorkExecService extends AbstractExecutorService {
 
     } else {
 
-      try {
-        available.acquire();
-      } catch (InterruptedException e) {
-        ParWork.propegateInterrupt(e);
-        running.decrementAndGet();
-        synchronized (awaitTerminate) {
-          awaitTerminate.notifyAll();
-        }
+
+      if (!available.tryAcquire()) {
+        runIt(runnable, true);
         return;
       }
-      if (!checkLoad()) {
-        try {
-          runnable.run();
-        } finally {
-          try {
-            if (runnable instanceof ParWork.SolrFutureTask) {
 
-            } else {
-              available.release();
-            }
-          } finally {
-            ParWork.closeExecutor();
-            running.decrementAndGet();
-            synchronized (awaitTerminate) {
-              awaitTerminate.notifyAll();
-            }
-          }
-        }
+      if (!checkLoad()) {
+        runIt(runnable, true);
+        return;
       }
     }
 
@@ -288,23 +236,7 @@ public class ParWorkExecService extends AbstractExecutorService {
     service.execute(new Runnable() {
       @Override
       public void run() {
-        try {
-          finalRunnable.run();
-        } finally {
-          try {
-            if (finalRunnable instanceof ParWork.SolrFutureTask) {
-
-            } else {
-              available.release();
-            }
-          } finally {
-            ParWork.closeExecutor();
-            running.decrementAndGet();
-            synchronized (awaitTerminate) {
-              awaitTerminate.notifyAll();
-            }
-          }
-        }
+        runIt(finalRunnable, false);
       }
     });
 
@@ -333,6 +265,28 @@ public class ParWorkExecService extends AbstractExecutorService {
 //    }
   }
 
+  private void runIt(Runnable runnable, boolean callThreadRuns) {
+    try {
+      runnable.run();
+    } finally {
+      try {
+        if (runnable instanceof ParWork.SolrFutureTask) {
+
+        } else {
+          available.release();
+        }
+      } finally {
+        try {
+          running.decrementAndGet();
+          synchronized (awaitTerminate) {
+            awaitTerminate.notifyAll();
+          }
+        } finally {
+          if (!callThreadRuns) ParWork.closeExecutor();
+        }
+      }
+    }
+  }
 
   public Integer getMaximumPoolSize() {
     return maxSize;