Changeset 30550

Show
Ignore:
Timestamp:
02.06.2016 07:07:44 (3 years ago)
Author:
litvinovg
Message:

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

Files:
1 modified

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