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/07/22 02:13:17 UTC

[lucene-solr] branch reference_impl updated: @283 Interrupt, interrupt, interrupt.

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


The following commit(s) were added to refs/heads/reference_impl by this push:
     new 5a80141  @283 Interrupt, interrupt, interrupt.
5a80141 is described below

commit 5a80141ef3cb44e78b6ceb017d75ba92a6728452
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Tue Jul 21 21:13:05 2020 -0500

    @283 Interrupt, interrupt, interrupt.
---
 .../client/solrj/embedded/JettySolrRunner.java     |  2 +-
 .../java/org/apache/solr/cloud/ActionThrottle.java |  3 ++-
 .../apache/solr/cloud/CloudConfigSetService.java   |  2 +-
 .../src/java/org/apache/solr/cloud/CloudUtil.java  |  2 +-
 .../src/java/org/apache/solr/cloud/Overseer.java   |  2 +-
 .../org/apache/solr/cloud/OverseerTaskQueue.java   |  1 +
 .../org/apache/solr/cloud/RecoveryStrategy.java    | 19 +++++++-------
 .../java/org/apache/solr/cloud/ZkController.java   | 30 ++++++++++------------
 .../java/org/apache/solr/cloud/ZkShardTerms.java   |  4 +--
 .../apache/solr/cloud/ZkSolrResourceLoader.java    |  2 +-
 .../OverseerCollectionMessageHandler.java          |  6 ++---
 .../solr/cloud/api/collections/SplitShardCmd.java  |  2 +-
 .../solr/cloud/autoscaling/ExecutePlanAction.java  |  2 +-
 .../autoscaling/InactiveMarkersPlanAction.java     |  2 +-
 .../solr/cloud/autoscaling/NodeAddedTrigger.java   |  1 +
 .../solr/cloud/autoscaling/NodeLostTrigger.java    |  1 +
 .../cloud/autoscaling/OverseerTriggerThread.java   | 12 +++------
 .../solr/cloud/autoscaling/ScheduledTriggers.java  |  2 +-
 .../apache/solr/cloud/autoscaling/TriggerBase.java |  2 +-
 .../autoscaling/sim/GenericDistributedQueue.java   |  3 ++-
 .../cloud/autoscaling/sim/SimCloudManager.java     |  2 +-
 .../autoscaling/sim/SimClusterStateProvider.java   |  3 ++-
 .../java/org/apache/solr/core/CoreContainer.java   |  2 +-
 .../src/java/org/apache/solr/core/SolrCore.java    |  4 +--
 .../src/java/org/apache/solr/core/SolrCores.java   |  8 +++---
 .../src/java/org/apache/solr/core/ZkContainer.java |  4 +--
 .../org/apache/solr/filestore/PackageStoreAPI.java |  2 +-
 .../apache/solr/handler/CdcrReplicatorManager.java | 10 +++-----
 .../solr/handler/CdcrReplicatorScheduler.java      |  4 +--
 .../apache/solr/handler/CdcrRequestHandler.java    | 10 ++++----
 .../solr/handler/CdcrUpdateLogSynchronizer.java    |  4 +--
 .../java/org/apache/solr/handler/IndexFetcher.java |  2 +-
 .../org/apache/solr/handler/SolrConfigHandler.java |  5 +---
 .../solr/handler/admin/CollectionsHandler.java     |  2 +-
 .../solr/handler/admin/MetricsHistoryHandler.java  |  2 +-
 .../solr/handler/admin/RequestApplyUpdatesOp.java  |  3 ++-
 .../solr/handler/admin/ZookeeperInfoHandler.java   |  8 +++---
 .../solr/handler/component/CloudReplicaSource.java |  2 ++
 .../org/apache/solr/metrics/SolrMetricManager.java |  3 +++
 .../reporters/solr/SolrClusterReporter.java        |  3 ++-
 .../src/java/org/apache/solr/pkg/PackageAPI.java   |  6 ++---
 .../request/PerSegmentSingleValuedFaceting.java    |  3 ++-
 .../org/apache/solr/schema/ManagedIndexSchema.java |  2 +-
 .../solr/schema/ManagedIndexSchemaFactory.java     | 12 +++------
 .../apache/solr/schema/ZkIndexSchemaReader.java    |  9 +++----
 .../org/apache/solr/search/ValueSourceParser.java  |  2 ++
 .../apache/solr/security/AuditLoggerPlugin.java    | 11 ++++----
 .../security/DelegationTokenKerberosFilter.java    |  2 ++
 .../apache/solr/servlet/SolrDispatchFilter.java    |  1 +
 .../org/apache/solr/store/hdfs/HdfsDirectory.java  |  5 ++--
 .../apache/solr/store/hdfs/HdfsLockFactory.java    |  4 ++-
 .../apache/solr/update/DefaultSolrCoreState.java   |  2 +-
 .../apache/solr/update/DirectUpdateHandler2.java   |  2 +-
 .../java/org/apache/solr/update/HdfsUpdateLog.java |  4 ++-
 .../org/apache/solr/update/SolrCmdDistributor.java |  2 +-
 .../org/apache/solr/update/TimedVersionBucket.java |  5 ++--
 .../src/java/org/apache/solr/update/UpdateLog.java |  4 +--
 .../java/org/apache/solr/update/VersionBucket.java |  3 +++
 .../processor/DistributedZkUpdateProcessor.java    | 15 ++++++-----
 .../org/apache/solr/util/ConcurrentLRUCache.java   |  5 +++-
 .../src/java/org/apache/solr/util/ExportTool.java  |  2 ++
 .../src/java/org/apache/solr/util/FSHDFSUtils.java |  2 ++
 .../src/java/org/apache/solr/util/FileUtils.java   |  4 ++-
 .../java/org/apache/solr/util/SimplePostTool.java  |  2 ++
 .../src/java/org/apache/solr/util/SolrCLI.java     | 12 +++++----
 .../java/org/apache/solr/util/TestInjection.java   | 18 ++++++-------
 66 files changed, 170 insertions(+), 152 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 469d0d4..a42c9bb 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
@@ -783,7 +783,7 @@ public class JettySolrRunner implements Closeable {
         try {
           reader.waitForLiveNodes(10, TimeUnit.SECONDS, (o, n) -> !n.contains(nodeName));
         } catch (InterruptedException e) {
-          Thread.currentThread().interrupt();
+          ParWork.propegateInterrupt(e);
           throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "interrupted");
         } catch (TimeoutException e) {
           throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
diff --git a/solr/core/src/java/org/apache/solr/cloud/ActionThrottle.java b/solr/core/src/java/org/apache/solr/cloud/ActionThrottle.java
index 1724b53..85c37a3 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ActionThrottle.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ActionThrottle.java
@@ -20,6 +20,7 @@ import java.lang.invoke.MethodHandles;
 
 import java.util.concurrent.TimeUnit;
 
+import org.apache.solr.common.ParWork;
 import org.apache.solr.common.util.TimeSource;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -84,7 +85,7 @@ public class ActionThrottle {
       try {
         timeSource.sleep(sleep);
       } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
+        ParWork.propegateInterrupt(e);
       }
     }
   }
