From d2b82394be5cf3f2a85cbee7d3044a367eda22c0 Mon Sep 17 00:00:00 2001
From: Yubao Liu <yubao.liu@gmail.com>
Date: Wed, 27 Jan 2021 07:10:54 +0000
Subject: [PATCH] avoid forcibly interrupting JE thread (#157)

---
 opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/OnDiskMergeImporter.java |   20 +++++++++++++++++++-
 1 files changed, 19 insertions(+), 1 deletions(-)

diff --git a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/OnDiskMergeImporter.java b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/OnDiskMergeImporter.java
index 2483cc6..26da5c3 100644
--- a/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/OnDiskMergeImporter.java
+++ b/opendj-server-legacy/src/main/java/org/opends/server/backends/pluggable/OnDiskMergeImporter.java
@@ -139,6 +139,7 @@
 import com.forgerock.opendj.util.Predicate;
 
 import net.jcip.annotations.NotThreadSafe;
+import org.forgerock.i18n.LocalizableMessage;
 
 /**
  * Imports LDIF data contained in files into the database. Because of the B-Tree structure used in backend, import is
@@ -2787,10 +2788,27 @@
   private static <K> List<K> waitTasksTermination(CompletionService<K> completionService, int nbTasks)
       throws InterruptedException, ExecutionException
   {
+    InterruptedException ie = null;
+    ExecutionException ee = null;
     final List<K> results = new ArrayList<>(nbTasks);
     for (int i = 0; i < nbTasks; i++)
     {
-      results.add(completionService.take().get());
+      try {
+        results.add(completionService.take().get());
+      } catch (Exception e) {
+        logger.error(LocalizableMessage.raw("failed to execute task"), e);
+        if (e instanceof InterruptedException) {
+          ie = (InterruptedException) e;
+        } else if (e instanceof ExecutionException) {
+          ee = (ExecutionException) e;
+        }
+      }
+    }
+    if (ie != null) {
+      throw ie;
+    }
+    if (ee != null) {
+        throw ee;
     }
     return results;
   }

--
Gitblit v1.10.0