diff --git a/exist-core/src/main/java/org/exist/storage/blob/BlobStoreImpl.java b/exist-core/src/main/java/org/exist/storage/blob/BlobStoreImpl.java index 4cf9ec48bac..6a37db74221 100644 --- a/exist-core/src/main/java/org/exist/storage/blob/BlobStoreImpl.java +++ b/exist-core/src/main/java/org/exist/storage/blob/BlobStoreImpl.java @@ -447,13 +447,21 @@ private void normalClose() throws IOException { if (persistentWriter != null) { persistQueue.put(PersistentWriter.POISON_PILL); } - persistentWriterThread.join(); + persistentWriterThread.join(30_000); + if (persistentWriterThread.isAlive()) { + LOG.warn("BlobStore PersistentWriter did not terminate within 30s, interrupting"); + persistentWriterThread.interrupt(); + persistentWriterThread.join(5_000); + } // shutdown the vacuum if (blobVacuum != null) { blobVacuumThread.interrupt(); } - blobVacuumThread.join(); + blobVacuumThread.join(30_000); + if (blobVacuumThread.isAlive()) { + LOG.warn("BlobStore BlobVacuum did not terminate within 30s"); + } } catch (final InterruptedException e) { // Restore the interrupted status Thread.currentThread().interrupt(); @@ -523,7 +531,10 @@ private void abnormalPersistentWriterShutdown() { if (blobVacuum != null) { blobVacuumThread.interrupt(); } - blobVacuumThread.join(); + blobVacuumThread.join(30_000); + if (blobVacuumThread.isAlive()) { + LOG.warn("BlobStore BlobVacuum did not terminate within 30s during abnormal shutdown"); + } } catch (final InterruptedException e) { // Restore the interrupted status