Changeset 30564


Ignore:
Timestamp:
2016-06-04T23:14:01+12:00 (5 years ago)
Author:
Georgiy Litvinov
Message:

Load Solr cores on search service start.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • gs3-extensions/solr/trunk/src/src/java/org/greenstone/gsdl3/service/GS2SolrSearch.java

    r30148 r30564  
    1919package org.greenstone.gsdl3.service;
    2020
     21import java.io.File;
     22import java.io.IOException;
    2123// Greenstone classes
    2224import java.util.ArrayList;
     
    3133import org.apache.log4j.Logger;
    3234import org.apache.solr.client.solrj.SolrServer;
     35import org.apache.solr.client.solrj.SolrServerException;
    3336import org.apache.solr.client.solrj.impl.HttpSolrServer;
     37import org.apache.solr.client.solrj.impl.HttpSolrServer.RemoteSolrException;
     38import org.apache.solr.client.solrj.request.CoreAdminRequest;
     39import org.apache.solr.client.solrj.response.CoreAdminResponse;
    3440import org.apache.solr.client.solrj.response.FacetField;
     41import org.apache.solr.common.params.CoreAdminParams.CoreAdminAction;
     42import org.apache.solr.common.util.NamedList;
    3543import org.greenstone.LuceneWrapper4.SharedSoleneQueryResult;
    3644import org.greenstone.gsdl3.util.FacetWrapper;
     
    4452import org.w3c.dom.Element;
    4553import org.w3c.dom.NodeList;
     54
     55import org.apache.solr.client.solrj.impl.HttpSolrServer.RemoteSolrException;
     56import org.apache.solr.client.solrj.request.CoreAdminRequest;
     57import org.apache.solr.client.solrj.response.CoreAdminResponse;
     58import org.apache.solr.common.params.CoreAdminParams.CoreAdminAction;
     59import org.apache.solr.common.util.NamedList;
    4660
    4761public class GS2SolrSearch extends SharedSoleneGS2FieldSearch
     
    111125          _facets.add(((Element)facet_list.item(i)).getAttribute(GSXML.SHORTNAME_ATT));
    112126        }
     127       
     128        //If use Solr check if cores loaded
     129        if (!loadSolrCores()) {
     130            logger.error("Collection: couldn't configure collection: " + this.cluster_name + ", "
     131                    + "Couldn't activate Solr cores");
     132             return false;
     133        }
    113134        // NodeList configIndexElems = searchElem.getElementsByTagName(GSXML.INDEX_ELEM);
    114135
     
    324345       
    325346        SolrServer solr_core = null;
    326 
     347        //CHECK HERE
    327348        if (!solr_core_cache.containsKey(core_name))
    328349        {           
     
    485506    return collection_core_name_prefix;
    486507    }
     508   
     509    private boolean loadSolrCores() {
     510       
     511        HttpSolrServer solrServer = new HttpSolrServer(solr_servlet_base_url);
     512        // Max retries
     513        solrServer.setMaxRetries(1);
     514        // Connection Timeout
     515        solrServer.setConnectionTimeout(3000);
     516        //Cores
     517        String coreSecName = getCollectionCoreNamePrefix() + "-sidx";
     518        String coreDocName = getCollectionCoreNamePrefix() + "-didx";
     519
     520
     521        if (!checkSolrCore(coreSecName, solrServer)){
     522            if (!activateSolrCore(coreSecName, solrServer)){
     523                logger.error("Couldn't activate Solr core " + coreSecName + " for collection " + cluster_name);
     524                return false;
     525            }
     526        }
     527        if (!checkSolrCore(coreDocName, solrServer)){
     528            if (!activateSolrCore(coreDocName, solrServer)){
     529                logger.error("Couldn't activate Solr core " + coreDocName + " for collection " + cluster_name);
     530                return false;
     531            }
     532        }
     533        return true;
     534    }
     535
     536    private boolean checkSolrCore(String coreName, HttpSolrServer solrServer) {
     537        CoreAdminRequest adminRequest = new CoreAdminRequest();
     538        adminRequest.setAction(CoreAdminAction.STATUS);
     539        adminRequest.setCoreName(coreName);
     540
     541        try {
     542            CoreAdminResponse adminResponse = adminRequest.process(solrServer);
     543            NamedList<NamedList<Object>> coreStatus = adminResponse.getCoreStatus();
     544            NamedList<Object> coreList = coreStatus.getVal(0);
     545            if (coreList != null) {
     546                if (coreList.get("name") == null) {
     547                    logger.warn("Solr core " + coreName + " for collection " + cluster_name + " not exists.");
     548                    return false;
     549                }
     550            }
     551           
     552        } catch (SolrServerException e) {
     553            e.printStackTrace();
     554            return false;
     555        } catch (IOException e) {
     556            e.printStackTrace();
     557            return false;
     558        } catch (RemoteSolrException e1){
     559            logger.error("Check solr core " + coreName + " for collection " + cluster_name + " failed.");
     560            e1.printStackTrace();
     561            return false;
     562        }
     563        return true;
     564    }
     565   
     566    private boolean activateSolrCore(String coreName, HttpSolrServer solrServer) {
     567        String dataDir = GSFile.collectionIndexDir(site_home, cluster_name) + File.separator + coreName.substring(coreName.length() - 4);
     568        String instanceDir = GSFile.collectionEtcDir(site_home, cluster_name);
     569   
     570        try {
     571            CoreAdminRequest.createCore(coreName, instanceDir, solrServer, "", "", dataDir, "");
     572            logger.warn("Solr core " + coreName + " for collection " + cluster_name + " activated.");
     573        } catch (SolrServerException e1) {
     574            e1.printStackTrace();
     575            return false;
     576        } catch (IOException e1) {
     577            e1.printStackTrace();
     578            return false;
     579        } catch (RemoteSolrException e1){
     580            logger.error("Activation solr core " + coreName + " for collection " + cluster_name + " failed.");
     581            e1.printStackTrace();
     582            return false;
     583        }
     584
     585        return true;
     586    }
     587   
    487588}
Note: See TracChangeset for help on using the changeset viewer.