synchronize process builder
This commit is contained in:
parent
b04227304f
commit
9b6d0e5248
6 changed files with 31 additions and 28 deletions
|
@ -194,7 +194,7 @@ public class AdminSearchlistAction extends FessAdminAction {
|
|||
verifyToken(() -> asListHtml());
|
||||
validate(form, messages -> {}, () -> asListHtml());
|
||||
final String docId = form.docId;
|
||||
if (jobHelper.isCrawlProcessRunning()) {
|
||||
if (jobHelper.isProcessRunning()) {
|
||||
throwValidationError(messages -> messages.addErrorsCannotDeleteDocBecauseOfRunning(GLOBAL), () -> asListHtml());
|
||||
}
|
||||
try {
|
||||
|
@ -211,7 +211,7 @@ public class AdminSearchlistAction extends FessAdminAction {
|
|||
public HtmlResponse deleteall(final ListForm form) {
|
||||
verifyToken(() -> asListHtml());
|
||||
validate(form, messages -> {}, () -> asListHtml());
|
||||
if (jobHelper.isCrawlProcessRunning()) {
|
||||
if (jobHelper.isProcessRunning()) {
|
||||
throwValidationError(messages -> messages.addErrorsCannotDeleteDocBecauseOfRunning(GLOBAL), () -> asListHtml());
|
||||
}
|
||||
try {
|
||||
|
@ -227,7 +227,7 @@ public class AdminSearchlistAction extends FessAdminAction {
|
|||
}
|
||||
|
||||
public boolean isSolrProcessRunning() {
|
||||
return jobHelper.isCrawlProcessRunning();
|
||||
return jobHelper.isProcessRunning();
|
||||
}
|
||||
|
||||
// ===================================================================================
|
||||
|
|
|
@ -289,7 +289,7 @@ public class AdminWizardAction extends FessAdminAction {
|
|||
@Execute
|
||||
public HtmlResponse startCrawling(final StartCrawlingForm form) {
|
||||
verifyToken(() -> asIndexHtml());
|
||||
if (!jobHelper.isCrawlProcessRunning()) {
|
||||
if (!jobHelper.isProcessRunning()) {
|
||||
final List<ScheduledJob> scheduledJobList = scheduledJobService.getCrawlerJobList();
|
||||
for (final ScheduledJob scheduledJob : scheduledJobList) {
|
||||
new Thread(() -> new TriggeredJob().execute(scheduledJob)).start();
|
||||
|
|
|
@ -16,10 +16,12 @@
|
|||
package org.codelibs.fess.helper;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.CountDownLatch;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import javax.annotation.PreDestroy;
|
||||
|
||||
|
@ -41,32 +43,34 @@ public class JobHelper {
|
|||
@PreDestroy
|
||||
public void destroy() {
|
||||
for (final String sessionId : runningProcessMap.keySet()) {
|
||||
destroyCrawlerProcess(sessionId);
|
||||
destroyProcess(sessionId);
|
||||
}
|
||||
}
|
||||
|
||||
public JobProcess startCrawlerProcess(final String sessionId, final ProcessBuilder processBuilder) {
|
||||
destroyCrawlerProcess(sessionId);
|
||||
public synchronized JobProcess startProcess(String sessionId, List<String> cmdList, Consumer<ProcessBuilder> pbCall) {
|
||||
ProcessBuilder pb = new ProcessBuilder(cmdList);
|
||||
pbCall.accept(pb);
|
||||
destroyProcess(sessionId);
|
||||
JobProcess jobProcess;
|
||||
try {
|
||||
jobProcess = new JobProcess(processBuilder.start());
|
||||
destroyCrawlerProcess(runningProcessMap.putIfAbsent(sessionId, jobProcess));
|
||||
jobProcess = new JobProcess(pb.start());
|
||||
destroyProcess(runningProcessMap.putIfAbsent(sessionId, jobProcess));
|
||||
return jobProcess;
|
||||
} catch (final IOException e) {
|
||||
throw new FessSystemException("Crawler Process terminated.", e);
|
||||
}
|
||||
}
|
||||
|
||||
public void destroyCrawlerProcess(final String sessionId) {
|
||||
public void destroyProcess(final String sessionId) {
|
||||
final JobProcess jobProcess = runningProcessMap.remove(sessionId);
|
||||
destroyCrawlerProcess(jobProcess);
|
||||
destroyProcess(jobProcess);
|
||||
}
|
||||
|
||||
public boolean isCrawlProcessRunning() {
|
||||
public boolean isProcessRunning() {
|
||||
return !runningProcessMap.isEmpty();
|
||||
}
|
||||
|
||||
protected void destroyCrawlerProcess(final JobProcess jobProcess) {
|
||||
protected void destroyProcess(final JobProcess jobProcess) {
|
||||
if (jobProcess != null) {
|
||||
final InputStreamThread ist = jobProcess.getInputStreamThread();
|
||||
try {
|
||||
|
@ -124,4 +128,5 @@ public class JobHelper {
|
|||
public JobExecutor getJobExecutoer(final String id) {
|
||||
return runningJobExecutorMap.get(id);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -208,7 +208,7 @@ public class CrawlJob {
|
|||
}
|
||||
|
||||
if (jobExecutor != null) {
|
||||
jobExecutor.addShutdownListener(() -> ComponentUtil.getJobHelper().destroyCrawlerProcess(sessionId));
|
||||
jobExecutor.addShutdownListener(() -> ComponentUtil.getJobHelper().destroyProcess(sessionId));
|
||||
}
|
||||
|
||||
try {
|
||||
|
@ -350,12 +350,11 @@ public class CrawlJob {
|
|||
logger.info("Crawler: \nDirectory=" + baseDir + "\nOptions=" + cmdList);
|
||||
}
|
||||
|
||||
final ProcessBuilder pb = new ProcessBuilder(cmdList);
|
||||
pb.directory(baseDir);
|
||||
pb.redirectErrorStream(true);
|
||||
|
||||
try {
|
||||
final JobProcess jobProcess = jobHelper.startCrawlerProcess(sessionId, pb);
|
||||
final JobProcess jobProcess = jobHelper.startProcess(sessionId, cmdList, pb -> {
|
||||
pb.directory(baseDir);
|
||||
pb.redirectErrorStream(true);
|
||||
});
|
||||
|
||||
final InputStreamThread it = jobProcess.getInputStreamThread();
|
||||
it.start();
|
||||
|
@ -380,7 +379,7 @@ public class CrawlJob {
|
|||
throw new FessSystemException("Crawler Process terminated.", e);
|
||||
} finally {
|
||||
try {
|
||||
jobHelper.destroyCrawlerProcess(sessionId);
|
||||
jobHelper.destroyProcess(sessionId);
|
||||
} finally {
|
||||
deleteTempDir(ownTmpDir);
|
||||
}
|
||||
|
|
|
@ -81,7 +81,7 @@ public class JobScheduler {
|
|||
public void destroy() {
|
||||
final JobHelper jobHelper = ComponentUtil.getJobHelper();
|
||||
for (final String sessionId : jobHelper.getRunningSessionIdSet()) {
|
||||
jobHelper.destroyCrawlerProcess(sessionId);
|
||||
jobHelper.destroyProcess(sessionId);
|
||||
}
|
||||
try {
|
||||
scheduler.shutdown(true);
|
||||
|
|
|
@ -102,7 +102,7 @@ public class SuggestJob {
|
|||
}
|
||||
resultBuf.append("Session Id: ").append(sessionId).append("\n");
|
||||
if (jobExecutor != null) {
|
||||
jobExecutor.addShutdownListener(() -> ComponentUtil.getJobHelper().destroyCrawlerProcess(sessionId));
|
||||
jobExecutor.addShutdownListener(() -> ComponentUtil.getJobHelper().destroyProcess(sessionId));
|
||||
}
|
||||
|
||||
try {
|
||||
|
@ -224,12 +224,11 @@ public class SuggestJob {
|
|||
logger.info("SuggestCreator: \nDirectory=" + baseDir + "\nOptions=" + cmdList);
|
||||
}
|
||||
|
||||
final ProcessBuilder pb = new ProcessBuilder(cmdList);
|
||||
pb.directory(baseDir);
|
||||
pb.redirectErrorStream(true);
|
||||
|
||||
try {
|
||||
final JobProcess jobProcess = jobHelper.startCrawlerProcess(sessionId, pb);
|
||||
final JobProcess jobProcess = jobHelper.startProcess(sessionId, cmdList, pb -> {
|
||||
pb.directory(baseDir);
|
||||
pb.redirectErrorStream(true);
|
||||
});
|
||||
|
||||
final InputStreamThread it = jobProcess.getInputStreamThread();
|
||||
it.start();
|
||||
|
@ -254,7 +253,7 @@ public class SuggestJob {
|
|||
throw new FessSystemException("SuggestCreator Process terminated.", e);
|
||||
} finally {
|
||||
try {
|
||||
jobHelper.destroyCrawlerProcess(sessionId);
|
||||
jobHelper.destroyProcess(sessionId);
|
||||
} finally {
|
||||
deleteTempDir(ownTmpDir);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue