You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-commits@lucene.apache.org by sh...@apache.org on 2008/10/23 08:54:57 UTC
svn commit: r707295 - in /lucene/solr/trunk/contrib/dataimporthandler:
CHANGES.txt
src/main/java/org/apache/solr/handler/dataimport/DataImportHandler.java
src/main/java/org/apache/solr/handler/dataimport/DataImporter.java
Author: shalin
Date: Wed Oct 22 23:54:56 2008
New Revision: 707295
URL: http://svn.apache.org/viewvc?rev=707295&view=rev
Log:
SOLR-728 -- Add synchronization to avoid race condition of multiple imports working concurrently
Modified:
lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataImportHandler.java
lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataImporter.java
Modified: lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt?rev=707295&r1=707294&r2=707295&view=diff
==============================================================================
--- lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt (original)
+++ lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt Wed Oct 22 23:54:56 2008
@@ -37,6 +37,9 @@
2. SOLR-823: Request parameter variables ${dataimporter.request.xxx} are not resolved
(Mck SembWever, Noble Paul, shalin)
+3. SOLR-728: Add synchronization to avoid race condition of multiple imports working concurrently
+ (Walter Ferrara, shalin)
+
Documentation
----------------------
Modified: lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataImportHandler.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataImportHandler.java?rev=707295&r1=707294&r2=707295&view=diff
==============================================================================
--- lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataImportHandler.java (original)
+++ lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataImportHandler.java Wed Oct 22 23:54:56 2008
@@ -141,7 +141,7 @@
if (command != null)
rsp.add("command", command);
- if (requestParams.debug) {
+ if (requestParams.debug && (importer == null || !importer.isBusy())) {
// Reload the data-config.xml
importer = null;
if (requestParams.dataConfig != null) {
@@ -168,7 +168,7 @@
if (command != null && DataImporter.ABORT_CMD.equals(command)) {
importer.runCmd(requestParams, null, null);
- } else if (importer.getStatus() != DataImporter.Status.IDLE) {
+ } else if (importer.isBusy()) {
message = DataImporter.MSG.CMD_RUNNING;
} else if (command != null) {
if (DataImporter.FULL_IMPORT_CMD.equals(command)
@@ -202,8 +202,7 @@
message = DataImporter.MSG.CONFIG_RELOADED;
}
}
- rsp.add("status", importer.getStatus() == DataImporter.Status.IDLE ? "idle"
- : "busy");
+ rsp.add("status", importer.isBusy() ? "busy" : "idle");
rsp.add("importResponse", message);
rsp.add("statusMessages", importer.getStatusMessages());
Modified: lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataImporter.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataImporter.java?rev=707295&r1=707294&r2=707295&view=diff
==============================================================================
--- lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataImporter.java (original)
+++ lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataImporter.java Wed Oct 22 23:54:56 2008
@@ -32,6 +32,8 @@
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.atomic.AtomicLong;
+import java.util.concurrent.locks.ReentrantLock;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -75,6 +77,8 @@
private SolrCore core;
+ private ReentrantLock importLock = new ReentrantLock();
+
/**
* Only for testing purposes
*/
@@ -318,6 +322,10 @@
this.status = status;
}
+ public boolean isBusy() {
+ return importLock.isLocked();
+ }
+
public void doFullImport(SolrWriter writer, RequestParams requestParams,
Map<String, String> variables) {
LOG.info("Starting Full Import");
@@ -376,18 +384,24 @@
}.start();
}
- void runCmd(RequestParams reqParams, SolrWriter sw,
- Map<String, String> variables) {
- String command = reqParams.command;
- Date lastModified = sw.loadIndexStartTime();
- setLastIndexTime(lastModified);
- if (command.equals("full-import")) {
- doFullImport(sw, reqParams, variables);
- } else if (command.equals(DELTA_IMPORT_CMD)) {
- doDeltaImport(sw, reqParams, variables);
- } else if (command.equals(ABORT_CMD)) {
- if (docBuilder != null)
- docBuilder.abort();
+ void runCmd(RequestParams reqParams, SolrWriter sw, Map<String, String> variables) {
+ if (importLock.isLocked())
+ return;
+ importLock.lock();
+ try {
+ String command = reqParams.command;
+ Date lastModified = sw.loadIndexStartTime();
+ setLastIndexTime(lastModified);
+ if (command.equals("full-import")) {
+ doFullImport(sw, reqParams, variables);
+ } else if (command.equals(DELTA_IMPORT_CMD)) {
+ doDeltaImport(sw, reqParams, variables);
+ } else if (command.equals(ABORT_CMD)) {
+ if (docBuilder != null)
+ docBuilder.abort();
+ }
+ } finally {
+ importLock.unlock();
}
}