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 ho...@apache.org on 2010/06/14 03:23:36 UTC
svn commit: r954340 - in /lucene/solr/branches/branch-1.4: ./
src/common/org/apache/solr/common/util/ src/java/org/apache/solr/handler/
src/java/org/apache/solr/request/
src/solrj/org/apache/solr/client/solrj/impl/
src/solrj/org/apache/solr/client/solr...
Author: hossman
Date: Mon Jun 14 01:23:34 2010
New Revision: 954340
URL: http://svn.apache.org/viewvc?rev=954340&view=rev
Log:
SOLR-1870: merging r954336 from trunk into1.4 branch for 1.4.1
Modified:
lucene/solr/branches/branch-1.4/ (props changed)
lucene/solr/branches/branch-1.4/CHANGES.txt
lucene/solr/branches/branch-1.4/src/common/org/apache/solr/common/util/JavaBinCodec.java
lucene/solr/branches/branch-1.4/src/java/org/apache/solr/handler/BinaryUpdateRequestHandler.java (props changed)
lucene/solr/branches/branch-1.4/src/java/org/apache/solr/handler/DumpRequestHandler.java (props changed)
lucene/solr/branches/branch-1.4/src/java/org/apache/solr/handler/MoreLikeThisHandler.java (props changed)
lucene/solr/branches/branch-1.4/src/java/org/apache/solr/request/RawResponseWriter.java (props changed)
lucene/solr/branches/branch-1.4/src/solrj/org/apache/solr/client/solrj/impl/CommonsHttpSolrServer.java (props changed)
lucene/solr/branches/branch-1.4/src/solrj/org/apache/solr/client/solrj/request/JavaBinUpdateRequestCodec.java
lucene/solr/branches/branch-1.4/src/test/org/apache/solr/client/solrj/request/TestUpdateRequestCodec.java
Propchange: lucene/solr/branches/branch-1.4/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun 14 01:23:34 2010
@@ -1,2 +1,2 @@
-/lucene/dev/trunk/solr:950125
+/lucene/dev/trunk/solr:950125,954336
/lucene/solr/trunk:881642,881906,882734,882838,883178,883388,883518,883566,884393,890243,891596,891889,898119,903271,909705,911245,919871,925898
Modified: lucene/solr/branches/branch-1.4/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/solr/branches/branch-1.4/CHANGES.txt?rev=954340&r1=954339&r2=954340&view=diff
==============================================================================
--- lucene/solr/branches/branch-1.4/CHANGES.txt (original)
+++ lucene/solr/branches/branch-1.4/CHANGES.txt Mon Jun 14 01:23:34 2010
@@ -132,6 +132,11 @@ Bug Fixes
* SOLR-1948: PatternTokenizerFactory should use parent's args (koji)
+* SOLR-1870: Indexing documents using the 'javabin' format no longer
+ fails with a ClassCastException whenSolrInputDocuments contain field
+ values which are Collections or other classes that implement
+ Iterable. (noble, hossman)
+
================== Release 1.4.0 ==================
Release Date: See http://lucene.apache.org/solr for the official release date.
Modified: lucene/solr/branches/branch-1.4/src/common/org/apache/solr/common/util/JavaBinCodec.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/branch-1.4/src/common/org/apache/solr/common/util/JavaBinCodec.java?rev=954340&r1=954339&r2=954340&view=diff
==============================================================================
--- lucene/solr/branches/branch-1.4/src/common/org/apache/solr/common/util/JavaBinCodec.java (original)
+++ lucene/solr/branches/branch-1.4/src/common/org/apache/solr/common/util/JavaBinCodec.java Mon Jun 14 01:23:34 2010
@@ -225,8 +225,8 @@ public class JavaBinCodec {
writeSolrDocumentList((SolrDocumentList) val);
return true;
}
- if (val instanceof List) {
- writeArray((List) val);
+ if (val instanceof Collection) {
+ writeArray((Collection) val);
return true;
}
if (val instanceof Object[]) {
@@ -390,6 +390,14 @@ public class JavaBinCodec {
}
}
+ public void writeArray(Collection coll) throws IOException {
+ writeTag(ARR, coll.size());
+ for (Object o : coll) {
+ writeVal(o);
+ }
+
+ }
+
public void writeArray(Object[] arr) throws IOException {
writeTag(ARR, arr.length);
for (int i = 0; i < arr.length; i++) {
Propchange: lucene/solr/branches/branch-1.4/src/java/org/apache/solr/handler/BinaryUpdateRequestHandler.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun 14 01:23:34 2010
@@ -1,2 +1,2 @@
-/lucene/dev/trunk/solr/src/java/org/apache/solr/handler/BinaryUpdateRequestHandler.java:950125
+/lucene/dev/trunk/solr/src/java/org/apache/solr/handler/BinaryUpdateRequestHandler.java:950125,954336
/lucene/solr/trunk/src/java/org/apache/solr/handler/BinaryUpdateRequestHandler.java:881642,881906,882734,882838,883178,883388,883518,883566,884393,890243,891596,891889,898119,903271,906553,909705,911245,919871,925898
Propchange: lucene/solr/branches/branch-1.4/src/java/org/apache/solr/handler/DumpRequestHandler.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun 14 01:23:34 2010
@@ -1,2 +1,2 @@
-/lucene/dev/trunk/solr/src/java/org/apache/solr/handler/DumpRequestHandler.java:950125
+/lucene/dev/trunk/solr/src/java/org/apache/solr/handler/DumpRequestHandler.java:950125,954336
/lucene/solr/trunk/src/java/org/apache/solr/handler/DumpRequestHandler.java:881642,881906,882734,882838,883178,883388,883518,883566,884393,890243,891596,891889,898119,903271,906553,909705,911245,919871,925898
Propchange: lucene/solr/branches/branch-1.4/src/java/org/apache/solr/handler/MoreLikeThisHandler.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun 14 01:23:34 2010
@@ -1,2 +1,2 @@
-/lucene/dev/trunk/solr/src/java/org/apache/solr/handler/MoreLikeThisHandler.java:950125
+/lucene/dev/trunk/solr/src/java/org/apache/solr/handler/MoreLikeThisHandler.java:950125,954336
/lucene/solr/trunk/src/java/org/apache/solr/handler/MoreLikeThisHandler.java:881642,881906,882734,882838,883178,883388,883518,883566,884393,890243,891596,891889,898119,903271,906553,909705,911245,919871,925898
Propchange: lucene/solr/branches/branch-1.4/src/java/org/apache/solr/request/RawResponseWriter.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun 14 01:23:34 2010
@@ -1,3 +1,3 @@
-/lucene/dev/trunk/solr/src/java/org/apache/solr/request/RawResponseWriter.java:950125
+/lucene/dev/trunk/solr/src/java/org/apache/solr/request/RawResponseWriter.java:950125,954336
/lucene/solr/trunk/src/java/org/apache/solr/request/RawResponseWriter.java:881642,881906,882734,882838,883178,883388,883518,883566,884393,890243,891596,891889,898119,903271,909705,911245,919871,925898
/lucene/solr/trunk/src/java/org/apache/solr/response/RawResponseWriter.java:906553
Propchange: lucene/solr/branches/branch-1.4/src/solrj/org/apache/solr/client/solrj/impl/CommonsHttpSolrServer.java
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon Jun 14 01:23:34 2010
@@ -1,2 +1,2 @@
-/lucene/dev/trunk/solr/src/solrj/org/apache/solr/client/solrj/impl/CommonsHttpSolrServer.java:950125
+/lucene/dev/trunk/solr/src/solrj/org/apache/solr/client/solrj/impl/CommonsHttpSolrServer.java:950125,954336
/lucene/solr/trunk/src/solrj/org/apache/solr/client/solrj/impl/CommonsHttpSolrServer.java:829939-906553,909705,911245,919871,925898
Modified: lucene/solr/branches/branch-1.4/src/solrj/org/apache/solr/client/solrj/request/JavaBinUpdateRequestCodec.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/branch-1.4/src/solrj/org/apache/solr/client/solrj/request/JavaBinUpdateRequestCodec.java?rev=954340&r1=954339&r2=954340&view=diff
==============================================================================
--- lucene/solr/branches/branch-1.4/src/solrj/org/apache/solr/client/solrj/request/JavaBinUpdateRequestCodec.java (original)
+++ lucene/solr/branches/branch-1.4/src/solrj/org/apache/solr/client/solrj/request/JavaBinUpdateRequestCodec.java Mon Jun 14 01:23:34 2010
@@ -96,6 +96,11 @@ public class JavaBinUpdateRequestCodec {
final NamedList[] namedList = new NamedList[1];
JavaBinCodec codec = new JavaBinCodec() {
+ // NOTE: this only works because this is an anonymous inner class
+ // which will only ever be used on a single stream -- if this class
+ // is ever refactored, this will not work.
+ private boolean seenOuterMostDocIterator = false;
+
public NamedList readNamedList(FastInputStream dis) throws IOException {
int sz = readSize(dis);
NamedList nl = new NamedList();
@@ -110,8 +115,18 @@ public class JavaBinUpdateRequestCodec {
return nl;
}
-
public List readIterator(FastInputStream fis) throws IOException {
+
+ // default behavior for reading any regular Iterator in the stream
+ if (seenOuterMostDocIterator) return super.readIterator(fis);
+
+ // special treatment for first outermost Iterator
+ // (the list of documents)
+ seenOuterMostDocIterator = true;
+ return readOuterMostDocIterator(fis);
+ }
+
+ private List readOuterMostDocIterator(FastInputStream fis) throws IOException {
NamedList params = (NamedList) namedList[0].getVal(0);
updateRequest.setParams(namedListToSolrParams(params));
if (handler == null) return super.readIterator(fis);
Modified: lucene/solr/branches/branch-1.4/src/test/org/apache/solr/client/solrj/request/TestUpdateRequestCodec.java
URL: http://svn.apache.org/viewvc/lucene/solr/branches/branch-1.4/src/test/org/apache/solr/client/solrj/request/TestUpdateRequestCodec.java?rev=954340&r1=954339&r2=954340&view=diff
==============================================================================
--- lucene/solr/branches/branch-1.4/src/test/org/apache/solr/client/solrj/request/TestUpdateRequestCodec.java (original)
+++ lucene/solr/branches/branch-1.4/src/test/org/apache/solr/client/solrj/request/TestUpdateRequestCodec.java Mon Jun 14 01:23:34 2010
@@ -24,6 +24,10 @@ import org.junit.Test;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
+import java.util.Set;
+import java.util.HashSet;
+import java.util.Collection;
+import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;
@@ -43,22 +47,33 @@ public class TestUpdateRequestCodec {
updateRequest.deleteById("id:5");
updateRequest.deleteByQuery("2*");
updateRequest.deleteByQuery("1*");
+
SolrInputDocument doc = new SolrInputDocument();
doc.addField("id", 1);
doc.addField("desc", "one", 2.0f);
doc.addField("desc", "1");
updateRequest.add(doc);
+
doc = new SolrInputDocument();
doc.addField("id", 2);
doc.setDocumentBoost(10.0f);
doc.addField("desc", "two", 3.0f);
doc.addField("desc", "2");
updateRequest.add(doc);
+
doc = new SolrInputDocument();
doc.addField("id", 3);
doc.addField("desc", "three", 3.0f);
doc.addField("desc", "3");
updateRequest.add(doc);
+
+ doc = new SolrInputDocument();
+ Collection<String> foobar = new HashSet<String>();
+ foobar.add("baz1");
+ foobar.add("baz2");
+ doc.addField("foobar",foobar);
+ updateRequest.add(doc);
+
// updateRequest.setWaitFlush(true);
updateRequest.deleteById("2");
updateRequest.deleteByQuery("id:3");
@@ -69,7 +84,6 @@ public class TestUpdateRequestCodec {
JavaBinUpdateRequestCodec.StreamingDocumentHandler handler = new JavaBinUpdateRequestCodec.StreamingDocumentHandler() {
public void document(SolrInputDocument document, UpdateRequest req) {
Assert.assertNotNull(req.getParams());
-// Assert.assertEquals(Boolean.TRUE, req.getParams().getBool(UpdateParams.WAIT_FLUSH));
docs.add(document);
}
};
@@ -82,20 +96,89 @@ public class TestUpdateRequestCodec {
for (int i = 0; i < updateRequest.getDocuments().size(); i++) {
SolrInputDocument inDoc = updateRequest.getDocuments().get(i);
SolrInputDocument outDoc = updateUnmarshalled.getDocuments().get(i);
- compareDocs(inDoc, outDoc);
+ compareDocs("doc#"+i, inDoc, outDoc);
+ }
+ Assert.assertEquals(updateUnmarshalled.getDeleteById().get(0) ,
+ updateRequest.getDeleteById().get(0));
+ Assert.assertEquals(updateUnmarshalled.getDeleteQuery().get(0) ,
+ updateRequest.getDeleteQuery().get(0));
+
+ }
+
+ @Test
+ public void testIteratable() throws IOException {
+ final List<String> values = new ArrayList<String>();
+ values.add("iterItem1");
+ values.add("iterItem2");
+
+ UpdateRequest updateRequest = new UpdateRequest();
+ updateRequest.deleteByQuery("*:*");
+
+ SolrInputDocument doc = new SolrInputDocument();
+ doc.addField("id", 1);
+ doc.addField("desc", "one", 2.0f);
+ // imagine someone adding a custom Bean that implements Iterable
+ // but is not a Collection
+ doc.addField("iter", new Iterable<String>() {
+ public Iterator<String> iterator() { return values.iterator(); }
+ });
+ doc.addField("desc", "1");
+ updateRequest.add(doc);
+
+ JavaBinUpdateRequestCodec codec = new JavaBinUpdateRequestCodec();
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ codec.marshal(updateRequest, baos);
+ final List<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
+ JavaBinUpdateRequestCodec.StreamingDocumentHandler handler = new JavaBinUpdateRequestCodec.StreamingDocumentHandler() {
+ public void document(SolrInputDocument document, UpdateRequest req) {
+ Assert.assertNotNull(req.getParams());
+ docs.add(document);
+ }
+ };
+
+ UpdateRequest updateUnmarshalled = codec.unmarshal(new ByteArrayInputStream(baos.toByteArray()) ,handler);
+ Assert.assertNull(updateUnmarshalled.getDocuments());
+ for (SolrInputDocument document : docs) {
+ updateUnmarshalled.add(document);
}
- Assert.assertEquals(updateUnmarshalled.getDeleteById().get(0) , updateRequest.getDeleteById().get(0));
- Assert.assertEquals(updateUnmarshalled.getDeleteQuery().get(0) , updateRequest.getDeleteQuery().get(0));
+
+ SolrInputDocument outDoc = updateUnmarshalled.getDocuments().get(0);
+ SolrInputField iter = outDoc.getField("iter");
+ Assert.assertNotNull("iter field is null", iter);
+ Object iterVal = iter.getValue();
+ Assert.assertTrue("iterVal is not a Collection",
+ iterVal instanceof Collection);
+ Assert.assertEquals("iterVal contents", values, iterVal);
}
- private void compareDocs(SolrInputDocument docA, SolrInputDocument docB) {
- Assert.assertEquals(docA.getDocumentBoost(), docB.getDocumentBoost());
- for (String s : docA.getFieldNames()) {
- SolrInputField fldA = docA.getField(s);
- SolrInputField fldB = docB.getField(s);
- Assert.assertEquals(fldA.getValue(), fldB.getValue());
- Assert.assertEquals(fldA.getBoost(), fldB.getBoost());
+
+
+ private void compareDocs(String m,
+ SolrInputDocument expectedDoc,
+ SolrInputDocument actualDoc) {
+ Assert.assertEquals(expectedDoc.getDocumentBoost(),
+ actualDoc.getDocumentBoost());
+
+ for (String s : expectedDoc.getFieldNames()) {
+ SolrInputField expectedField = expectedDoc.getField(s);
+ SolrInputField actualField = actualDoc.getField(s);
+ Assert.assertEquals(m + ": diff boosts for field: " + s,
+ expectedField.getBoost(), actualField.getBoost());
+ Object expectedVal = expectedField.getValue();
+ Object actualVal = actualField.getValue();
+ if (expectedVal instanceof Set &&
+ actualVal instanceof Collection) {
+ // unmarshaled documents never contain Sets, they are just a
+ // List in an arbitrary order based on what the iterator of
+ // hte original Set returned, so we need a comparison that is
+ // order agnostic.
+ actualVal = new HashSet((Collection) actualVal);
+ m += " (Set comparison)";
+ }
+
+ Assert.assertEquals(m + " diff values for field: " + s,
+ expectedVal, actualVal);
}
}