[ 
https://issues.apache.org/jira/browse/SOLR-1395?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13139997#comment-13139997
 ] 

JohnWu commented on SOLR-1395:
------------------------------

tom:
   For multi-schema case, I try to add multi-core in proxy and sub-proxy, but I 
meet the connection close issue.
   please help me and analyze the case.
   
   now in proxy, I set the solr home with proxymulticore folder, which contains 
structure as follows:
   -proxymulticore
   --customer
   ----conf
   ----data
   --part
   ----conf
   ----data
   --solr.xml

  solr.xml as follows:
  <cores adminPath="/admin/cores">
        <core name="part" instanceDir="part">           
        </core>
        <core name="customer" instanceDir="customer">           
        </core>
  </cores>

  in part folder the solrcong.xml set as 
----------------
  <requestHandler name="standard" class="solr.KattaRequestHandler" 
default="true">
    <lst name="defaults">
        <str name="echoParams">explicit</str>
        <str name="shards">part-00000,part-00001,part-00002</str>
     </lst>
  </requestHandler>
----------------

  so in the proxy, we can use the request:
http://localhost:8080/solr-1395-katta-0.6.2-2patch/part/select/?q=a*&version=2.2&start=0&rows=10&indent=on&isShard=false&distrib=true&core=part

  the proxy will use the kattaRequest dispatch the query to katta 
datanodes(subproxy).

  in subproxy, when we start the embedded solr with subproxymulticore folder, 
which structure as follows:
   -subproxymulticore
   --customer
   ----conf
   ----data
   --part
   ----conf
   ----data
   --solr.xml

   exlusive the solrconfig.xml in part folder as follows, the others are same.
----------------
  <requestHandler name="standard" class="solr.SearchHandler" default="true">
    <!-- default values for query parameters -->
     <lst name="defaults">
       <str name="echoParams">explicit</str>
     </lst>
  </requestHandler>
------------------ 
  now, I correct some code of DeployableSolrKattaServer.java in patched solr as 
follows:
--------------------
        public DeployableSolrKattaServer() throws ParserConfigurationException,
                        IOException, SAXException {
//              super(getServerName(), new CoreContainer(getSolrHome()
//                              .getAbsolutePath(), getConfigFile()));
                //super(getServerName(), new CoreContainer());

//By JohnWu, we do not direct find the conf folder of a core, we find the 
solr.xml to add cores.

                super(getServerName(),new 
CoreContainer.Initializer().initialize());
                

        }

-------------------

add correct some code in SolrKattaServer.java