diff --git a/solr/core/src/java/org/apache/solr/cloud/CloudConfigSetService.java b/solr/core/src/java/org/apache/solr/cloud/CloudConfigSetService.java
index ef88c71..25631f1 100644
--- a/solr/core/src/java/org/apache/solr/cloud/CloudConfigSetService.java
+++ b/solr/core/src/java/org/apache/solr/cloud/CloudConfigSetService.java
@@ -79,7 +79,7 @@ public class CloudConfigSetService extends ConfigSetService {
       log.warn("Unexpected exception when getting modification time of {}", zkPath, e);
       return null; // debatable; we'll see an error soon if there's a real problem
     } catch (InterruptedException e) {
-      Thread.currentThread().interrupt();
+      ParWork.propegateInterrupt(e);
       throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
     }
     if (stat == null) { // not found
diff --git a/solr/core/src/java/org/apache/solr/cloud/CloudUtil.java b/solr/core/src/java/org/apache/solr/cloud/CloudUtil.java
index 585fbf5..5321b1d 100644
--- a/solr/core/src/java/org/apache/solr/cloud/CloudUtil.java
+++ b/solr/core/src/java/org/apache/solr/cloud/CloudUtil.java
@@ -144,7 +144,7 @@ public class CloudUtil {
       log.info("Error fetching key names");
       return Collections.EMPTY_MAP;
     } catch (InterruptedException e) {
-      Thread.currentThread().interrupt();
+      ParWork.propegateInterrupt(e);
       throw new SolrException(ErrorCode.SERVER_ERROR,"Unable to read crypto keys",e );
     } catch (KeeperException e) {
       throw new SolrException(ErrorCode.SERVER_ERROR,"Unable to read crypto keys",e );
diff --git a/solr/core/src/java/org/apache/solr/cloud/Overseer.java b/solr/core/src/java/org/apache/solr/cloud/Overseer.java
index ed085ce..e0e4c2f 100644
--- a/solr/core/src/java/org/apache/solr/cloud/Overseer.java
+++ b/solr/core/src/java/org/apache/solr/cloud/Overseer.java
@@ -260,7 +260,7 @@ public class Overseer implements SolrCloseable {
                       fallbackQueue.poll();
                     }
                   } catch (InterruptedException e1) {
-                    ParWork.propegateInterrupt(e1);
+                    ParWork.propegateInterrupt(e);
                     return;
                   } catch (Exception e1) {
                     exp.addSuppressed(e1);
diff --git a/solr/core/src/java/org/apache/solr/cloud/OverseerTaskQueue.java b/solr/core/src/java/org/apache/solr/cloud/OverseerTaskQueue.java
index f91e596..d016a5a 100644
--- a/solr/core/src/java/org/apache/solr/cloud/OverseerTaskQueue.java
+++ b/solr/core/src/java/org/apache/solr/cloud/OverseerTaskQueue.java
@@ -71,6 +71,7 @@ public class OverseerTaskQueue extends ZkDistributedQueue {
       try {
         Thread.sleep(250);
       } catch (InterruptedException e) {
+        ParWork.propegateInterrupt(e);
         log.error("Interrupted while waiting for overseer queue to drain before shutdown!");
       }
     }
diff --git a/solr/core/src/java/org/apache/solr/cloud/RecoveryStrategy.java b/solr/core/src/java/org/apache/solr/cloud/RecoveryStrategy.java
index 8aa00d5..29d96db 100644
--- a/solr/core/src/java/org/apache/solr/cloud/RecoveryStrategy.java
+++ b/solr/core/src/java/org/apache/solr/cloud/RecoveryStrategy.java
@@ -368,8 +368,7 @@ public class RecoveryStrategy implements Runnable, Closeable {
         try {
           doRecovery(core);
         } catch (InterruptedException e) {
-          Thread.currentThread().interrupt();
-          SolrException.log(log, "", e);
+          ParWork.propegateInterrupt(e);
           throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR, "", e);
         } catch (Exception e) {
           ParWork.propegateInterrupt(e);
@@ -539,7 +538,7 @@ public class RecoveryStrategy implements Runnable, Closeable {
             Thread.sleep(startingRecoveryDelayMilliSeconds);
           }
         } catch (InterruptedException e) {
-          Thread.currentThread().interrupt();
+          ParWork.propegateInterrupt(e);
           log.warn("Recovery was interrupted.", e);
           close = true;
         }
@@ -690,7 +689,8 @@ public class RecoveryStrategy implements Runnable, Closeable {
         try {
           Thread.sleep(waitForUpdatesWithStaleStatePauseMilliSeconds);
         } catch (InterruptedException e) {
-          Thread.currentThread().interrupt();
+          ParWork.propegateInterrupt(e);
+          throw new SolrException(ErrorCode.SERVER_ERROR, e);
         }
 
         // first thing we just try to sync
@@ -754,9 +754,9 @@ public class RecoveryStrategy implements Runnable, Closeable {
 
           log.info("Replication Recovery was successful.");
           successfulRecovery = true;
-        } catch (InterruptedException e) {
-          ParWork.propegateInterrupt(e);
-          close = true;
+        } catch (InterruptedException | AlreadyClosedException e) {
+          ParWork.propegateInterrupt(e, true);
+          return;
         } catch (Exception e) {
           SolrException.log(log, "Error while trying to recover", e);
         }
@@ -831,9 +831,8 @@ public class RecoveryStrategy implements Runnable, Closeable {
             Thread.sleep(startingRecoveryDelayMilliSeconds);
           }
         } catch (InterruptedException e) {
-          Thread.currentThread().interrupt();
-          log.warn("Recovery was interrupted.", e);
-          close = true;
+          ParWork.propegateInterrupt(e, true);
+          return;
         }
       }
 
diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkController.java b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
index d81e482..0a52937 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkController.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkController.java
@@ -520,9 +520,7 @@ public class ZkController implements Closeable {
               parWork.addCollect("reconnectListeners");
             }
           } catch (InterruptedException e) {
-            log.warn("ConnectionManager interrupted", e);
-            // Restore the interrupted status
-            Thread.currentThread().interrupt();
+            ParWork.propegateInterrupt(e);
             throw new ZooKeeperException(
                     SolrException.ErrorCode.SERVER_ERROR, "", e);
           } catch (SessionExpiredException e) {
@@ -1023,6 +1021,7 @@ public class ZkController implements Closeable {
                   success = latch.await(10, TimeUnit.SECONDS);
                 } catch (InterruptedException e) {
                   ParWork.propegateInterrupt(e);
+                  return;
                 }
                 if (!success) {
                   log.error("Time out waiting to see solr live nodes go down " + children.size());
@@ -1231,9 +1230,7 @@ public class ZkController implements Closeable {
 
         //  publishAndWaitForDownStates();
       } catch (InterruptedException e) {
-        // Restore the interrupted status
-        Thread.currentThread().interrupt();
-        log.error("Interrupted", e);
+        ParWork.propegateInterrupt(e);
         throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR,
                 "", e);
       } catch (KeeperException e) {
@@ -1530,8 +1527,7 @@ public class ZkController implements Closeable {
           startReplicationFromLeader(coreName, false);
         }
       } catch (InterruptedException e) {
-        // Restore the interrupted status
-        Thread.currentThread().interrupt();
+        ParWork.propegateInterrupt(e);
         throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR, "", e);
       } catch (KeeperException | IOException e) {
         throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR, "", e);
@@ -2065,7 +2061,7 @@ public class ZkController implements Closeable {
           return false;
         });
       } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
+        ParWork.propegateInterrupt(e);
         throw new SolrException(ErrorCode.SERVER_ERROR, "Could not get shard id for core: " + cd.getName());
       }
     } catch (TimeoutException e1) {
@@ -2129,8 +2125,7 @@ public class ZkController implements Closeable {
       log.error("", e);
       throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR, "", e);
     } catch (InterruptedException e) {
-      Thread.currentThread().interrupt();
-      log.error("", e);
+      ParWork.propegateInterrupt(e);
       throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR, "", e);
     } catch (NotInClusterStateException e) {
       // make the stack trace less verbose
@@ -2319,8 +2314,7 @@ public class ZkController implements Closeable {
     try {
       return asyncIdsMap.putIfAbsent(asyncId, new byte[0]);
     } catch (InterruptedException e) {
-      log.error("Interrupted cleaning asyncId={}", asyncId, e);
-      Thread.currentThread().interrupt();
+      ParWork.propegateInterrupt(e);
       throw new RuntimeException(e);
     }
   }
@@ -2335,8 +2329,7 @@ public class ZkController implements Closeable {
     try {
       return asyncIdsMap.remove(asyncId);
     } catch (InterruptedException e) {
-      log.error("Interrupted cleaning asyncId={}", asyncId, e);
-      Thread.currentThread().interrupt();
+      ParWork.propegateInterrupt(e);
       throw new RuntimeException(e);
     }
   }
@@ -2701,7 +2694,8 @@ public class ZkController implements Closeable {
       } catch (KeeperException e) {
         //ignore , it is not a big deal
       } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
+        ParWork.propegateInterrupt(e);
+        return;
       }
 
       boolean resetWatcher = false;
@@ -2756,9 +2750,11 @@ public class ZkController implements Closeable {
       }
     } catch (KeeperException e) {
       log.error("failed to set watcher for conf dir {} ", zkDir);
+      throw new SolrException(ErrorCode.SERVER_ERROR, e);
     } catch (InterruptedException e) {
       Thread.currentThread().interrupt();
       log.error("failed to set watcher for conf dir {} ", zkDir);
+      throw new SolrException(ErrorCode.SERVER_ERROR, e);
     }
   }
 
@@ -2875,7 +2871,7 @@ public class ZkController implements Closeable {
     } catch (AlreadyClosedException e) {
       log.info("Not publishing node as DOWN because a resource required to do so is already closed.");
     } catch (InterruptedException e) {
-      Thread.currentThread().interrupt();
+      ParWork.propegateInterrupt(e);
       log.debug("Publish node as down was interrupted.");
     }
   }
diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkShardTerms.java b/solr/core/src/java/org/apache/solr/cloud/ZkShardTerms.java
index 2ecf845..e5710de 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkShardTerms.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkShardTerms.java
@@ -341,7 +341,7 @@ public class ZkShardTerms implements AutoCloseable{
       }
 
     } catch (InterruptedException e) {
-      Thread.interrupted();
+      ParWork.propegateInterrupt(e);
       throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
           "Error creating shard term node in Zookeeper for collection: " + collection, e);
     } catch (KeeperException e) {
@@ -411,7 +411,7 @@ public class ZkShardTerms implements AutoCloseable{
       // exists operation is faster than getData operation
       zkClient.exists(znodePath, watcher);
     } catch (InterruptedException e) {
-      Thread.interrupted();
+      ParWork.propegateInterrupt(e);
       throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Error watching shard term for collection: " + collection, e);
     }
   }
diff --git a/solr/core/src/java/org/apache/solr/cloud/ZkSolrResourceLoader.java b/solr/core/src/java/org/apache/solr/cloud/ZkSolrResourceLoader.java
index 39a6318..33b965c 100644
--- a/solr/core/src/java/org/apache/solr/cloud/ZkSolrResourceLoader.java
+++ b/solr/core/src/java/org/apache/solr/cloud/ZkSolrResourceLoader.java
@@ -87,7 +87,7 @@ public class ZkSolrResourceLoader extends SolrResourceLoader implements Resource
       }
       return new ZkByteArrayInputStream(bytes, stat);
     } catch (InterruptedException e) {
-      Thread.currentThread().interrupt();
+      ParWork.propegateInterrupt(e);
       throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Interrupted while opening " + file, e);
     } catch (KeeperException.NoNodeException e) {
       throw new SolrResourceNotFoundException("Can't find resource '" + resource
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerCollectionMessageHandler.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerCollectionMessageHandler.java
index eb389d5..c7099d6 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerCollectionMessageHandler.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/OverseerCollectionMessageHandler.java
@@ -570,7 +570,7 @@ public class OverseerCollectionMessageHandler implements OverseerMessageHandler,
         error = "Timeout waiting for collection state.";
       throw new ZkController.NotInClusterStateException(ErrorCode.SERVER_ERROR, error);
     } catch (InterruptedException e) {
-      Thread.currentThread().interrupt();
+      ParWork.propegateInterrupt(e);
       throw new SolrException(ErrorCode.SERVER_ERROR, "Interrupted");
     }
 
@@ -593,7 +593,7 @@ public class OverseerCollectionMessageHandler implements OverseerMessageHandler,
       String error = "Timeout waiting for new shard.";
       throw new ZkController.NotInClusterStateException(ErrorCode.SERVER_ERROR, error);
     } catch (InterruptedException e) {
-      Thread.currentThread().interrupt();
+      ParWork.propegateInterrupt(e);
       throw new SolrException(ErrorCode.SERVER_ERROR, "Interrupted");
     }
   }
@@ -731,7 +731,7 @@ public class OverseerCollectionMessageHandler implements OverseerMessageHandler,
         error = "Timeout waiting for collection state.";
       throw new SolrException(ErrorCode.SERVER_ERROR, error);
     } catch (InterruptedException e) {
-      Thread.currentThread().interrupt();
+      ParWork.propegateInterrupt(e);
       throw new SolrException(ErrorCode.SERVER_ERROR, "Interrupted");
     }
     return result.get();
