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 {