Changeset 30550


Ignore:
Timestamp:
2016-06-02T07:07:44+12:00 (8 years ago)
Author:
Georgiy Litvinov
Message:

At collection initialization stage added checks for activated Solr cores. In case Solr cores not loaded force Solr to load collection cores.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone3/src/java/org/greenstone/gsdl3/collection/Collection.java

    r29310 r30550  
    3232import org.apache.commons.lang3.StringUtils;
    3333import org.apache.log4j.Logger;
     34import org.apache.solr.client.solrj.SolrServerException;
     35import org.apache.solr.client.solrj.impl.HttpSolrServer;
     36import org.apache.solr.client.solrj.impl.HttpSolrServer.RemoteSolrException;
     37import org.apache.solr.client.solrj.request.CoreAdminRequest;
     38import org.apache.solr.client.solrj.response.CoreAdminResponse;
     39import org.apache.solr.common.params.CoreAdminParams.CoreAdminAction;
     40import org.apache.solr.common.util.NamedList;
    3441import org.greenstone.gsdl3.core.ModuleInterface;
    3542import org.greenstone.gsdl3.util.GSFile;
     
    137144        {
    138145            col_type = search.getAttribute(GSXML.TYPE_ATT);
    139         }
    140 
     146            //If use Solr check if cores loaded
     147            if (col_type.equals("solr"))
     148            {
     149                if (!loadSolrCores()) {
     150                    logger.error("Collection: couldn't configure collection: " + this.cluster_name + ", " + "Couldn't activate Solr cores");
     151                    return false;
     152                }
     153            }
     154        }
     155       
    141156        Element browse = (Element) GSXML.getChildByTagName(coll_config_xml, GSXML.INFODB_ELEM);
    142157        if (browse != null)
     
    909924        return response;
    910925    }
     926
     927    private boolean loadSolrCores() {
     928
     929        // Solr servlet url
     930        String solrUrl = "http://localhost:8383/solr/";
     931        HttpSolrServer solrServer = new HttpSolrServer(solrUrl);
     932        // Max retries
     933        solrServer.setMaxRetries(1);
     934        // Connection Timeout
     935        solrServer.setConnectionTimeout(3000);
     936        //Cores
     937        String coreSecName = this.router.getSiteName() + "-" + cluster_name + "-sidx";
     938        String coreDocName = this.router.getSiteName() + "-" + cluster_name + "-didx";
     939
     940        if (!checkSolrCore(coreSecName, solrServer)){
     941            if (!activateSolrCore(coreSecName, solrServer)){
     942                logger.error("Couldn't activate Solr core " + coreSecName + " for collection " + cluster_name);
     943                return false;
     944            }
     945        }
     946        if (!checkSolrCore(coreDocName, solrServer)){
     947            if (!activateSolrCore(coreDocName, solrServer)){
     948                logger.error("Couldn't activate Solr core " + coreDocName + " for collection " + cluster_name);
     949                return false;
     950            }
     951        }
     952        return true;
     953    }
     954
     955    private boolean checkSolrCore(String coreName, HttpSolrServer solrServer) {
     956
     957        CoreAdminRequest adminRequest = new CoreAdminRequest();
     958        adminRequest.setAction(CoreAdminAction.STATUS);
     959        adminRequest.setCoreName(coreName);
     960
     961        try {
     962            CoreAdminResponse adminResponse = adminRequest.process(solrServer);
     963            NamedList<NamedList<Object>> coreStatus = adminResponse.getCoreStatus();
     964            NamedList<Object> coreList = coreStatus.getVal(0);
     965            if (coreList != null) {
     966                if (coreList.get("name") == null) {
     967                    logger.warn("Solr core " + coreName + " for collection " + cluster_name + " not exists.");
     968                    return false;
     969                }
     970            }
     971           
     972        } catch (SolrServerException e) {
     973            e.printStackTrace();
     974            return false;
     975        } catch (IOException e) {
     976            e.printStackTrace();
     977            return false;
     978        } catch (RemoteSolrException e1){
     979            e1.printStackTrace();
     980            return false;
     981        }
     982        return true;
     983    }
     984   
     985    private boolean activateSolrCore(String coreName, HttpSolrServer solrServer) {
     986       
     987        String dataDir = GSFile.collectionIndexDir(site_home, cluster_name) + File.separator + coreName.substring(coreName.length() - 4);
     988        String instanceDir = GSFile.collectionEtcDir(site_home, cluster_name);
     989   
     990        try {
     991            CoreAdminRequest.createCore(coreName, instanceDir, solrServer, "", "", dataDir, "");
     992            logger.warn("Solr core " + coreName + " for collection " + cluster_name + " activated.");
     993        } catch (SolrServerException e1) {
     994            e1.printStackTrace();
     995            return false;
     996        } catch (IOException e1) {
     997            e1.printStackTrace();
     998            return false;
     999        } catch (RemoteSolrException e1){
     1000            logger.error("Activation solr core " + coreName + " for collection " + cluster_name + "failed.");
     1001            e1.printStackTrace();
     1002            return false;
     1003        }
     1004
     1005        return true;
     1006    }
     1007
    9111008}
     1009
Note: See TracChangeset for help on using the changeset viewer.