diff --git a/solr/core/src/java/org/apache/solr/cloud/api/collections/SplitShardCmd.java b/solr/core/src/java/org/apache/solr/cloud/api/collections/SplitShardCmd.java
index 2c25ae7..d700a99 100644
--- a/solr/core/src/java/org/apache/solr/cloud/api/collections/SplitShardCmd.java
+++ b/solr/core/src/java/org/apache/solr/cloud/api/collections/SplitShardCmd.java
@@ -149,7 +149,7 @@ public class SplitShardCmd implements OverseerCollectionMessageHandler.Cmd {
     try {
       parentShardLeader = zkStateReader.getLeaderRetry(collectionName, slice.get(), 10000);
     } catch (InterruptedException e) {
-      Thread.currentThread().interrupt();
+      ParWork.propegateInterrupt(e);
       throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Interrupted.");
     }
 
diff --git a/solr/core/src/java/org/apache/solr/cloud/autoscaling/ExecutePlanAction.java b/solr/core/src/java/org/apache/solr/cloud/autoscaling/ExecutePlanAction.java
index 08e66fa..f9562b5 100644
--- a/solr/core/src/java/org/apache/solr/cloud/autoscaling/ExecutePlanAction.java
+++ b/solr/core/src/java/org/apache/solr/cloud/autoscaling/ExecutePlanAction.java
@@ -182,7 +182,7 @@ public class ExecutePlanAction extends TriggerActionBase {
           throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
               "Unexpected exception executing operation: " + operation.getParams(), e);
         } catch (InterruptedException e) {
-          Thread.currentThread().interrupt();
+          ParWork.propegateInterrupt(e);
           throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "ExecutePlanAction was interrupted", e);
         } catch (Exception e) {
           ParWork.propegateInterrupt(e);
diff --git a/solr/core/src/java/org/apache/solr/cloud/autoscaling/InactiveMarkersPlanAction.java b/solr/core/src/java/org/apache/solr/cloud/autoscaling/InactiveMarkersPlanAction.java
index aebca32..95aaa2f 100644
--- a/solr/core/src/java/org/apache/solr/cloud/autoscaling/InactiveMarkersPlanAction.java
+++ b/solr/core/src/java/org/apache/solr/cloud/autoscaling/InactiveMarkersPlanAction.java
@@ -137,7 +137,7 @@ public class InactiveMarkersPlanAction extends TriggerActionBase {
           log.trace(" -- keep {}, delta={}, ttl={}, active={}", markerPath, delta, cleanupTTL, activeMarker);
         }
       } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
+        ParWork.propegateInterrupt(e);
         return;
       } catch (IOException | KeeperException e) {
         log.warn("Could not cleanup marker at {}, skipping... ({}}", markerPath, e.getMessage());
diff --git a/solr/core/src/java/org/apache/solr/cloud/autoscaling/NodeAddedTrigger.java b/solr/core/src/java/org/apache/solr/cloud/autoscaling/NodeAddedTrigger.java
index cfa2f74..e8d1cab 100644
--- a/solr/core/src/java/org/apache/solr/cloud/autoscaling/NodeAddedTrigger.java
+++ b/solr/core/src/java/org/apache/solr/cloud/autoscaling/NodeAddedTrigger.java
@@ -89,6 +89,7 @@ public class NodeAddedTrigger extends TriggerBase {
             return;
           }
         } catch (InterruptedException | IOException | KeeperException e) {
+          ParWork.propegateInterrupt(e);
           log.debug("-- ignoring marker {} state due to error{}", markerPath, e);
         }
         // don't add nodes that have since gone away
diff --git a/solr/core/src/java/org/apache/solr/cloud/autoscaling/NodeLostTrigger.java b/solr/core/src/java/org/apache/solr/cloud/autoscaling/NodeLostTrigger.java
index 64f40e7..5544717 100644
--- a/solr/core/src/java/org/apache/solr/cloud/autoscaling/NodeLostTrigger.java
+++ b/solr/core/src/java/org/apache/solr/cloud/autoscaling/NodeLostTrigger.java
@@ -88,6 +88,7 @@ public class NodeLostTrigger extends TriggerBase {
             return;
           }
         } catch (InterruptedException | IOException | KeeperException e) {
+          ParWork.propegateInterrupt(e);
           log.debug("-- ignoring marker {} state due to error", markerPath, e);
         }
         // don't add nodes that have since came back
diff --git a/solr/core/src/java/org/apache/solr/cloud/autoscaling/OverseerTriggerThread.java b/solr/core/src/java/org/apache/solr/cloud/autoscaling/OverseerTriggerThread.java
index cc2489e..2313333 100644
--- a/solr/core/src/java/org/apache/solr/cloud/autoscaling/OverseerTriggerThread.java
+++ b/solr/core/src/java/org/apache/solr/cloud/autoscaling/OverseerTriggerThread.java
@@ -168,8 +168,7 @@ public class OverseerTriggerThread implements Runnable, SolrCloseable {
         // somebody else has changed the configuration so we must retry
       } catch (InterruptedException e) {
         // Restore the interrupted status
-        Thread.currentThread().interrupt();
-        log.warn("Interrupted", e);
+        ParWork.propegateInterrupt(e);
         return;
       }
       catch (IOException | KeeperException e) {
@@ -191,9 +190,7 @@ public class OverseerTriggerThread implements Runnable, SolrCloseable {
     } catch (IOException e) {
       log.error("IO error: [{}]", e);
     } catch (InterruptedException | AlreadyClosedException e) {
-      // Restore the interrupted status
-      Thread.currentThread().interrupt();
-      log.info("Interrupted", e);
+      ParWork.propegateInterrupt(e);
       return;
     } catch (Exception e)  {
       ParWork.propegateInterrupt(e);
@@ -235,7 +232,6 @@ public class OverseerTriggerThread implements Runnable, SolrCloseable {
         }
       } catch (InterruptedException | AlreadyClosedException e) {
         ParWork.propegateInterrupt(e);
-        log.info("Interrupted", e);
         return;
       }
      
@@ -320,9 +316,7 @@ public class OverseerTriggerThread implements Runnable, SolrCloseable {
       } catch (IOException e) {
         log.warn("IO Error: [{}]", e);
       } catch (InterruptedException | AlreadyClosedException e) {
-        // Restore the interrupted status
-        Thread.currentThread().interrupt();
-        log.warn("Interrupted", e);
+        ParWork.propegateInterrupt(e);
       } catch (Exception e)  {
         log.error("Unexpected exception", e);
       }
diff --git a/solr/core/src/java/org/apache/solr/cloud/autoscaling/ScheduledTriggers.java b/solr/core/src/java/org/apache/solr/cloud/autoscaling/ScheduledTriggers.java
index 72b7f18..12becf2 100644
--- a/solr/core/src/java/org/apache/solr/cloud/autoscaling/ScheduledTriggers.java
+++ b/solr/core/src/java/org/apache/solr/cloud/autoscaling/ScheduledTriggers.java
@@ -464,7 +464,7 @@ public class ScheduledTriggers implements Closeable {
         }
       }
     } catch (InterruptedException e) {
-      Thread.currentThread().interrupt();
+      ParWork.propegateInterrupt(e);
       throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Thread interrupted", e);
     } catch (Exception e) {
       ParWork.propegateInterrupt(e);
diff --git a/solr/core/src/java/org/apache/solr/cloud/autoscaling/TriggerBase.java b/solr/core/src/java/org/apache/solr/cloud/autoscaling/TriggerBase.java
index 887b511..158d0a3 100644
--- a/solr/core/src/java/org/apache/solr/cloud/autoscaling/TriggerBase.java
+++ b/solr/core/src/java/org/apache/solr/cloud/autoscaling/TriggerBase.java
@@ -152,7 +152,7 @@ public abstract class TriggerBase implements AutoScaling.Trigger {
     } catch (AlreadyExistsException e) {
       // ignore
     } catch (InterruptedException | KeeperException | IOException e) {
-      log.warn("Exception checking ZK path {}", ZkStateReader.SOLR_AUTOSCALING_TRIGGER_STATE_PATH, e);
+      ParWork.propegateInterrupt(e);
       throw e;
     }
     for (TriggerAction action : actions) {
diff --git a/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/GenericDistributedQueue.java b/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/GenericDistributedQueue.java
index 37cebe1..3f1b59d 100644
--- a/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/GenericDistributedQueue.java
+++ b/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/GenericDistributedQueue.java
@@ -41,6 +41,7 @@ import org.apache.solr.client.solrj.cloud.DistribStateManager;
 import org.apache.solr.client.solrj.cloud.autoscaling.VersionedData;
 import org.apache.solr.cloud.OverseerTaskQueue;
 import org.apache.solr.cloud.Stats;
+import org.apache.solr.common.ParWork;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrException.ErrorCode;
 import org.apache.solr.common.util.Pair;
@@ -130,7 +131,7 @@ public class GenericDistributedQueue implements DistributedQueue {
     } catch (IOException | KeeperException e) {
       throw new SolrException(ErrorCode.SERVER_ERROR, e);
     } catch (InterruptedException e) {
-      Thread.currentThread().interrupt();
+      ParWork.propegateInterrupt(e);
       throw new SolrException(ErrorCode.SERVER_ERROR, e);
     }
 
diff --git a/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimCloudManager.java b/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimCloudManager.java
index ea59a87..9f9e9a2 100644
--- a/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimCloudManager.java
+++ b/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimCloudManager.java
@@ -1047,7 +1047,7 @@ public class SimCloudManager implements SolrCloudManager {
       try {
         return inner.call();
       } catch (InterruptedException ignored) {
-        log.warn("Callable interupted", ignored);
+        ParWork.propegateInterrupt(ignored);
         throw ignored;
       } catch (Throwable t) {
         // be forgiving of errors that occured as a result of interuption, even if
diff --git a/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimClusterStateProvider.java b/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimClusterStateProvider.java
index 716e689..d91daa2 100644
--- a/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimClusterStateProvider.java
+++ b/solr/core/src/java/org/apache/solr/cloud/autoscaling/sim/SimClusterStateProvider.java
@@ -1209,7 +1209,7 @@ public class SimClusterStateProvider implements ClusterStateProvider {
                   try {
                     cloudManager.getSimNodeStateProvider().simSetNodeValue(n, "cores", cores.intValue() - 1);
                   } catch (InterruptedException e) {
-                    Thread.currentThread().interrupt();
+                    ParWork.propegateInterrupt(e);
                     throw new RuntimeException("interrupted");
                   }
                 }
@@ -2532,6 +2532,7 @@ public class SimClusterStateProvider implements ClusterStateProvider {
         lock.unlock();
       }
     } catch (InterruptedException e) {
+      ParWork.propegateInterrupt(e);
       throw new IOException(e);
     }
   }
diff --git a/solr/core/src/java/org/apache/solr/core/CoreContainer.java b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
index 3e6cfab..7fb6976 100644
--- a/solr/core/src/java/org/apache/solr/core/CoreContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/CoreContainer.java
@@ -929,7 +929,7 @@ public class CoreContainer implements Closeable {
             try {
               future.get();
             } catch (InterruptedException e) {
-              Thread.currentThread().interrupt();
+              ParWork.propegateInterrupt(e);
             } catch (ExecutionException e) {
               log.error("Error waiting for SolrCore to be loaded on startup", e.getCause());
             }
diff --git a/solr/core/src/java/org/apache/solr/core/SolrCore.java b/solr/core/src/java/org/apache/solr/core/SolrCore.java
index bc7c907..594ea6d 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrCore.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrCore.java
@@ -1421,7 +1421,7 @@ public final class SolrCore implements SolrInfoBean, Closeable {
       try {
         Thread.sleep(milliSleep);
       } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
+        ParWork.propegateInterrupt(e);
         throw new SolrException(ErrorCode.SERVER_ERROR,
             "Caught InterruptedException whilst waiting for core " + getName() + " to close: "
                 + e.getMessage(), e);
@@ -3231,7 +3231,7 @@ public final class SolrCore implements SolrInfoBean, Closeable {
     } catch (KeeperException e) {
       log.error("error refreshing solrconfig ", e);
     } catch (InterruptedException e) {
-      Thread.currentThread().interrupt();
+      ParWork.propegateInterrupt(e);
     }
     return false;
   }
diff --git a/solr/core/src/java/org/apache/solr/core/SolrCores.java b/solr/core/src/java/org/apache/solr/core/SolrCores.java
index 361dcc1..317decf 100644
--- a/solr/core/src/java/org/apache/solr/core/SolrCores.java
+++ b/solr/core/src/java/org/apache/solr/core/SolrCores.java
@@ -384,7 +384,7 @@ class SolrCores implements Closeable {
           try {
             Thread.sleep(250);
           } catch (InterruptedException e) {
-            Thread.currentThread().interrupt();
+            ParWork.propegateInterrupt(e);
             throw new RuntimeException(e);
           }
         }
@@ -410,7 +410,7 @@ class SolrCores implements Closeable {
             try {
               pendingCoreOps.wait(500);
             } catch (InterruptedException e) {
-              Thread.currentThread().interrupt();
+              ParWork.propegateInterrupt(e);
               throw new RuntimeException(e);
             }
           }
@@ -485,7 +485,7 @@ class SolrCores implements Closeable {
           try {
             loadingSignal.wait(1000);
           } catch (InterruptedException e) {
-            Thread.currentThread().interrupt();
+            ParWork.propegateInterrupt(e);
             return;
           }
         }
@@ -506,7 +506,7 @@ class SolrCores implements Closeable {
           try {
             loadingSignal.wait(1000);
           } catch (InterruptedException e) {
-            Thread.currentThread().interrupt();
+            ParWork.propegateInterrupt(e);
             return;
           }
         }
diff --git a/solr/core/src/java/org/apache/solr/core/ZkContainer.java b/solr/core/src/java/org/apache/solr/core/ZkContainer.java
index 610162b..5804d1e 100644
--- a/solr/core/src/java/org/apache/solr/core/ZkContainer.java
+++ b/solr/core/src/java/org/apache/solr/core/ZkContainer.java
@@ -158,9 +158,7 @@ public class ZkContainer implements Closeable {
 
         if (log.isDebugEnabled()) log.debug("done zkController init");
       } catch (InterruptedException e) {
-        // Restore the interrupted status
-        Thread.currentThread().interrupt();
-        log.error("", e);
+        ParWork.propegateInterrupt(e);
         throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR,
             "", e);
       } catch (TimeoutException e) {
diff --git a/solr/core/src/java/org/apache/solr/filestore/PackageStoreAPI.java b/solr/core/src/java/org/apache/solr/filestore/PackageStoreAPI.java
index 2c38fda..2bcb078 100644
--- a/solr/core/src/java/org/apache/solr/filestore/PackageStoreAPI.java
+++ b/solr/core/src/java/org/apache/solr/filestore/PackageStoreAPI.java
@@ -170,7 +170,7 @@ public class PackageStoreAPI {
           throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, e);
         }
       } catch (InterruptedException e) {
-        log.error("Unexpected error", e);
+        ParWork.propegateInterrupt(e);
       } catch (KeeperException.NodeExistsException e) {
         throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "A write is already in process , try later");
       } catch (KeeperException e) {
diff --git a/solr/core/src/java/org/apache/solr/handler/CdcrReplicatorManager.java b/solr/core/src/java/org/apache/solr/handler/CdcrReplicatorManager.java
index b11ed2b..bab9f8f 100644
--- a/solr/core/src/java/org/apache/solr/handler/CdcrReplicatorManager.java
+++ b/solr/core/src/java/org/apache/solr/handler/CdcrReplicatorManager.java
@@ -193,8 +193,7 @@ class CdcrReplicatorManager implements CdcrStateManager.CdcrStateObserver {
       } catch (IOException | SolrServerException | SolrException e) {
         log.warn("Unable to instantiate the log reader for target collection {}", state.getTargetCollection(), e);
       } catch (InterruptedException e) {
-        log.warn("Thread interrupted while instantiate the log reader for target collection {}", state.getTargetCollection(), e);
-        Thread.currentThread().interrupt();
+        ParWork.propegateInterrupt(e);
       }
     }
   }
