fix #2300 add timeout
This commit is contained in:
parent
aa2b552634
commit
4db8436d7d
4 changed files with 37 additions and 1 deletions
|
@ -31,6 +31,7 @@ import javax.servlet.ServletContext;
|
|||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.SystemUtils;
|
||||
import org.codelibs.core.lang.StringUtil;
|
||||
import org.codelibs.core.timer.TimeoutTask;
|
||||
import org.codelibs.fess.Constants;
|
||||
import org.codelibs.fess.es.config.exbhv.ScheduledJobBhv;
|
||||
import org.codelibs.fess.exception.JobProcessingException;
|
||||
|
@ -154,11 +155,16 @@ public class CrawlJob extends ExecJob {
|
|||
jobExecutor.addShutdownListener(() -> ComponentUtil.getProcessHelper().destroyProcess(sessionId));
|
||||
}
|
||||
|
||||
final TimeoutTask timeoutTask = createTimeoutTask();
|
||||
try {
|
||||
executeCrawler();
|
||||
ComponentUtil.getKeyMatchHelper().update();
|
||||
} catch (final Exception e) {
|
||||
throw new JobProcessingException("Failed to execute a crawl job.", e);
|
||||
} finally {
|
||||
if (timeoutTask != null && !timeoutTask.isCanceled()) {
|
||||
timeoutTask.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
return resultBuf.toString();
|
||||
|
|
|
@ -21,6 +21,8 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.codelibs.core.timer.TimeoutManager;
|
||||
import org.codelibs.core.timer.TimeoutTask;
|
||||
import org.codelibs.fess.util.ComponentUtil;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
@ -43,6 +45,8 @@ public abstract class ExecJob {
|
|||
|
||||
protected String lastaEnv;
|
||||
|
||||
protected int timeout = -1; // sec
|
||||
|
||||
public abstract String execute();
|
||||
|
||||
protected abstract String getExecuteType();
|
||||
|
@ -67,6 +71,11 @@ public abstract class ExecJob {
|
|||
return this;
|
||||
}
|
||||
|
||||
public ExecJob timeout(final int timeout) {
|
||||
this.timeout = timeout;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ExecJob useLocalElasticsearch(final boolean useLocalElasticsearch) {
|
||||
this.useLocalElasticsearch = useLocalElasticsearch;
|
||||
return this;
|
||||
|
@ -121,7 +130,7 @@ public abstract class ExecJob {
|
|||
return;
|
||||
}
|
||||
if (!FileUtils.deleteQuietly(ownTmpDir)) {
|
||||
logger.warn("Could not delete a temp dir: " + ownTmpDir.getAbsolutePath());
|
||||
logger.warn("Could not delete a temp dir: {}", ownTmpDir.getAbsolutePath());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -136,4 +145,13 @@ public abstract class ExecJob {
|
|||
}
|
||||
}
|
||||
|
||||
protected TimeoutTask createTimeoutTask() {
|
||||
if (timeout <= 0) {
|
||||
return null;
|
||||
}
|
||||
return TimeoutManager.getInstance().addTimeoutTarget(() -> {
|
||||
logger.warn("Process is terminated due to {}ms exceeded.", timeout);
|
||||
ComponentUtil.getProcessHelper().destroyProcess(sessionId);
|
||||
}, timeout, false);
|
||||
}
|
||||
}
|
|
@ -28,6 +28,7 @@ import javax.servlet.ServletContext;
|
|||
import org.apache.commons.lang3.RandomStringUtils;
|
||||
import org.apache.commons.lang3.SystemUtils;
|
||||
import org.codelibs.core.lang.StringUtil;
|
||||
import org.codelibs.core.timer.TimeoutTask;
|
||||
import org.codelibs.fess.Constants;
|
||||
import org.codelibs.fess.exception.JobProcessingException;
|
||||
import org.codelibs.fess.exec.ThumbnailGenerator;
|
||||
|
@ -75,11 +76,16 @@ public class GenerateThumbnailJob extends ExecJob {
|
|||
jobExecutor.addShutdownListener(() -> ComponentUtil.getProcessHelper().destroyProcess(sessionId));
|
||||
}
|
||||
|
||||
final TimeoutTask timeoutTask = createTimeoutTask();
|
||||
try {
|
||||
executeThumbnailGenerator();
|
||||
} catch (final Exception e) {
|
||||
logger.warn("Failed to generate thumbnails.", e);
|
||||
resultBuf.append(e.getMessage()).append("\n");
|
||||
} finally {
|
||||
if (timeoutTask != null && !timeoutTask.isCanceled()) {
|
||||
timeoutTask.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
return resultBuf.toString();
|
||||
|
|
|
@ -28,6 +28,7 @@ import javax.servlet.ServletContext;
|
|||
import org.apache.commons.lang3.RandomStringUtils;
|
||||
import org.apache.commons.lang3.SystemUtils;
|
||||
import org.codelibs.core.lang.StringUtil;
|
||||
import org.codelibs.core.timer.TimeoutTask;
|
||||
import org.codelibs.fess.Constants;
|
||||
import org.codelibs.fess.exception.JobProcessingException;
|
||||
import org.codelibs.fess.exec.SuggestCreator;
|
||||
|
@ -62,11 +63,16 @@ public class SuggestJob extends ExecJob {
|
|||
jobExecutor.addShutdownListener(() -> ComponentUtil.getProcessHelper().destroyProcess(sessionId));
|
||||
}
|
||||
|
||||
final TimeoutTask timeoutTask = createTimeoutTask();
|
||||
try {
|
||||
executeSuggestCreator();
|
||||
} catch (final Exception e) {
|
||||
logger.warn("Failed to create suggest data.", e);
|
||||
resultBuf.append(e.getMessage()).append("\n");
|
||||
} finally {
|
||||
if (timeoutTask != null && !timeoutTask.isCanceled()) {
|
||||
timeoutTask.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
return resultBuf.toString();
|
||||
|
|
Loading…
Add table
Reference in a new issue