lucene-solr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ryan McKinley <ryan...@gmail.com>
Subject Re: svn commit: r678624 - /lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java
Date Tue, 22 Jul 2008 04:32:10 GMT
Ideally we don't need to.

However, we do need to convert things like DocList to  
SolrDocumentList, also the Map/List representation should match what  
happens *if* it did go via HTTP.  That is, if a handler adds a  
LinkedHashSet to the response, the client does not know that -- it  
just behaves as a collection.

We need to make sure the behavior of Embedded vs Http is identical.

Writing this conversion has been on my TODO list for a while, but I  
don't see it happening anytime soon.  This patch abstracts things out  
so there is an easy place to put in this optimization when someone has  
the need/time.

ryan


On Jul 22, 2008, at 12:21 AM, Noble Paul നോബിള്‍  
नोब्ळ् wrote:

> why do we need a serialize/deserialize for EmbeddedSolrServer? Why
> can't we just return the Namedlist directly?
>
> On Tue, Jul 22, 2008 at 8:47 AM,  <ryan@apache.org> wrote:
>> Author: ryan
>> Date: Mon Jul 21 20:17:13 2008
>> New Revision: 678624
>>
>> URL: http://svn.apache.org/viewvc?rev=678624&view=rev
>> Log:
>> SOLR-641 -- use the binary parser for embeded solr server
>>
>> Modified:
>>   lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ 
>> solrj/embedded/EmbeddedSolrServer.java
>>
>> Modified: lucene/solr/trunk/client/java/solrj/src/org/apache/solr/ 
>> client/solrj/embedded/EmbeddedSolrServer.java
>> URL: http://svn.apache.org/viewvc/lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/solrj/embedded/EmbeddedSolrServer.java?rev=678624&r1=678623&r2=678624&view=diff
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> =====================================================================
>> --- lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ 
>> solrj/embedded/EmbeddedSolrServer.java (original)
>> +++ lucene/solr/trunk/client/java/solrj/src/org/apache/solr/client/ 
>> solrj/embedded/EmbeddedSolrServer.java Mon Jul 21 20:17:13 2008
>> @@ -17,6 +17,8 @@
>>
>> package org.apache.solr.client.solrj.embedded;
>>
>> +import java.io.ByteArrayInputStream;
>> +import java.io.ByteArrayOutputStream;
>> import java.io.IOException;
>> import java.io.StringReader;
>> import java.io.StringWriter;
>> @@ -25,15 +27,16 @@
>> import org.apache.solr.client.solrj.SolrRequest;
>> import org.apache.solr.client.solrj.SolrServer;
>> import org.apache.solr.client.solrj.SolrServerException;
>> +import org.apache.solr.client.solrj.impl.BinaryResponseParser;
>> import org.apache.solr.client.solrj.impl.XMLResponseParser;
>> import org.apache.solr.common.SolrException;
>> import org.apache.solr.common.params.CommonParams;
>> -import org.apache.solr.common.params.DefaultSolrParams;
>> import org.apache.solr.common.params.ModifiableSolrParams;
>> import org.apache.solr.common.params.SolrParams;
>> import org.apache.solr.common.util.NamedList;
>> import org.apache.solr.core.MultiCore;
>> import org.apache.solr.core.SolrCore;
>> +import org.apache.solr.request.BinaryResponseWriter;
>> import org.apache.solr.request.QueryResponseWriter;
>> import org.apache.solr.request.SolrQueryRequest;
>> import org.apache.solr.request.SolrQueryResponse;
>> @@ -51,13 +54,12 @@
>> */
>> public class EmbeddedSolrServer extends SolrServer
>> {
>> -  protected ModifiableSolrParams _invariantParams;
>> -  protected ResponseParser _processor;
>>
>>  protected final MultiCore multicore; // either multicore
>>  protected final SolrCore core; // or single core
>> -  protected final SolrRequestParsers parser;
>>  protected final String coreName;  // use MultiCore registry
>> +
>> +  private final SolrRequestParsers _parser;
>>
>>  public EmbeddedSolrServer( SolrCore core )
>>  {
>> @@ -67,7 +69,8 @@
>>    this.core = core;
>>    this.multicore = null;
>>    this.coreName = null;
>> -    this.parser = init();
>> +
>> +    _parser = new SolrRequestParsers( null );
>>  }
>>
>>  public EmbeddedSolrServer(  MultiCore multicore, String coreName )
>> @@ -82,20 +85,10 @@
>>    if( c == null ) {
>>      throw new RuntimeException( "Unknown core: "+coreName );
>>    }
>> -    this.parser = init();
>> -  }
>> -
>> -  private SolrRequestParsers init()
>> -  {
>> -    _processor = new XMLResponseParser();
>>
>> -    _invariantParams = new ModifiableSolrParams();
>> -    _invariantParams.set( CommonParams.WT,  
>> _processor.getWriterType() );
>> -    _invariantParams.set( CommonParams.VERSION, "2.2" );
>> -
>> -    return new SolrRequestParsers( null );
>> +    _parser = new SolrRequestParsers( null );
>>  }
>> -
>> +
>>  @Override
>>  public NamedList<Object> request(SolrRequest request) throws  
>> SolrServerException, IOException
>>  {
>> @@ -118,9 +111,6 @@
>>    if( params == null ) {
>>      params = new ModifiableSolrParams();
>>    }
>> -    if( _invariantParams != null ) {
>> -      params = new DefaultSolrParams( _invariantParams, params );
>> -    }
>>
>>    // Extract the handler from the path or params
>>    SolrRequestHandler handler = core.getRequestHandler( path );
>> @@ -145,7 +135,7 @@
>>    }
>>
>>    try {
>> -      SolrQueryRequest req = parser.buildRequestFrom( core,  
>> params, request.getContentStreams() );
>> +      SolrQueryRequest req = _parser.buildRequestFrom( core,  
>> params, request.getContentStreams() );
>>      req.getContext().put( "path", path );
>>      SolrQueryResponse rsp = new SolrQueryResponse();
>>      core.execute( handler, req, rsp );
>> @@ -154,13 +144,9 @@
>>      }
>>
>>      // Now write it out
>> -      QueryResponseWriter responseWriter =  
>> core.getQueryResponseWriter(req);
>> -      StringWriter out = new StringWriter();
>> -      responseWriter.write(out, req, rsp);
>> -      // TODO: writers might be able to output binary someday
>> -
>> +      NamedList<Object> normalized = getParsedResponse(req, rsp);
>>      req.close();
>> -      return _processor.processResponse( new  
>> StringReader( out.toString() ) );
>> +      return normalized;
>>    }
>>    catch( IOException iox ) {
>>      throw iox;
>> @@ -169,4 +155,27 @@
>>      throw new SolrServerException( ex );
>>    }
>>  }
>> +
>> +  /**
>> +   * TODO -- in the future, this could perhaps transform the  
>> NamedList without serializing it
>> +   * then parsing it from the serialized form.
>> +   *
>> +   * @param req
>> +   * @param rsp
>> +   * @return a response object equivalent to what you get from the  
>> XML/JSON/javabin parser. Documents
>> +   * become SolrDocuments, DocList becomes SolrDocumentList etc.
>> +   */
>> +  public NamedList<Object> getParsedResponse( SolrQueryRequest  
>> req, SolrQueryResponse rsp )
>> +  {
>> +    try {
>> +      BinaryResponseWriter writer = new BinaryResponseWriter();
>> +      ByteArrayOutputStream bos = new ByteArrayOutputStream();
>> +      writer.write( bos, req, rsp );
>> +      BinaryResponseParser parser = new BinaryResponseParser();
>> +      return parser.processResponse( new  
>> ByteArrayInputStream( bos.toByteArray() ), "UTF-8" );
>> +    }
>> +    catch( Exception ex ) {
>> +      throw new RuntimeException( ex );
>> +    }
>> +  }
>> }
>>
>>
>>
>
>
>
> -- 
> --Noble Paul


Mime
View raw message