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 2009/02/11 12:01:44 UTC

svn commit: r743299 - in /lucene/solr/trunk/contrib/dataimporthandler: ./ src/main/java/org/apache/solr/handler/dataimport/

Author: shalin
Date: Wed Feb 11 11:01:44 2009
New Revision: 743299

URL: http://svn.apache.org/viewvc?rev=743299&view=rev
Log:
SOLR-1017 -- Fix thread-safety issue with last_index_time for concurrent imports in multiple cores due to unsafe usage of SimpleDateFormat by multiple threads.

Modified:
    lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt
    lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DataImporter.java
    lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DocBuilder.java
    lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/EvaluatorBag.java
    lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/FileListEntityProcessor.java
    lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/SolrWriter.java
    lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/TemplateString.java

Modified: lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt?rev=743299&r1=743298&r2=743299&view=diff
==============================================================================
--- lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt (original)
+++ lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt Wed Feb 11 11:01:44 2009
@@ -125,6 +125,10 @@
 16.SOLR-1009: Repeated column names result in duplicate values.
               (Fergus McMenemie, Noble Paul via shalin)
 
+17.SOLR-1017: Fix thread-safety issue with last_index_time for concurrent imports in multiple cores due to unsafe usage
+              of SimpleDateFormat by multiple threads.
+              (Ryuuichi Kumai via shalin)
+
 Documentation
 ----------------------
 

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=743299&r1=743298&r2=743299&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 Feb 11 11:01:44 2009
@@ -414,8 +414,12 @@
     }
   };
 
-  static final SimpleDateFormat DATE_TIME_FORMAT = new SimpleDateFormat(
-          "yyyy-MM-dd HH:mm:ss");
+  static final ThreadLocal<SimpleDateFormat> DATE_TIME_FORMAT = new ThreadLocal<SimpleDateFormat>() {
+    @Override
+    protected SimpleDateFormat initialValue() {
+      return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+    }
+  };
 
   static final class MSG {
     public static final String NO_CONFIG_FOUND = "Configuration not found";

Modified: lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DocBuilder.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DocBuilder.java?rev=743299&r1=743298&r2=743299&view=diff
==============================================================================
--- lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DocBuilder.java (original)
+++ lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/DocBuilder.java Wed Feb 11 11:01:44 2009
@@ -76,8 +76,8 @@
     VariableResolverImpl resolver = new VariableResolverImpl();
     Map<String, Object> indexerNamespace = new HashMap<String, Object>();
     if (dataImporter.getLastIndexTime() != null)
-      indexerNamespace.put(LAST_INDEX_TIME, DataImporter.DATE_TIME_FORMAT
-              .format(dataImporter.getLastIndexTime()));
+      indexerNamespace.put(LAST_INDEX_TIME,
+              DataImporter.DATE_TIME_FORMAT.get().format(dataImporter.getLastIndexTime()));
     indexerNamespace.put(INDEX_START_TIME, dataImporter.getIndexStartTime());
     indexerNamespace.put("request", requestParameters.requestParams);
     indexerNamespace.put("functions", EvaluatorBag.getFunctionsNamespace(resolver,
@@ -165,7 +165,7 @@
     if (stop.get()) {
       if (DataImporter.ABORT_CMD.equals(requestParameters.command)) {
         // Dont commit if aborted using command=abort
-        statusMessages.put("Aborted", DataImporter.DATE_TIME_FORMAT.format(new Date()));
+        statusMessages.put("Aborted", DataImporter.DATE_TIME_FORMAT.get().format(new Date()));
         rollback();
       } else if (requestParameters.commit) {
         // Debug mode, commit if commit=true was specified
@@ -277,7 +277,7 @@
 
   @SuppressWarnings("unchecked")
   public void addStatusMessage(String msg) {
-    statusMessages.put(msg, DataImporter.DATE_TIME_FORMAT.format(new Date()));
+    statusMessages.put(msg, DataImporter.DATE_TIME_FORMAT.get().format(new Date()));
   }
 
   @SuppressWarnings("unchecked")

Modified: lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/EvaluatorBag.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/EvaluatorBag.java?rev=743299&r1=743298&r2=743299&view=diff
==============================================================================
--- lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/EvaluatorBag.java (original)
+++ lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/EvaluatorBag.java Wed Feb 11 11:01:44 2009
@@ -155,7 +155,7 @@
           } else {
             String s = o.toString();
             try {
-              date = DataImporter.DATE_TIME_FORMAT.parse(s);
+              date = DataImporter.DATE_TIME_FORMAT.get().parse(s);
             } catch (ParseException exp) {
               throw new DataImportHandlerException(
                       DataImportHandlerException.SEVERE,

Modified: lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/FileListEntityProcessor.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/FileListEntityProcessor.java?rev=743299&r1=743298&r2=743299&view=diff
==============================================================================
--- lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/FileListEntityProcessor.java (original)
+++ lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/FileListEntityProcessor.java Wed Feb 11 11:01:44 2009
@@ -111,7 +111,7 @@
       }
     }
     try {
-      return DataImporter.DATE_TIME_FORMAT.parse(dateStr);
+      return DataImporter.DATE_TIME_FORMAT.get().parse(dateStr);
     } catch (ParseException exp) {
       throw new DataImportHandlerException(DataImportHandlerException.SEVERE,
               "Invalid expression for date", exp);

Modified: lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/SolrWriter.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/SolrWriter.java?rev=743299&r1=743298&r2=743299&view=diff
==============================================================================
--- lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/SolrWriter.java (original)
+++ lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/SolrWriter.java Wed Feb 11 11:01:44 2009
@@ -98,7 +98,7 @@
 
     try {
       if (result != null)
-        return DataImporter.DATE_TIME_FORMAT.parse(result);
+        return DataImporter.DATE_TIME_FORMAT.get().parse(result);
     } catch (ParseException e) {
       throw new DataImportHandlerException(DataImportHandlerException.WARN,
               "Unable to read last indexed time from: "
@@ -113,8 +113,8 @@
     Properties props = readIndexerProperties();
 
     try {
-      props.put(SolrWriter.LAST_INDEX_KEY, DataImporter.DATE_TIME_FORMAT
-              .format(date));
+      props.put(SolrWriter.LAST_INDEX_KEY,
+              DataImporter.DATE_TIME_FORMAT.get().format(date));
       String filePath = configDir;
       if (configDir != null && !configDir.endsWith(File.separator))
         filePath += File.separator;

Modified: lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/TemplateString.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/TemplateString.java?rev=743299&r1=743298&r2=743299&view=diff
==============================================================================
--- lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/TemplateString.java (original)
+++ lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/TemplateString.java Wed Feb 11 11:01:44 2009
@@ -100,7 +100,7 @@
   private String getObjectAsString(Object val) {
     if (val instanceof java.sql.Date) {
       java.sql.Date d = (java.sql.Date) val;
-      return DataImporter.DATE_TIME_FORMAT.format(d);
+      return DataImporter.DATE_TIME_FORMAT.get().format(d);
     }
     return val.toString();
   }