Changeset 30564 for gs3-extensions

Show
Ignore:
Timestamp:
04.06.2016 23:14:01 (3 years ago)
Author:
litvinovg
Message:

Load Solr cores on search service start.

Files:
1 modified

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}