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/14 09:51:44 UTC

svn commit: r704365 - in /lucene/solr/trunk/contrib/dataimporthandler: CHANGES.txt src/main/java/org/apache/solr/handler/dataimport/XPathRecordReader.java

Author: shalin
Date: Tue Oct 14 00:51:43 2008
New Revision: 704365

URL: http://svn.apache.org/viewvc?rev=704365&view=rev
Log:
SOLR-800 --  Deep copy collections to avoid ConcurrentModificationException in XPathEntityprocessor while streaming

Modified:
    lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt
    lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/XPathRecordReader.java

Modified: lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt?rev=704365&r1=704364&r2=704365&view=diff
==============================================================================
--- lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt (original)
+++ lucene/solr/trunk/contrib/dataimporthandler/CHANGES.txt Tue Oct 14 00:51:43 2008
@@ -27,6 +27,8 @@
 
 Bug Fixes
 ----------------------
+1. SOLR-800:  Deep copy collections to avoid ConcurrentModificationException in XPathEntityprocessor while streaming
+              (Kyle Morrison, Noble Paul via shalin)
 
 Documentation
 ----------------------

Modified: lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/XPathRecordReader.java
URL: http://svn.apache.org/viewvc/lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/XPathRecordReader.java?rev=704365&r1=704364&r2=704365&view=diff
==============================================================================
--- lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/XPathRecordReader.java (original)
+++ lucene/solr/trunk/contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/XPathRecordReader.java Tue Oct 14 00:51:43 2008
@@ -146,7 +146,7 @@
           }
           if (event == END_ELEMENT) {
             if (isRecord)
-              handler.handle(new HashMap<String, Object>(values), forEachPath);
+              handler.handle(getDeepCopy(values), forEachPath);
             if (recordStarted && !isRecord
                     && !childrenFound.containsAll(childNodes)) {
               for (Node n : childNodes) {
@@ -316,6 +316,18 @@
     }
   }
 
+  private Map<String, Object> getDeepCopy(Map<String, Object> values) {
+    Map<String, Object> result = new HashMap<String, Object>();
+    for (Map.Entry<String, Object> entry : values.entrySet()) {
+      if (entry.getValue() instanceof List) {
+        result.put(entry.getKey(),new ArrayList((List) entry.getValue()));
+      } else{
+        result.put(entry.getKey(),entry.getValue());
+      }
+    }
+    return result;
+  }
+
   static XMLInputFactory factory = XMLInputFactory.newInstance();
 
   public static interface Handler {