@@ -269,8 +268,7 @@ class CdcrReplicatorManager implements CdcrStateManager.CdcrStateObserver {
               targetCollection, shard, leaderCoreUrl);
         }
       } catch (InterruptedException e) {
-        log.error("Interrupted while closing BootstrapStatusRunnable", e);
-        Thread.currentThread().interrupt();
+        ParWork.propegateInterrupt(e);
       }
     }
 
@@ -296,7 +294,7 @@ class CdcrReplicatorManager implements CdcrStateManager.CdcrStateObserver {
                   BOOTSTRAP_TIMEOUT_SECONDS - timeOut.timeLeft(TimeUnit.SECONDS), BOOTSTRAP_RETRY_DELAY_MS);
               timeOut.sleep(BOOTSTRAP_RETRY_DELAY_MS);
             } catch (InterruptedException e) {
-              Thread.currentThread().interrupt();
+              ParWork.propegateInterrupt(e);
             }
           } else if (status == BootstrapStatus.COMPLETED) {
             log.info("CDCR bootstrap successful in {} seconds", BOOTSTRAP_TIMEOUT_SECONDS - timeOut.timeLeft(TimeUnit.SECONDS));
@@ -347,7 +345,7 @@ class CdcrReplicatorManager implements CdcrStateManager.CdcrStateObserver {
           }
         }
       } catch (InterruptedException e) {
-        log.info("Bootstrap thread interrupted");
+        ParWork.propegateInterrupt(e);
         state.reportError(CdcrReplicatorState.ErrorType.INTERNAL);
         Thread.currentThread().interrupt();
       } catch (IOException | SolrServerException | SolrException e) {
diff --git a/solr/core/src/java/org/apache/solr/handler/CdcrReplicatorScheduler.java b/solr/core/src/java/org/apache/solr/handler/CdcrReplicatorScheduler.java
index 1418465..d349be4 100644
--- a/solr/core/src/java/org/apache/solr/handler/CdcrReplicatorScheduler.java
+++ b/solr/core/src/java/org/apache/solr/handler/CdcrReplicatorScheduler.java
@@ -16,6 +16,7 @@
  */
 package org.apache.solr.handler;
 
+import org.apache.solr.common.ParWork;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.common.util.ExecutorUtil;
 import org.apache.solr.common.util.SolrNamedThreadFactory;
@@ -103,8 +104,7 @@ class CdcrReplicatorScheduler {
       try {
         replicatorsPool.awaitTermination(60, TimeUnit.SECONDS);
       } catch (InterruptedException e) {
-        log.warn("Thread interrupted while waiting for CDCR replicator threadpool close.");
-        Thread.currentThread().interrupt();
+        ParWork.propegateInterrupt(e);
       } finally {
         scheduler.shutdownNow();
         isStarted = false;
diff --git a/solr/core/src/java/org/apache/solr/handler/CdcrRequestHandler.java b/solr/core/src/java/org/apache/solr/handler/CdcrRequestHandler.java
index 655f388..9772a19 100644
--- a/solr/core/src/java/org/apache/solr/handler/CdcrRequestHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/CdcrRequestHandler.java
@@ -44,6 +44,7 @@ import org.apache.solr.client.solrj.request.QueryRequest;
 import org.apache.solr.client.solrj.request.UpdateRequest;
 import org.apache.solr.cloud.ZkController;
 import org.apache.solr.cloud.ZkShardTerms;
+import org.apache.solr.common.ParWork;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.cloud.ClusterState;
 import org.apache.solr.common.cloud.DocCollection;
@@ -422,7 +423,7 @@ public class CdcrRequestHandler extends RequestHandlerBase implements SolrCoreAw
         }
       }
     } catch (InterruptedException e) {
-      Thread.currentThread().interrupt();
+      ParWork.propegateInterrupt(e);
       throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
           "Error while requesting shard's checkpoints", e);
     } catch (ExecutionException e) {
@@ -530,7 +531,7 @@ public class CdcrRequestHandler extends RequestHandlerBase implements SolrCoreAw
         logReader.next();
         lastProcessedVersion = Math.min(lastProcessedVersion, logReader.getLastVersion());
       } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
+        ParWork.propegateInterrupt(e);
         throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
             "Error while fetching the last processed version", e);
       } catch (IOException e) {
@@ -653,8 +654,7 @@ public class CdcrRequestHandler extends RequestHandlerBase implements SolrCoreAw
           try {
             bootstrapFuture.get();
           } catch (InterruptedException e) {
-            Thread.currentThread().interrupt();
-            log.warn("Bootstrap was interrupted", e);
+            ParWork.propegateInterrupt(e);
           } catch (ExecutionException e) {
             log.error("Bootstrap operation failed", e);
           }
@@ -711,7 +711,7 @@ public class CdcrRequestHandler extends RequestHandlerBase implements SolrCoreAw
           rsp.add(RESPONSE_STATUS, FAILED);
         }
       } catch (InterruptedException e) {
-        // should not happen?
+        ParWork.propegateInterrupt(e);
       } catch (ExecutionException e) {
         rsp.add(RESPONSE_STATUS, FAILED);
         rsp.add(RESPONSE, e);
diff --git a/solr/core/src/java/org/apache/solr/handler/CdcrUpdateLogSynchronizer.java b/solr/core/src/java/org/apache/solr/handler/CdcrUpdateLogSynchronizer.java
index 200357f..c610c5f 100644
--- a/solr/core/src/java/org/apache/solr/handler/CdcrUpdateLogSynchronizer.java
+++ b/solr/core/src/java/org/apache/solr/handler/CdcrUpdateLogSynchronizer.java
@@ -27,6 +27,7 @@ import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.impl.HttpSolrClient;
 import org.apache.solr.client.solrj.request.QueryRequest;
 import org.apache.solr.cloud.ZkController;
+import org.apache.solr.common.ParWork;
 import org.apache.solr.common.cloud.ClusterState;
 import org.apache.solr.common.cloud.DocCollection;
 import org.apache.solr.common.cloud.ZkCoreNodeProps;
@@ -177,8 +178,7 @@ class CdcrUpdateLogSynchronizer implements CdcrStateManager.CdcrStateObserver {
             ulog.getBufferToggle().seek(lastVersion);
           }
         } catch (InterruptedException e) {
-          Thread.currentThread().interrupt();
-          log.warn("Couldn't advance replica buffering tlog reader to {} (to remove old tlogs): {}", lastVersion, e.getMessage());
+          ParWork.propegateInterrupt(e);
         } catch (IOException e) {
           log.warn("Couldn't advance replica buffering tlog reader to {} (to remove old tlogs): {}", lastVersion, e.getMessage());
         }
