Jelajahi Sumber

fix #643 ThumbnailManager manages destroy process for generators

Shinsuke Sugaya 9 tahun lalu
induk
melakukan
f0bbebc5af

+ 1 - 0
src/main/java/org/codelibs/fess/thumbnail/ThumbnailGenerator.java

@@ -26,4 +26,5 @@ public interface ThumbnailGenerator {
 
     boolean isAvailable();
 
+    void destroy();
 }

+ 18 - 4
src/main/java/org/codelibs/fess/thumbnail/ThumbnailManager.java

@@ -107,10 +107,12 @@ public class ThumbnailManager {
             while (generating) {
                 try {
                     thumbnailTaskQueue.take().generate();
-                } catch (final InterruptedException e1) {
-                    logger.debug("Interupted task.", e1);
-                } catch (final Exception e2) {
-                    logger.warn("Failed to generage a thumbnail.", e2);
+                } catch (final InterruptedException e) {
+                    logger.debug("Interupted task.", e);
+                } catch (final Exception e) {
+                    if (generating) {
+                        logger.warn("Failed to generage a thumbnail.", e);
+                    }
                 }
             }
         }, "ThumbnailGenerator");
@@ -121,6 +123,18 @@ public class ThumbnailManager {
     public void destroy() {
         generating = false;
         thumbnailGeneratorThread.interrupt();
+        try {
+            thumbnailGeneratorThread.join(10000);
+        } catch (InterruptedException e) {
+            logger.warn("Thumbnail thread is timeouted.", e);
+        }
+        generatorList.forEach(g -> {
+            try {
+                g.destroy();
+            } catch (final Exception e) {
+                logger.warn("Failed to stop thumbnail generator.", e);
+            }
+        });
     }
 
     public void generate(final Map<String, Object> docMap) {

+ 0 - 2
src/main/java/org/codelibs/fess/thumbnail/impl/CommandGenerator.java

@@ -25,7 +25,6 @@ import java.util.Timer;
 import java.util.TimerTask;
 
 import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
 
 import org.apache.commons.io.IOUtils;
 import org.slf4j.Logger;
@@ -50,7 +49,6 @@ public class CommandGenerator extends BaseThumbnailGenerator {
         destoryTimer = new Timer("CommandGeneratorDestoryTimer-" + System.currentTimeMillis(), true);
     }
 
-    @PreDestroy
     public void destroy() {
         destoryTimer.cancel();
         destoryTimer = null;

+ 0 - 2
src/main/java/org/codelibs/fess/thumbnail/impl/WebDriverGenerator.java

@@ -23,7 +23,6 @@ import java.io.IOException;
 import java.util.Collection;
 
 import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
 import javax.imageio.ImageIO;
 
 import org.codelibs.fess.util.ComponentUtil;
@@ -90,7 +89,6 @@ public class WebDriverGenerator extends BaseThumbnailGenerator {
         }
     }
 
-    @PreDestroy
     public void destroy() {
         if (webDriver != null) {
             webDriver.quit();