-------------------
        public SolrKattaServer(String defaultCoreName, CoreContainer 
coreContainer) {
                this.coreContainer = coreContainer;
                handler = new MultiEmbeddedSearchHandler(coreContainer);
                handler.init(new NamedList());
                //defaultCore = coreContainer.getCore(defaultCoreName);
                defaultCores = coreContainer.getCores();
//              if (defaultCore == null)
//                      throw new SolrException(ErrorCode.UNKNOWN, 
"defaultCore:"
//                                      + defaultCoreName + " could not be 
found");
                if (defaultCores == null)
                        throw new SolrException(ErrorCode.UNKNOWN, 
"defaultCore:"
                                        + defaultCoreName + " could not be 
found");
                //JohnWu add for multi-cores
                Iterator it = defaultCores.iterator();
                while(it.hasNext()){
                        handler.inform((SolrCore)it.next());
                }
                //handler.inform(defaultCore);
        }


        /**
         * The main method that executes requests from a KattaClient
         */
        @Override
        public KattaResponse request(String[] shards, KattaRequest request)
                        throws Exception {
                
                //JohnWu add it for multi cores, we need get the suitable core 
according to the shard
            SolrParams params = request.getParams();
            SolrParams required = params.required();
            String cname = required.get(CoreAdminParams.CORE);
            SolrCore core = coreContainer.getCore(cname);
            
            //need add some code to void the socre is null
            if (core != null) {
                        ModifiableSolrParams sp = new 
ModifiableSolrParams(request.getParams());
                        String shardsStr = StringUtils.arrayToString(shards);
                        sp.set(ShardParams.SHARDS, shardsStr);

                        if (log.isDebugEnabled()){
                                log.debug("SolrServer.request: " + nodeName + " 
shards:"
                                                + Arrays.asList(shards) + " 
request params:" + sp );
                        }

                        //remove by John
                        //SolrQueryRequestBase req = new 
LocalSolrQueryRequest(defaultCore, sp);
                        

                                SolrQueryRequestBase req = new 
LocalSolrQueryRequest(core, sp);
                                SolrQueryResponse resp = new 
SolrQueryResponse();
                                // Added by tom liu
                                // because exception would stop RPC
                                // so, must handle exception
                                try{
                                // add end
                                        
getRequestHandler(req).handleRequest(req, resp);
                                // Added by tom liu
                                }catch(SolrException ex){
                                        log.error(ex.getMessage(), ex);
                                }
                                // add end
                                NamedList nl = resp.getValues();
                                nl.add("QueriedShards", shards);
                                // Added by tom liu
                                SolrDocumentList sdl = 
(SolrDocumentList)nl.get("response");
                                if( sdl == null ){
                                        nl.add("response", new 
SolrDocumentList());
                                        if( log.isWarnEnabled() )
                                                
log.warn("SolrServer.SolrResponse: no response");
                                }
                                // add end
                                SolrResponse rsp = new SolrResponseBase();
                                rsp.setResponse(nl);
                                if (log.isDebugEnabled()){
                                        if( null != sdl ){
                                                
log.debug("SolrServer.SolrResponse: numFound=" + sdl.getNumFound() 
                                                                + ",start=" + 
sdl.getStart() + ",docs=" + sdl.size());
                                        }
                                        log.debug("termVectors=" + 
nl.get("termVectors"));
                                }
// By using shards[0] we guarantee that this response is tied to a known
// shard in the orignator, so that the results can be merged.
// The name and only 1 is allowed has to be one of the original query
// shards.

                                return new KattaResponse(shards[0], "", 0, rsp);
            }else{
                //maybe null is bad!
                System.out.println("------the core is null!!!!!!");
                return null;
            }                                   
                
                

        }

        // Added by tom liu
        // for supporting qt=...
        private MultiEmbeddedSearchHandler getRequestHandler(SolrQueryRequest 
request) {
            SolrParams params = request.getParams();
            if( params == null ) {
              params = new ModifiableSolrParams();
            }

            String qt = params.get( CommonParams.QT );
            if (qt != null) {   
                //JohnWu remove follow for multi-core
//              MultiEmbeddedSearchHandler myhandler = 
(MultiEmbeddedSearchHandler)defaultCore.getRequestHandler( qt );
//              if( myhandler == null ) {
//                throw new SolrException( SolrException.ErrorCode.BAD_REQUEST, 
"unknown handler: "+qt);
//              }
//              myhandler.setCoreContainer(coreContainer);
//              return myhandler;
                
                
                //JohnWu add for multi-core
                
                        Iterator it = defaultCores.iterator();
                        while(it.hasNext()){
                        MultiEmbeddedSearchHandler myhandler = 
(MultiEmbeddedSearchHandler)((SolrCore)it.next()).getRequestHandler( qt );
                        if( myhandler == null ) {
                          throw new SolrException( 
SolrException.ErrorCode.BAD_REQUEST, "unknown handler: "+qt);
                        }
                        myhandler.setCoreContainer(coreContainer);
                        return myhandler;
                        }

            }
                return handler;
        }

------------------

but now when the katta send the second query with ids to data node, the 
connection is closed.

INFO: [partSearch-00000#partSearch-00000] webapp=null path=/select 
params={start=0&ids=28aaa%2Caaa%2Cbbb&q=a*&core=part&isShard=true&rows=10} 
hits=3 status=0 QTime=12

please help me, and tell me why the process can not go through the whole 
process.

Thanks!

JohnWu


   
  

                
> Integrate Katta
> ---------------
>
>                 Key: SOLR-1395
>                 URL: https://issues.apache.org/jira/browse/SOLR-1395
>             Project: Solr
>          Issue Type: New Feature
>    Affects Versions: 1.4
>            Reporter: Jason Rutherglen
>            Priority: Minor
>             Fix For: 3.5, 4.0
>
>         Attachments: SOLR-1395.patch, SOLR-1395.patch, SOLR-1395.patch, 
> back-end.log, front-end.log, hadoop-core-0.19.0.jar, katta-core-0.6-dev.jar, 
> katta-solrcores.jpg, katta.node.properties, katta.zk.properties, 
> log4j-1.2.13.jar, solr-1395-1431-3.patch, solr-1395-1431-4.patch, 
> solr-1395-1431-katta0.6.patch, solr-1395-1431-katta0.6.patch, 
> solr-1395-1431.patch, solr-1395-katta-0.6.2-1.patch, 
> solr-1395-katta-0.6.2-2.patch, solr-1395-katta-0.6.2-3.patch, 
> solr-1395-katta-0.6.2.patch, solr-1395-katta-0.6.3-4.patch, 
> solr-1395-katta-0.6.3-5.patch, solr1395.jpg, test-katta-core-0.6-dev.jar, 
> zkclient-0.1-dev.jar, zookeeper-3.2.1.jar
>
>   Original Estimate: 336h
>  Remaining Estimate: 336h
>
> We'll integrate Katta into Solr so that:
> * Distributed search uses Hadoop RPC
> * Shard/SolrCore distribution and management
> * Zookeeper based failover
> * Indexes may be built using Hadoop

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: dev-h...@lucene.apache.org

Reply via email to