diff --git a/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java b/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java
index 5e5c67a..79d2db8 100644
--- a/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java
+++ b/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java
@@ -946,7 +946,7 @@ public class IndexFetcher {
         try {
           waitSearcher[0].get();
         } catch (InterruptedException | ExecutionException e) {
-          SolrException.log(log, e);
+          ParWork.propegateInterrupt(e);
         }
       }
       commitPoint = searcher.get().getIndexReader().getIndexCommit();
diff --git a/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java b/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java
index 1721db7..47e948c 100644
--- a/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/SolrConfigHandler.java
@@ -857,10 +857,7 @@ public class SolrConfigHandler extends RequestHandlerBase implements SolrCoreAwa
                 failedList.size(), concurrentTasks.size() + 1, prop, expectedVersion, maxWaitSecs, failedList));
 
     } catch (InterruptedException ie) {
-      log.warn(formatString(
-          "Core  was interrupted . trying to set the property {1} to version {2} to propagate to {3} replicas for collection {4}",
-          prop, expectedVersion, concurrentTasks.size(), collection));
-      Thread.currentThread().interrupt();
+      ParWork.propegateInterrupt(ie);
     } finally {
       ExecutorUtil.shutdownAndAwaitTermination(parallelExecutor);
     }
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
index a61baf1..b126096 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/CollectionsHandler.java
@@ -1408,7 +1408,7 @@ public class CollectionsHandler extends RequestHandlerBase implements Permission
       throw new RuntimeException("Failed while waiting for active collection" + "\n" + e.getMessage() + " \nShards:" + shards + " Replicas:" + totalReplicas + "\nLive Nodes: " + Arrays.toString(liveNodesLastSeen.get().toArray())
               + "\nLast available state: " + state.get());
     } catch (InterruptedException e) {
-      Thread.currentThread().interrupt();
+      ParWork.propegateInterrupt(e);
       throw new SolrException(ErrorCode.SERVER_ERROR, e);
     }
 
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/MetricsHistoryHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/MetricsHistoryHandler.java
index a29c7e5..2b1afb4 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/MetricsHistoryHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/MetricsHistoryHandler.java
@@ -334,7 +334,7 @@ public class MetricsHistoryHandler extends RequestHandlerBase implements Permiss
       log.warn("Could not obtain overseer's address, skipping.", e);
       return null;
     } catch (InterruptedException e) {
-      Thread.currentThread().interrupt();
+      ParWork.propegateInterrupt(e);
       return null;
     } catch (KeeperException e) {
       throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/RequestApplyUpdatesOp.java b/solr/core/src/java/org/apache/solr/handler/admin/RequestApplyUpdatesOp.java
index fbb484d..fd2b685 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/RequestApplyUpdatesOp.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/RequestApplyUpdatesOp.java
@@ -19,6 +19,7 @@ package org.apache.solr.handler.admin;
 
 import java.util.concurrent.Future;
 
+import org.apache.solr.common.ParWork;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.params.CoreAdminParams;
@@ -57,7 +58,7 @@ class RequestApplyUpdatesOp implements CoreAdminHandler.CoreAdminOp {
       it.rsp.add("core", cname);
       it.rsp.add("status", "BUFFER_APPLIED");
     } catch (InterruptedException e) {
-      Thread.currentThread().interrupt();
+      ParWork.propegateInterrupt(e);
       CoreAdminOperation.log().warn("Recovery was interrupted", e);
     } catch (Exception e) {
       if (e instanceof SolrException)
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/ZookeeperInfoHandler.java b/solr/core/src/java/org/apache/solr/handler/admin/ZookeeperInfoHandler.java
index 648971f..65328d0 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/ZookeeperInfoHandler.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/ZookeeperInfoHandler.java
@@ -40,6 +40,7 @@ import java.util.regex.Pattern;
 
 import org.apache.lucene.util.BytesRef;
 import org.apache.solr.cloud.ZkController;
+import org.apache.solr.common.ParWork;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrException.ErrorCode;
 import org.apache.solr.common.cloud.OnReconnect;
@@ -561,8 +562,7 @@ public final class ZookeeperInfoHandler extends RequestHandlerBase {
         writeKeyValue(json, "warning", e.toString(), false);
         log.warn("Keeper Exception", e);
       } catch (InterruptedException e) {
-        writeKeyValue(json, "warning", e.toString(), false);
-        log.warn("InterruptedException", e);
+        ParWork.propegateInterrupt(e);
       }
 
       if (stat.getNumChildren() > 0) {
@@ -594,7 +594,7 @@ public final class ZookeeperInfoHandler extends RequestHandlerBase {
           writeError(500, e.toString());
           return false;
         } catch (InterruptedException e) {
-          writeError(500, e.toString());
+          ParWork.propegateInterrupt(e);
           return false;
         } catch (IllegalArgumentException e) {
           // path doesn't exist (must have been removed)
@@ -768,7 +768,7 @@ public final class ZookeeperInfoHandler extends RequestHandlerBase {
         writeError(500, e.toString());
         return false;
       } catch (InterruptedException e) {
-        writeError(500, e.toString());
+        ParWork.propegateInterrupt(e);
         return false;
       }
       return true;
diff --git a/solr/core/src/java/org/apache/solr/handler/component/CloudReplicaSource.java b/solr/core/src/java/org/apache/solr/handler/component/CloudReplicaSource.java
index 4d3537c..846abe6 100644
--- a/solr/core/src/java/org/apache/solr/handler/component/CloudReplicaSource.java
+++ b/solr/core/src/java/org/apache/solr/handler/component/CloudReplicaSource.java
@@ -29,6 +29,7 @@ import java.util.stream.Collectors;
 
 import org.apache.solr.client.solrj.routing.ReplicaListTransformer;
 import org.apache.solr.client.solrj.util.ClientUtils;
+import org.apache.solr.common.ParWork;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.cloud.ClusterState;
 import org.apache.solr.common.cloud.DocCollection;
@@ -188,6 +189,7 @@ class CloudReplicaSource implements ReplicaSource {
         try {
           shardLeader = zkStateReader.getLeaderRetry(collectionName, sliceName);
         } catch (InterruptedException e) {
+          ParWork.propegateInterrupt(e);
           throw new SolrException(SolrException.ErrorCode.SERVICE_UNAVAILABLE,
               "Exception finding leader for shard " + sliceName + " in collection "
                   + collectionName, e);
diff --git a/solr/core/src/java/org/apache/solr/metrics/SolrMetricManager.java b/solr/core/src/java/org/apache/solr/metrics/SolrMetricManager.java
index 8378943..a0cde3f 100644
--- a/solr/core/src/java/org/apache/solr/metrics/SolrMetricManager.java
+++ b/solr/core/src/java/org/apache/solr/metrics/SolrMetricManager.java
@@ -1012,6 +1012,7 @@ public class SolrMetricManager {
         throw new Exception("Could not obtain lock to modify reporters registry: " + registry);
       }
     } catch (InterruptedException e) {
+      ParWork.propegateInterrupt(e);
       throw new Exception("Interrupted while trying to obtain lock to modify reporters registry: " + registry);
     }
     try {
@@ -1053,6 +1054,7 @@ public class SolrMetricManager {
         return false;
       }
     } catch (InterruptedException e) {
+      ParWork.propegateInterrupt(e);
       log.warn("Interrupted while trying to obtain lock to modify reporters registry: {}", registry);
       return false;
     }
@@ -1151,6 +1153,7 @@ public class SolrMetricManager {
         return Collections.emptyMap();
       }
     } catch (InterruptedException e) {
+      ParWork.propegateInterrupt(e);
       log.warn("Interrupted while trying to obtain lock to modify reporters registry: {}", registry);
       return Collections.emptyMap();
     }
diff --git a/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrClusterReporter.java b/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrClusterReporter.java
index 1b80267..bdc34fc 100644
--- a/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrClusterReporter.java
+++ b/solr/core/src/java/org/apache/solr/metrics/reporters/solr/SolrClusterReporter.java
@@ -31,6 +31,7 @@ import org.apache.http.client.HttpClient;
 import org.apache.solr.cloud.LeaderElector;
 import org.apache.solr.cloud.Overseer;
 import org.apache.solr.cloud.ZkController;
+import org.apache.solr.common.ParWork;
 import org.apache.solr.common.cloud.SolrZkClient;
 import org.apache.solr.common.cloud.ZkNodeProps;
 import org.apache.solr.core.CoreContainer;
@@ -261,7 +262,7 @@ public class SolrClusterReporter extends SolrCoreContainerReporter {
         log.warn("Could not obtain overseer's address, skipping.", e);
         return lastKnownUrl;
       } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
+        ParWork.propegateInterrupt(e);
         return lastKnownUrl;
       }
       if (props == null) {
diff --git a/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java b/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java
index 8bc5181..c93a171 100644
--- a/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java
+++ b/solr/core/src/java/org/apache/solr/pkg/PackageAPI.java
@@ -33,6 +33,7 @@ import org.apache.solr.api.EndPoint;
 import org.apache.solr.api.PayloadObj;
 import org.apache.solr.client.solrj.SolrRequest;
 import org.apache.solr.client.solrj.request.beans.Package;
+import org.apache.solr.common.ParWork;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.annotation.JsonProperty;
 import org.apache.solr.common.cloud.SolrZkClient;
@@ -118,9 +119,7 @@ public class PackageAPI {
             } catch (KeeperException e) {
               log.error("A ZK error has occurred", e);
             } catch (InterruptedException e) {
-              // Restore the interrupted status
-              Thread.currentThread().interrupt();
-              log.warn("Interrupted", e);
+              ParWork.propegateInterrupt(e);
             }
           }
 
@@ -392,6 +391,7 @@ public class PackageAPI {
         try {
           Thread.sleep(10);
         } catch (InterruptedException e) {
+          ParWork.propegateInterrupt(e);
         }
         try {
           pkgs = readPkgsFromZk(null, null);
diff --git a/solr/core/src/java/org/apache/solr/request/PerSegmentSingleValuedFaceting.java b/solr/core/src/java/org/apache/solr/request/PerSegmentSingleValuedFaceting.java
index 4ff769f..cbf82af 100644
--- a/solr/core/src/java/org/apache/solr/request/PerSegmentSingleValuedFaceting.java
+++ b/solr/core/src/java/org/apache/solr/request/PerSegmentSingleValuedFaceting.java
@@ -38,6 +38,7 @@ import org.apache.lucene.util.BytesRefBuilder;
 import org.apache.lucene.util.CharsRefBuilder;
 import org.apache.lucene.util.PriorityQueue;
 import org.apache.lucene.util.UnicodeUtil;
+import org.apache.solr.common.ParWork;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.params.FacetParams;
 import org.apache.solr.common.util.NamedList;
@@ -145,7 +146,7 @@ class PerSegmentSingleValuedFaceting {
           completionService.submit(pending.removeFirst());
         }
       } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
+        ParWork.propegateInterrupt(e);
         throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, e);
       } catch (ExecutionException e) {
         Throwable cause = e.getCause();
diff --git a/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java b/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java
index 88e8c9f..37a6803 100644
--- a/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java
+++ b/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java
@@ -277,7 +277,7 @@ public final class ManagedIndexSchema extends IndexSchema {
     } catch (InterruptedException ie) {
       log.warn("Core {} was interrupted waiting for schema version {} to propagate to {} replicas for collection {}"
           , localCoreNodeName, schemaZkVersion, concurrentTasks.size(), collection);
-      Thread.currentThread().interrupt();
+      ParWork.propegateInterrupt(ie);
     } finally {
       if (!parallelExecutor.isShutdown())
         parallelExecutor.shutdown();
diff --git a/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchemaFactory.java b/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchemaFactory.java
index 33b9d3f..9ee203e 100644
--- a/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchemaFactory.java
+++ b/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchemaFactory.java
@@ -26,6 +26,7 @@ import org.apache.lucene.analysis.util.ResourceLoader;
 import org.apache.solr.cloud.ZkController;
 import org.apache.solr.cloud.ZkSolrResourceLoader;
 import org.apache.solr.common.AlreadyClosedException;
+import org.apache.solr.common.ParWork;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrException.ErrorCode;
 import org.apache.solr.common.cloud.SolrZkClient;
@@ -141,9 +142,7 @@ public class ManagedIndexSchemaFactory extends IndexSchemaFactory implements Sol
         loadedResource = managedSchemaResourceName;
         warnIfNonManagedSchemaExists();
       } catch (InterruptedException e) {
-        // Restore the interrupted status
-        Thread.currentThread().interrupt();
-        log.warn("", e);
+        ParWork.propegateInterrupt(e);
       } catch (KeeperException.NoNodeException e) {
         log.info("The schema is configured as managed, but managed schema resource {} not found - loading non-managed schema {} instead"
             , managedSchemaResourceName, resourceName);
@@ -232,8 +231,7 @@ public class ManagedIndexSchemaFactory extends IndexSchemaFactory implements Sol
         try {
           exists = zkLoader.getZkController().pathExists(nonManagedSchemaPath);
         } catch (InterruptedException e) {
-          Thread.currentThread().interrupt(); // Restore the interrupted status
-          log.warn("", e); // Log as warning and suppress the exception 
+          ParWork.propegateInterrupt(e);
         } catch (KeeperException e) {
           // log as warning and suppress the exception
           log.warn("Error checking for the existence of the non-managed schema {}", resourceName, e);
@@ -419,9 +417,7 @@ public class ManagedIndexSchemaFactory extends IndexSchemaFactory implements Sol
         log.error(msg, e);
         throw new SolrException(ErrorCode.SERVER_ERROR, msg, e);
       } catch (InterruptedException e) {
-        // Restore the interrupted status
-        Thread.currentThread().interrupt();
-        log.warn("", e);
+        ParWork.propegateInterrupt(e);
       }
     } else {
       this.zkIndexSchemaReader = null;
diff --git a/solr/core/src/java/org/apache/solr/schema/ZkIndexSchemaReader.java b/solr/core/src/java/org/apache/solr/schema/ZkIndexSchemaReader.java
index 598bb5e..d727c11 100644
--- a/solr/core/src/java/org/apache/solr/schema/ZkIndexSchemaReader.java
+++ b/solr/core/src/java/org/apache/solr/schema/ZkIndexSchemaReader.java
@@ -20,6 +20,7 @@ import java.lang.invoke.MethodHandles;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.solr.cloud.ZkSolrResourceLoader;
+import org.apache.solr.common.ParWork;
 import org.apache.solr.common.SolrException.ErrorCode;
 import org.apache.solr.common.cloud.OnReconnect;
 import org.apache.solr.common.cloud.SolrZkClient;
@@ -98,9 +99,7 @@ public class ZkIndexSchemaReader implements OnReconnect {
       log.error(msg, e);
       throw new ZooKeeperException(ErrorCode.SERVER_ERROR, msg, e);
     } catch (InterruptedException e) {
-      // Restore the interrupted status
-      Thread.currentThread().interrupt();
-      log.warn("", e);
+      ParWork.propegateInterrupt(e);
     }
     
     return watcher;
@@ -140,9 +139,7 @@ public class ZkIndexSchemaReader implements OnReconnect {
         log.error("", e);
         throw new ZooKeeperException(ErrorCode.SERVER_ERROR, "", e);
       } catch (InterruptedException e) {
-        // Restore the interrupted status
-        Thread.currentThread().interrupt();
-        log.warn("", e);
+        ParWork.propegateInterrupt(e);
       }
     }
 
diff --git a/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java b/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java
index 4ebe37f..c84b25b 100644
--- a/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java
+++ b/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java
@@ -45,6 +45,7 @@ import org.apache.lucene.search.spell.LevenshteinDistance;
 import org.apache.lucene.search.spell.NGramDistance;
 import org.apache.lucene.search.spell.StringDistance;
 import org.apache.lucene.util.BytesRefBuilder;
+import org.apache.solr.common.ParWork;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.request.SolrRequestInfo;
@@ -165,6 +166,7 @@ public abstract class ValueSourceParser implements NamedListInitializedPlugin {
         try {
           Thread.sleep(ms);
         } catch (InterruptedException e) {
+          ParWork.propegateInterrupt(e);
           throw new RuntimeException(e);
         }
         return source;
diff --git a/solr/core/src/java/org/apache/solr/security/AuditLoggerPlugin.java b/solr/core/src/java/org/apache/solr/security/AuditLoggerPlugin.java
index 68082a7..373a3bf 100644
--- a/solr/core/src/java/org/apache/solr/security/AuditLoggerPlugin.java
+++ b/solr/core/src/java/org/apache/solr/security/AuditLoggerPlugin.java
@@ -40,6 +40,7 @@ import com.codahale.metrics.Timer;
 import com.fasterxml.jackson.annotation.JsonInclude.Include;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
+import org.apache.solr.common.ParWork;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.util.ExecutorUtil;
 import org.apache.solr.common.util.SolrNamedThreadFactory;
@@ -175,8 +176,7 @@ public abstract class AuditLoggerPlugin implements Closeable, Runnable, SolrInfo
       try {
         queue.put(event);
       } catch (InterruptedException e) {
-        log.warn("Interrupted while waiting to insert AuditEvent into blocking queue");
-        Thread.currentThread().interrupt();
+        ParWork.propegateInterrupt(e);
       }
     } else {
       if (!queue.offer(event)) {
@@ -205,8 +205,7 @@ public abstract class AuditLoggerPlugin implements Closeable, Runnable, SolrInfo
         numLogged.mark();
         totalTime.inc(timer.stop());
       } catch (InterruptedException e) {
-        log.warn("Interrupted while waiting for next audit log event");
-        Thread.currentThread().interrupt();
+        ParWork.propegateInterrupt(e);
       } catch (Exception ex) {
         log.error("Exception when attempting to audit log asynchronously", ex);
         numErrors.mark();
@@ -338,7 +337,9 @@ public abstract class AuditLoggerPlugin implements Closeable, Runnable, SolrInfo
           }
           Thread.sleep(1000);
           timeSlept ++;
-        } catch (InterruptedException ignored) {}
+        } catch (InterruptedException ignored) {
+          ParWork.propegateInterrupt(ignored);
+        }
       }
     }
   }
