lucene-solr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Noble Paul നോബിള്‍ नोब्ळ्" <noble.p...@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 06:15:21 GMT
The BinaryResponseWriter has a nice abstraction of converting DocList
to SolrDocumentList .
The code is minimal Probably you can copy the methods or refactor the
class to be reused elsewhere


On Tue, Jul 22, 2008 at 10:02 AM, Ryan McKinley <ryantxu@gmail.com> wrote:
> 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
>
>



-- 
--Noble Paul
Mime
View raw message