[jira] Updated: (SOLR-1752) SolrJ fails with exception when passing document ADD and DELETEs in the same request using XML request writer (but not binary request writer)

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

[jira] Updated: (SOLR-1752) SolrJ fails with exception when passing document ADD and DELETEs in the same request using XML request writer (but not binary request writer)

JIRA jira@apache.org

     [ https://issues.apache.org/jira/browse/SOLR-1752?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Mike Mattozzi updated SOLR-1752:

    Attachment: SOLR-1752.patch

I ran into this problem today and was surprised it hadn't been fixed. I've attached a patch to UpdateRequest that maintains an ordered list that can be a mix of SolrInputDocuments to add, ids to delete, and delete queries.

There's a few places where my patch iterates over documents instead of doing an addAll so there may be some inefficiencies. It seems like these would be outweighed by the ability to group up update operations, but I could always optimize more.

> SolrJ fails with exception when passing document ADD and DELETEs in the same request using XML request writer (but not binary request writer)
> ---------------------------------------------------------------------------------------------------------------------------------------------
>                 Key: SOLR-1752
>                 URL: https://issues.apache.org/jira/browse/SOLR-1752
>             Project: Solr
>          Issue Type: Bug
>          Components: clients - java, update
>    Affects Versions: 1.4
>            Reporter: Jayson Minard
>            Assignee: Shalin Shekhar Mangar
>            Priority: Blocker
>         Attachments: SOLR-1752.patch
> Add this test to SolrExampleTests.java and it will fail when using the XML Request Writer (now default), but not if you change the SolrExampleJettyTest to use the BinaryRequestWriter.
> {code}
>  public void testAddDeleteInSameRequest() throws Exception {
>     SolrServer server = getSolrServer();
>     SolrInputDocument doc3 = new SolrInputDocument();
>     doc3.addField( "id", "id3", 1.0f );
>     doc3.addField( "name", "doc3", 1.0f );
>     doc3.addField( "price", 10 );
>     UpdateRequest up = new UpdateRequest();
>     up.add( doc3 );
>     up.deleteById("id001");
>     up.setWaitFlush(false);
>     up.setWaitSearcher(false);
>     up.process( server );
>   }
> {code}
> terminates with exception:
> {code}
> Feb 3, 2010 8:55:34 AM org.apache.solr.common.SolrException log
> SEVERE: org.apache.solr.common.SolrException: Illegal to have multiple roots (start tag in epilog?).
>  at [row,col {unknown-source}]: [1,125]
> at org.apache.solr.handler.XMLLoader.load(XMLLoader.java:72)
> at org.apache.solr.handler.ContentStreamHandlerBase.handleRequestBody(ContentStreamHandlerBase.java:54)
> at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:131)
> at org.apache.solr.core.SolrCore.execute(SolrCore.java:1316)
> at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:338)
> at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:241)
> at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1089)
> at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:365)
> at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
> at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712)
> at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
> at org.mortbay.jetty.Server.handle(Server.java:285)
> at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:502)
> at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:835)
> at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:723)
> at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:202)
> at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:378)
> at org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:226)
> at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442)
> Caused by: com.ctc.wstx.exc.WstxParsingException: Illegal to have multiple roots (start tag in epilog?).
>  at [row,col {unknown-source}]: [1,125]
> at com.ctc.wstx.sr.StreamScanner.constructWfcException(StreamScanner.java:630)
> at com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:461)
> at com.ctc.wstx.sr.BasicStreamReader.handleExtraRoot(BasicStreamReader.java:2155)
> at com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:2070)
> at com.ctc.wstx.sr.BasicStreamReader.nextFromTree(BasicStreamReader.java:2647)
> at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1019)
> at org.apache.solr.handler.XMLLoader.processUpdate(XMLLoader.java:90)
> at org.apache.solr.handler.XMLLoader.load(XMLLoader.java:69)
> ... 18 more
> {code}

This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]