diff --git a/solr/core/src/java/org/apache/solr/security/DelegationTokenKerberosFilter.java b/solr/core/src/java/org/apache/solr/security/DelegationTokenKerberosFilter.java
index 0184564..0064766 100644
--- a/solr/core/src/java/org/apache/solr/security/DelegationTokenKerberosFilter.java
+++ b/solr/core/src/java/org/apache/solr/security/DelegationTokenKerberosFilter.java
@@ -42,6 +42,7 @@ import org.apache.hadoop.security.UserGroupInformation;
 import org.apache.hadoop.security.authentication.server.AuthenticationHandler;
 import org.apache.hadoop.security.token.delegation.web.DelegationTokenAuthenticationFilter;
 import org.apache.hadoop.security.token.delegation.web.HttpUserGroupInformation;
+import org.apache.solr.common.ParWork;
 import org.apache.solr.common.cloud.SecurityAwareZkACLProvider;
 import org.apache.solr.common.cloud.SolrZkClient;
 import org.apache.solr.common.cloud.ZkACLProvider;
@@ -72,6 +73,7 @@ public class DelegationTokenKerberosFilter extends DelegationTokenAuthentication
         conf.getServletContext().setAttribute("signer.secret.provider.zookeeper.curator.client",
             getCuratorClient(zkClient));
       } catch (InterruptedException | KeeperException e) {
+        ParWork.propegateInterrupt(e);
         throw new ServletException(e);
       }
     }
