SOLR-5762 broke backward compatibility of Javabin format

git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1570793 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Noble Paul 2014-02-22 06:19:16 +00:00
parent 35a0cb3a2d
commit 225459815c
3 changed files with 80 additions and 1 deletions

View File

@ -184,7 +184,13 @@ public class JavaBinUpdateRequestCodec {
delByIdMap = (Map<String,Map<String,Object>>) namedList[0].get("delByIdMap");
delByQ = (List<String>) namedList[0].get("delByQ");
doclist = (List) namedList[0].get("docs");
docMap = (List<Entry<SolrInputDocument,Map<Object,Object>>>) namedList[0].get("docsMap");
Object docsMapObj = namedList[0].get("docsMap");
if (docsMapObj instanceof Map) {//SOLR-5762
docMap = new ArrayList(((Map)docsMapObj).entrySet());
} else {
docMap = (List<Entry<SolrInputDocument, Map<Object, Object>>>) docsMapObj;
}
// we don't add any docs, because they were already processed

Binary file not shown.

View File

@ -18,6 +18,9 @@ package org.apache.solr.client.solrj.request;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
@ -31,6 +34,7 @@ import junit.framework.Assert;
import org.apache.lucene.util.LuceneTestCase;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.SolrInputField;
import org.apache.solr.util.ExternalPaths;
import org.junit.Test;
/**
@ -160,6 +164,75 @@ public class TestUpdateRequestCodec extends LuceneTestCase {
public void testBackCompat4_5() throws IOException {
UpdateRequest updateRequest = new UpdateRequest();
updateRequest.deleteById("*:*");
updateRequest.deleteById("id:5");
updateRequest.deleteByQuery("2*");
updateRequest.deleteByQuery("1*");
updateRequest.setParam("a", "b");
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.deleteById("2");
updateRequest.deleteByQuery("id:3");
FileInputStream is = new FileInputStream(new File(ExternalPaths.SOURCE_HOME, "solrj/src/test-files/solrj/updateReq_4_5.bin"));
UpdateRequest updateUnmarshalled = new JavaBinUpdateRequestCodec().unmarshal(is, new JavaBinUpdateRequestCodec.StreamingUpdateHandler() {
@Override
public void update(SolrInputDocument document, UpdateRequest req, Integer commitWithin, Boolean override) {
if(commitWithin == null ){
req.add(document);
}
System.err.println("Doc" + document + " ,commitWithin:"+commitWithin+ " , override:"+ override);
}
});
System.err.println(updateUnmarshalled.getDocumentsMap());
System.err.println(updateUnmarshalled.getDocuments());
for (int i = 0; i < updateRequest.getDocuments().size(); i++) {
SolrInputDocument inDoc = updateRequest.getDocuments().get(i);
SolrInputDocument outDoc = updateUnmarshalled.getDocuments().get(i);
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));
assertEquals("b", updateUnmarshalled.getParams().get("a"));
is.close();
}
private void compareDocs(String m,
SolrInputDocument expectedDoc,
SolrInputDocument actualDoc) {