diff --git a/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java b/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
index 7d3b33f..d09e6dc 100644
--- a/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
+++ b/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
@@ -387,6 +387,7 @@ public class SolrDispatchFilter extends BaseSolrFilter {
         try {
           init.await();
         } catch (InterruptedException e) { //well, no wait then
+          ParWork.propegateInterrupt(e);
         }
         final String msg = "Error processing the request. CoreContainer is either not initialized or shutting down.";
         if (cores == null || cores.isShutDown()) {
diff --git a/solr/core/src/java/org/apache/solr/store/hdfs/HdfsDirectory.java b/solr/core/src/java/org/apache/solr/store/hdfs/HdfsDirectory.java
index 6efe2cd..a4550ec 100644
--- a/solr/core/src/java/org/apache/solr/store/hdfs/HdfsDirectory.java
+++ b/solr/core/src/java/org/apache/solr/store/hdfs/HdfsDirectory.java
@@ -40,6 +40,7 @@ import org.apache.lucene.store.IOContext;
 import org.apache.lucene.store.IndexInput;
 import org.apache.lucene.store.IndexOutput;
 import org.apache.lucene.store.LockFactory;
+import org.apache.solr.common.ParWork;
 import org.apache.solr.store.blockcache.CustomBufferedIndexInput;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -80,8 +81,8 @@ public class HdfsDirectory extends BaseDirectory {
         try {
           Thread.sleep(5000);
         } catch (InterruptedException e) {
-          Thread.interrupted();
-          // continue
+          ParWork.propegateInterrupt(e);
+          return;
         }
       }
     }
diff --git a/solr/core/src/java/org/apache/solr/store/hdfs/HdfsLockFactory.java b/solr/core/src/java/org/apache/solr/store/hdfs/HdfsLockFactory.java
index c62b5f4..669b01d 100644
--- a/solr/core/src/java/org/apache/solr/store/hdfs/HdfsLockFactory.java
+++ b/solr/core/src/java/org/apache/solr/store/hdfs/HdfsLockFactory.java
@@ -30,6 +30,7 @@ import org.apache.lucene.store.Lock;
 import org.apache.lucene.store.LockFactory;
 import org.apache.lucene.store.LockObtainFailedException;
 import org.apache.lucene.store.LockReleaseFailedException;
+import org.apache.solr.common.ParWork;
 import org.apache.solr.common.util.IOUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -76,7 +77,8 @@ public class HdfsLockFactory extends LockFactory {
           try {
             Thread.sleep(5000);
           } catch (InterruptedException e1) {
-            Thread.interrupted();
+            ParWork.propegateInterrupt(e);
+            break;
           }
           continue;
         }
diff --git a/solr/core/src/java/org/apache/solr/update/DefaultSolrCoreState.java b/solr/core/src/java/org/apache/solr/update/DefaultSolrCoreState.java
index 606f046..7be3229 100644
--- a/solr/core/src/java/org/apache/solr/update/DefaultSolrCoreState.java
+++ b/solr/core/src/java/org/apache/solr/update/DefaultSolrCoreState.java
@@ -400,7 +400,7 @@ public final class DefaultSolrCoreState extends SolrCoreState implements Recover
         try {
           recoveryFuture.get(10, TimeUnit.MINUTES);
         } catch (InterruptedException e) {
-          SolrZkClient.checkInterrupted(e);
+          ParWork.propegateInterrupt(e);
           throw new SolrException(ErrorCode.SERVER_ERROR, e);
         } catch (ExecutionException e) {
           throw new SolrException(ErrorCode.SERVER_ERROR, e);
diff --git a/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java b/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java
index 5738de6..473aa52 100644
--- a/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java
+++ b/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java
@@ -748,7 +748,7 @@ public class DirectUpdateHandler2 extends UpdateHandler implements SolrCoreState
        try {
         waitSearcher[0].get();
       } catch (InterruptedException | ExecutionException e) {
-        SolrException.log(log,e);
+         ParWork.propegateInterrupt(e);
       }
     }
   }
diff --git a/solr/core/src/java/org/apache/solr/update/HdfsUpdateLog.java b/solr/core/src/java/org/apache/solr/update/HdfsUpdateLog.java
index f11101e..2fc394b 100644
--- a/solr/core/src/java/org/apache/solr/update/HdfsUpdateLog.java
+++ b/solr/core/src/java/org/apache/solr/update/HdfsUpdateLog.java
@@ -32,6 +32,7 @@ import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.fs.PathFilter;
 import org.apache.hadoop.ipc.RemoteException;
 import org.apache.lucene.util.BytesRef;
+import org.apache.solr.common.ParWork;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrException.ErrorCode;
 import org.apache.solr.common.util.IOUtils;
@@ -150,7 +151,8 @@ public class HdfsUpdateLog extends UpdateLog {
           try {
             Thread.sleep(5000);
           } catch (InterruptedException e1) {
-            Thread.interrupted();
+            ParWork.propegateInterrupt(e);
+            break;
           }
           continue;
         }
diff --git a/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java b/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java
index 07d366c..fe78166 100644
--- a/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java
+++ b/solr/core/src/java/org/apache/solr/update/SolrCmdDistributor.java
@@ -551,7 +551,7 @@ public class SolrCmdDistributor implements Closeable {
         leaderProps = new ZkCoreNodeProps(zkStateReader.getLeaderRetry(
             collection, shardId));
       } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
+        ParWork.propegateInterrupt(e);
         return false;
       } catch (Exception e) {
         // we retry with same info
diff --git a/solr/core/src/java/org/apache/solr/update/TimedVersionBucket.java b/solr/core/src/java/org/apache/solr/update/TimedVersionBucket.java
index 5a8015b..3f66c1e 100644
--- a/solr/core/src/java/org/apache/solr/update/TimedVersionBucket.java
+++ b/solr/core/src/java/org/apache/solr/update/TimedVersionBucket.java
@@ -22,6 +22,7 @@ import java.util.concurrent.locks.Condition;
 import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 
+import org.apache.solr.common.ParWork;
 import org.apache.solr.common.SolrException;
 
 /** @lucene.internal */
@@ -62,7 +63,7 @@ public class TimedVersionBucket extends VersionBucket {
         condition.awaitNanos(nanosTimeout);
       }
     } catch (InterruptedException e) {
-      Thread.currentThread().interrupt();
+      ParWork.propegateInterrupt(e);
       throw new RuntimeException(e);
     }
   }
@@ -71,7 +72,7 @@ public class TimedVersionBucket extends VersionBucket {
     try {
       return lock.tryLock(lockTimeoutMs, TimeUnit.MILLISECONDS);
     } catch (InterruptedException e) {
-      Thread.currentThread().interrupt();
+      ParWork.propegateInterrupt(e);
       throw new RuntimeException(e);
     }
   }
diff --git a/solr/core/src/java/org/apache/solr/update/UpdateLog.java b/solr/core/src/java/org/apache/solr/update/UpdateLog.java
index a140c47..1569bc7 100644
--- a/solr/core/src/java/org/apache/solr/update/UpdateLog.java
+++ b/solr/core/src/java/org/apache/solr/update/UpdateLog.java
@@ -1336,7 +1336,7 @@ public class UpdateLog implements PluginInfoInitialized, SolrMetricProducer {
     } catch (IOException e) {
       log.error("Exception reading versions from log",e);
     } catch (InterruptedException e) {
-      log.warn("Exception reading log", e);
+      ParWork.propegateInterrupt(e);
     } finally {
       if (logReader != null) logReader.close();
     }
@@ -2037,7 +2037,7 @@ public class UpdateLog implements PluginInfoInitialized, SolrMetricProducer {
       } catch (TimeoutException e) {
         throw new SolrException(ErrorCode.SERVER_ERROR, e);
       } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
+        ParWork.propegateInterrupt(e);
         throw new SolrException(ErrorCode.SERVER_ERROR, e);
       }
 
diff --git a/solr/core/src/java/org/apache/solr/update/VersionBucket.java b/solr/core/src/java/org/apache/solr/update/VersionBucket.java
index 1599c6c..1939aec 100644
--- a/solr/core/src/java/org/apache/solr/update/VersionBucket.java
+++ b/solr/core/src/java/org/apache/solr/update/VersionBucket.java
@@ -16,6 +16,8 @@
  */
 package org.apache.solr.update;
 
+import org.apache.solr.common.ParWork;
+
 import java.io.IOException;
 import java.util.concurrent.TimeUnit;
 
@@ -68,6 +70,7 @@ public class VersionBucket {
         wait(millis);
       }
     } catch (InterruptedException e) {
+      ParWork.propegateInterrupt(e);
       throw new RuntimeException(e);
     }
   }
diff --git a/solr/core/src/java/org/apache/solr/update/processor/DistributedZkUpdateProcessor.java b/solr/core/src/java/org/apache/solr/update/processor/DistributedZkUpdateProcessor.java
index 9945f71..815e055 100644
--- a/solr/core/src/java/org/apache/solr/update/processor/DistributedZkUpdateProcessor.java
+++ b/solr/core/src/java/org/apache/solr/update/processor/DistributedZkUpdateProcessor.java
@@ -191,8 +191,7 @@ public class DistributedZkUpdateProcessor extends DistributedUpdateProcessor {
       try {
         leaderReplica = zkController.getZkStateReader().getLeaderRetry(collection, cloudDesc.getShardId());
       } catch (InterruptedException e) {
-        log.error("processCommit(CommitUpdateCommand=" + cmd + ")", e);
-
+        ParWork.propegateInterrupt(e);
         throw new SolrException(ErrorCode.SERVER_ERROR, "Exception finding leader for shard " + cloudDesc.getShardId(), e);
 
       }
@@ -465,6 +464,7 @@ public class DistributedZkUpdateProcessor extends DistributedUpdateProcessor {
         try {
           leader = zkController.getZkStateReader().getLeaderRetry(collection, sliceName);
         } catch (InterruptedException e) {
+          ParWork.propegateInterrupt(e);
           throw new SolrException(SolrException.ErrorCode.SERVICE_UNAVAILABLE, "Exception finding leader for shard " + sliceName, e);
         }
 
@@ -552,7 +552,7 @@ public class DistributedZkUpdateProcessor extends DistributedUpdateProcessor {
         }
       }
     } catch (InterruptedException e) {
-      Thread.currentThread().interrupt();
+      ParWork.propegateInterrupt(e);
       throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR, "", e);
     }
     if (leaderLogic) {
@@ -603,7 +603,7 @@ public class DistributedZkUpdateProcessor extends DistributedUpdateProcessor {
         }
       }
     } catch (InterruptedException e) {
-      Thread.currentThread().interrupt();
+      ParWork.propegateInterrupt(e);
       throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR, "", e);
     }
 
@@ -631,6 +631,7 @@ public class DistributedZkUpdateProcessor extends DistributedUpdateProcessor {
     try {
       return zkController.getZkStateReader().getLeaderRetry(collection, cloudDesc.getShardId()).getCoreUrl();
     } catch (InterruptedException e) {
+      ParWork.propegateInterrupt(e);
       throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "Exception during fetching from leader.", e);
     }
   }
@@ -773,7 +774,7 @@ public class DistributedZkUpdateProcessor extends DistributedUpdateProcessor {
       }
 
     } catch (InterruptedException e) {
-      Thread.currentThread().interrupt();
+      ParWork.propegateInterrupt(e);
       throw new ZooKeeperException(SolrException.ErrorCode.SERVER_ERROR, "", e);
     }
   }
@@ -1019,7 +1020,7 @@ public class DistributedZkUpdateProcessor extends DistributedUpdateProcessor {
                     }
                   }
                 } catch (InterruptedException e) {
-                  Thread.currentThread().interrupt();
+                  ParWork.propegateInterrupt(e);
                 }
               }
             }
@@ -1073,7 +1074,7 @@ public class DistributedZkUpdateProcessor extends DistributedUpdateProcessor {
       try {
         Thread.sleep(500);
       } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
+        ParWork.propegateInterrupt(e);
       }
     }
 
diff --git a/solr/core/src/java/org/apache/solr/util/ConcurrentLRUCache.java b/solr/core/src/java/org/apache/solr/util/ConcurrentLRUCache.java
index e8107d8..d100dd8 100644
--- a/solr/core/src/java/org/apache/solr/util/ConcurrentLRUCache.java
+++ b/solr/core/src/java/org/apache/solr/util/ConcurrentLRUCache.java
@@ -18,6 +18,7 @@ package org.apache.solr.util;
 import org.apache.lucene.util.Accountable;
 import org.apache.lucene.util.PriorityQueue;
 import org.apache.lucene.util.RamUsageEstimator;
+import org.apache.solr.common.ParWork;
 import org.apache.solr.common.util.Cache;
 import org.apache.solr.common.util.TimeSource;
 
@@ -877,7 +878,9 @@ public class ConcurrentLRUCache<K,V> implements Cache<K,V>, Accountable {
           long waitTimeMs =  c.maxIdleTimeNs != Long.MAX_VALUE ? TimeUnit.MILLISECONDS.convert(c.maxIdleTimeNs, TimeUnit.NANOSECONDS) : 0L;
           try {
             this.wait(waitTimeMs);
-          } catch (InterruptedException e) {}
+          } catch (InterruptedException e) {
+            ParWork.propegateInterrupt(e);
+          }
         }
         if (stop) break;
         c = cache.get();
diff --git a/solr/core/src/java/org/apache/solr/util/ExportTool.java b/solr/core/src/java/org/apache/solr/util/ExportTool.java
index cc18d20..28071c8 100644
--- a/solr/core/src/java/org/apache/solr/util/ExportTool.java
+++ b/solr/core/src/java/org/apache/solr/util/ExportTool.java
@@ -471,6 +471,7 @@ public class ExportTool extends SolrCLI.ToolBase {
           try {
             doc = queue.poll(30, TimeUnit.SECONDS);
           } catch (InterruptedException e) {
+            ParWork.propegateInterrupt(e);
             if (output != null) output.println("Consumer interrupted");
             failed = true;
             break;
@@ -517,6 +518,7 @@ public class ExportTool extends SolrCLI.ToolBase {
               queue.offer(doc, 10, TimeUnit.SECONDS);
               receivedDocs.incrementAndGet();
             } catch (InterruptedException e) {
+              ParWork.propegateInterrupt(e);
               failed = true;
               if (output != null) output.println("Failed to write docs from" + e.getMessage());
             }
diff --git a/solr/core/src/java/org/apache/solr/util/FSHDFSUtils.java b/solr/core/src/java/org/apache/solr/util/FSHDFSUtils.java
index d5a9b6d..591fcdd 100644
--- a/solr/core/src/java/org/apache/solr/util/FSHDFSUtils.java
+++ b/solr/core/src/java/org/apache/solr/util/FSHDFSUtils.java
@@ -27,6 +27,7 @@ import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.hdfs.DistributedFileSystem;
+import org.apache.solr.common.ParWork;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -120,6 +121,7 @@ public class FSHDFSUtils {
           }
         }
       } catch (InterruptedException ie) {
+        ParWork.propegateInterrupt(ie);
         InterruptedIOException iioe = new InterruptedIOException();
         iioe.initCause(ie);
         throw iioe;
diff --git a/solr/core/src/java/org/apache/solr/util/FileUtils.java b/solr/core/src/java/org/apache/solr/util/FileUtils.java
index 5e7d84a..4e649c6 100644
--- a/solr/core/src/java/org/apache/solr/util/FileUtils.java
+++ b/solr/core/src/java/org/apache/solr/util/FileUtils.java
@@ -27,6 +27,7 @@ import java.nio.file.Files;
 import java.nio.file.Path;
 
 import org.apache.commons.io.FileExistsException;
+import org.apache.solr.common.ParWork;
 
 /**
  *
@@ -80,7 +81,8 @@ public class FileUtils {
           // Pause 5 msec
           Thread.sleep(5);
         } catch (InterruptedException ie) {
-          Thread.currentThread().interrupt();
+          ParWork.propegateInterrupt(ie);
+          break;
         }
       }
     }
diff --git a/solr/core/src/java/org/apache/solr/util/SimplePostTool.java b/solr/core/src/java/org/apache/solr/util/SimplePostTool.java
index c52aba5..ce4254e 100644
--- a/solr/core/src/java/org/apache/solr/util/SimplePostTool.java
+++ b/solr/core/src/java/org/apache/solr/util/SimplePostTool.java
@@ -541,6 +541,7 @@ public class SimplePostTool {
         Thread.sleep(delay * 1000);
         filesPosted++;
       } catch (InterruptedException e) {
+        Thread.currentThread().interrupt();
         throw new RuntimeException(e);
       }
     }
@@ -655,6 +656,7 @@ public class SimplePostTool {
       } catch (IOException e) {
         warn("Caught exception when trying to open connection to "+u+": "+e.getMessage());
       } catch (InterruptedException e) {
+        Thread.currentThread().interrupt();
         throw new RuntimeException(e);
       }
     }
diff --git a/solr/core/src/java/org/apache/solr/util/SolrCLI.java b/solr/core/src/java/org/apache/solr/util/SolrCLI.java
index 9b7a575..3a9df10 100755
--- a/solr/core/src/java/org/apache/solr/util/SolrCLI.java
+++ b/solr/core/src/java/org/apache/solr/util/SolrCLI.java
@@ -686,7 +686,7 @@ public class SolrCLI implements CLIO {
                 , getUrl, exc.getMessage());
           try {
             Thread.sleep(10);
-          } catch (InterruptedException ie) { Thread.interrupted(); }
+          } catch (InterruptedException ie) { Thread.currentThread().interrupt(); throw new RuntimeException(exc);}
 
           // retry using recursion with one-less attempt available
           json = getJson(httpClient, getUrl, attempts, false);
@@ -1313,7 +1313,8 @@ public class SolrCLI implements CLIO {
           try {
             Thread.sleep(2000L);
           } catch (InterruptedException interrupted) {
-            timeout = 0; // stop looping
+            ParWork.propegateInterrupt(interrupted);
+            break;
           }
         }
       }
@@ -3424,7 +3425,8 @@ public class SolrCLI implements CLIO {
           try {
             Thread.sleep(2000);
           } catch (InterruptedException ie) {
-            Thread.interrupted();
+            ParWork.propegateInterrupt(ie);
+            return;
           }
           liveNodes = cloudClient.getZkStateReader().getClusterState().getLiveNodes();
           numLiveNodes = (liveNodes != null) ? liveNodes.size() : 0;
@@ -3522,8 +3524,7 @@ public class SolrCLI implements CLIO {
         try {
           handler.waitFor(3000);
         } catch (InterruptedException ie) {
-          // safe to ignore ...
-          Thread.interrupted();
+          ParWork.propegateInterrupt(ie);
         }
         if (handler.hasResult() && handler.getExitValue() != 0) {
           throw new Exception("Failed to start Solr using command: "+startCmd+" Exception : "+handler.getException());
@@ -4020,6 +4021,7 @@ public class SolrCLI implements CLIO {
             log.debug("Solr still up. Waiting before trying again to see if it was stopped");
             Thread.sleep(1000L);
           } catch (InterruptedException interrupted) {
+            ParWork.propegateInterrupt(interrupted);
             timeout = 0; // stop looping
           }
         } catch (Exception se) {
diff --git a/solr/core/src/java/org/apache/solr/util/TestInjection.java b/solr/core/src/java/org/apache/solr/util/TestInjection.java
index 88242ce..a4a3148 100644
--- a/solr/core/src/java/org/apache/solr/util/TestInjection.java
+++ b/solr/core/src/java/org/apache/solr/util/TestInjection.java
@@ -240,7 +240,7 @@ public class TestInjection {
         try {
           Thread.sleep(delay * 1000);
         } catch (InterruptedException e) {
-          Thread.currentThread().interrupt();
+          ParWork.propegateInterrupt(e);
         }
       }
     }
@@ -274,7 +274,7 @@ public class TestInjection {
                 Random taskRand = random();
                 Thread.sleep(taskRand.nextInt(1000));
               } catch (InterruptedException e) {
-              
+                ParWork.propegateInterrupt(e);
               }
               
               cthread.interrupt();
@@ -367,7 +367,7 @@ public class TestInjection {
         try {
           Thread.sleep(rndTime);
         } catch (InterruptedException e) {
-          Thread.currentThread().interrupt();
+          ParWork.propegateInterrupt(e);
         }
       }
     }
@@ -395,7 +395,7 @@ public class TestInjection {
         try {
           Thread.sleep(rndTime);
         } catch (InterruptedException e) {
-          Thread.currentThread().interrupt();
+          ParWork.propegateInterrupt(e);
         }
       }
     }
@@ -419,7 +419,7 @@ public class TestInjection {
         try {
           notifyPauseForeverDone.await();
         } catch (InterruptedException e) {
-          Thread.currentThread().interrupt();
+          ParWork.propegateInterrupt(e);
         }
       } else {
         countPrepRecoveryOpPauseForever.set(0);
@@ -459,7 +459,7 @@ public class TestInjection {
         log.info("Waiting in ReplicaMutator for up to 60s");
         return splitLatch.await(60, TimeUnit.SECONDS);
       } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
+        ParWork.propegateInterrupt(e);
       }
     }
     return true;
@@ -471,7 +471,7 @@ public class TestInjection {
         log.info("Waiting in DirectUpdateHandler2 for up to 60s");
         return directUpdateLatch.await(60, TimeUnit.SECONDS);
       } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
+        ParWork.propegateInterrupt(e);
       }
     }
     return true;
@@ -500,7 +500,7 @@ public class TestInjection {
         log.info("Waiting in ReindexCollectionCmd for up to 60s");
         return reindexLatch.await(60, TimeUnit.SECONDS);
       } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
+        ParWork.propegateInterrupt(e);
       }
     }
     return true;
@@ -526,7 +526,7 @@ public class TestInjection {
         log.info("Pausing IndexFetcher for {}ms", delayBeforeSlaveCommitRefresh);
         Thread.sleep(delayBeforeSlaveCommitRefresh);
       } catch (InterruptedException e) {
-        Thread.currentThread().interrupt();
+        ParWork.propegateInterrupt(e);
       }
     }
     return true;