knguyen     2005/05/27 16:38:45 CEST

  Modified files:        (Branch: JAHIA-4-1-BRANCH)
    src/java/org/jahia/services/search IndexationJobDetail.java 
                                       JahiaSearchBaseService.java 
                                       ScheduledSiteIndexationJob.java 
                                       SiteIndexationJobDetail.java 
  Log:
  - optimize restore version and search indexation
  - other issue when shutdowning search service
  
  Revision        Changes    Path
  1.1.2.4         +10 -0     
jahia/src/java/org/jahia/services/search/IndexationJobDetail.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/IndexationJobDetail.java.diff?r1=1.1.2.3&r2=1.1.2.4&f=h
  1.42.2.15.2.12  +67 -56    
jahia/src/java/org/jahia/services/search/JahiaSearchBaseService.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/JahiaSearchBaseService.java.diff?r1=1.42.2.15.2.11&r2=1.42.2.15.2.12&f=h
  1.1.2.6         +34 -13    
jahia/src/java/org/jahia/services/search/ScheduledSiteIndexationJob.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/ScheduledSiteIndexationJob.java.diff?r1=1.1.2.5&r2=1.1.2.6&f=h
  1.1.2.4         +13 -7     
jahia/src/java/org/jahia/services/search/SiteIndexationJobDetail.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/SiteIndexationJobDetail.java.diff?r1=1.1.2.3&r2=1.1.2.4&f=h
  
  
  
  Index: IndexationJobDetail.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/src/java/org/jahia/services/search/Attic/IndexationJobDetail.java,v
  retrieving revision 1.1.2.3
  retrieving revision 1.1.2.4
  diff -u -r1.1.2.3 -r1.1.2.4
  --- IndexationJobDetail.java  23 May 2005 09:11:35 -0000      1.1.2.3
  +++ IndexationJobDetail.java  27 May 2005 14:38:44 -0000      1.1.2.4
  @@ -17,6 +17,8 @@
   
       private long sleepInterval = 5000;
   
  +    private boolean shutdown = false;
  +
       public IndexationJobDetail() {
           super();
       }
  @@ -58,4 +60,12 @@
           this.sleepInterval = sleepInterval;
       }
   
  +    public boolean isShutdown() {
  +        return shutdown;
  +    }
  +
  +    public void setShutdown(boolean shutdown) {
  +        this.shutdown = shutdown;
  +    }
  +
   }
  
  
  
  Index: JahiaSearchBaseService.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/src/java/org/jahia/services/search/Attic/JahiaSearchBaseService.java,v
  retrieving revision 1.42.2.15.2.11
  retrieving revision 1.42.2.15.2.12
  diff -u -r1.42.2.15.2.11 -r1.42.2.15.2.12
  --- JahiaSearchBaseService.java       26 May 2005 10:20:36 -0000      
1.42.2.15.2.11
  +++ JahiaSearchBaseService.java       27 May 2005 14:38:44 -0000      
1.42.2.15.2.12
  @@ -125,7 +125,6 @@
           String[] stopWorld = {};
           analyzer = new StandardAnalyzer (stopWorld);
           indexAnalyzer = new StandardAnalyzer (stopWorld,true);
  -
           searchHandlers = new Properties ();
           searchHandlers.setProperty (JahiaSearcher.PAGE_SEARCHER, 
"doPageSearch");
           searchHandlers.setProperty (JahiaSearcher.CONTAINER_SEARCHER,
  @@ -152,6 +151,8 @@
       public void init (SettingsBean jSettings)
           throws JahiaInitializationException {
   
  +        logger.debug("Jahia Main Thread name=" + 
Thread.currentThread().getName());
  +
           if ( !this.isInitialized() ){
   
               indexOrders = new Vector();
  @@ -245,6 +246,8 @@
                   backgroundIndexingThread.setPriority(priority);
                   backgroundIndexingThread.setDaemon(true);
                   backgroundIndexingThread.start(); // start background thread
  +                logger.debug("backgroundIndexingThread name=" + 
backgroundIndexingThread.getName());
  +
               }
   
               logger.debug("Initialized");
  @@ -342,20 +345,6 @@
           }
       }
   
  -    public synchronized void shutdown() throws JahiaException {
  -        indexingThreadActivated = false;
  -        synchronized(this){
  -            notifyAll();
  -        }
  -        // give it a change to finish right now if it's not processing 
anything.
  -        if ( this.ramIndexer != null ){
  -            this.ramIndexer.shutDown();
  -        }
  -
  -        Thread.yield();
  -        mIsServiceInitialized = false;
  -    }
  -
       public int getNbDocumentsInQueue(){
           try {
               return this.indexOrders.size();
  @@ -782,49 +771,23 @@
               removeFromSearchEngine (siteId, JahiaSearchConstant.FIELD_KEY,
                       fieldId + "_" + wfState + "_" + languageCode);
           } else {
  -            IndexReader reader = null;
  -            try {
  -                reader = this.getIndexReader (siteId);
   
  -                // instanciate the searcher with the site index.
  -                Searcher searcher = new IndexSearcher (reader);
  +            JahiaSite site = null;
  +            ArrayList localeList = new ArrayList ();
  +            ServicesRegistry sReg = ServicesRegistry.getInstance ();
  +            try {
  +                site = 
ServicesRegistry.getInstance().getJahiaSitesService().getSite(siteId);
   
  -                StringBuffer buff = new StringBuffer ("(");
  -                buff.append (JahiaSearchConstant.FIELD_FIELDID);
  -                buff.append (":");
  -                buff.append (fieldId);
  -                buff.append (" AND ");
  -                buff.append (JahiaSearchConstant.FIELD_WORKFLOW_STATE);
  -                buff.append (":");
  -                buff.append (wfState);
  -                buff.append (")");
  -
  -                // instanciate the query
  -                Query query = QueryParser.parse (buff.toString (),
  -                        JahiaSearchConstant.FIELD_VALUE,
  -                        analyzer);
  -
  -                // search and remove all matching document
  -                Hits hits = searcher.search (query);
  -                int length = hits.length ();
  -                for (int i = 0; i < length; i++) {
  -                    Document doc = hits.doc(i);
  -                    removeFromSearchEngine (siteId, 
JahiaSearchConstant.FIELD_KEY,
  -                    fieldId + "_" + wfState + "_" +
  -                    doc.get(JahiaSearchConstant.FIELD_LANGUAGE_CODE));
  -                }
  -            } catch (Throwable t) {
  -                logger.debug ("Exception occured when removing field["
  -                        + fieldId + "], siteId[" + siteId + "]", t);
  -            } finally {
  -                if (reader != null) {
  -                    try {
  -                        reader.close ();
  -                    } catch (Throwable t) {
  -                        logger.debug ("Exception occured when closing reader 
"
  -                                + "siteId[" + siteId + "]", t);
  +                Vector siteLanguageSettings = site.getLanguageSettings ();
  +                if (siteLanguageSettings != null) {
  +                    for (int i = 0; i < siteLanguageSettings.size (); i++) {
  +                        SiteLanguageSettings curSetting = 
(SiteLanguageSettings)
  +                                siteLanguageSettings.elementAt (i);
  +                            
removeFieldFromSearchEngine(siteId,fieldId,workflowState,curSetting.getCode());
                       }
                   }
  +            } catch (JahiaException je ){
  +                logger.debug("Error removing field fieldId=" + fieldId, je);
               }
           }
       }
  @@ -856,7 +819,7 @@
           boolean result = true;
           if ( job != null ) {
               try {
  -                job.setKilled(true);
  +                job.setShutdown(true);
                   
ServicesRegistry.getInstance().getSchedulerService().unscheduleJob(triggerName,
                           Scheduler.DEFAULT_GROUP);
               } catch (JahiaException je) {
  @@ -885,6 +848,8 @@
                                 boolean deleteIndexFirst,
                                 boolean abortPreviousJob) {
   
  +        logger.debug("calling Thread name=" + 
Thread.currentThread().getName());
  +
           if ( !this.localIndexing ){
               logger.info("Ignore re-indexing the site because local indexing 
is disabled !");
               return false;
  @@ -1023,11 +988,13 @@
        */
       public void run () {
   
  +        logger.debug("search service is running in Thread name=" + 
Thread.currentThread().getName());
  +
           SiteIndexer siteIndexer = null;
           Integer siteId = null;
           HashMap siteIndexers = new HashMap();
   
  -        while (indexingThreadActivated) {
  +        while (this.isInitialized() && indexingThreadActivated) {
   
               Vector v = new Vector();
   
  @@ -1651,6 +1618,50 @@
           return null;
       }
   
  +    public synchronized void shutdown() throws JahiaException {
  +        super.shutdown();
  +        indexingThreadActivated = false;
  +        mIsServiceInitialized = false;
  +        synchronized(this){
  +            notifyAll();
  +        }
  +        try {
  +            if ( this.ramIndexer != null ){
  +                this.ramIndexer.shutDown();
  +            }
  +        } catch ( Throwable t ){
  +        }
  +        try {
  +            if ( this.scheduledIndexationJob != null ) {
  +                this.scheduledIndexationJob.setShutdown(true);
  +            }
  +        } catch ( Throwable t ){
  +        }
  +
  +        this.shutdowSiteIndexationJobs();
  +
  +        Thread.yield();
  +    }
  +
  +    private synchronized void shutdowSiteIndexationJobs(){
  +        if ( this.fullSiteIndexationJobsCache == null ){
  +            return;
  +        }
  +        Object[] keys = this.fullSiteIndexationJobsCache.keys();
  +        SiteIndexationJobDetail jobDetail = null;
  +        for ( int i=0; i<keys.length; i++ ){
  +            try {
  +                jobDetail = (SiteIndexationJobDetail)
  +                        this.fullSiteIndexationJobsCache.get(keys[i]);
  +                if ( jobDetail != null ){
  +                    jobDetail.setShutdown(true);
  +                }
  +            } catch ( Throwable t ){
  +            }
  +        }
  +    }
  +
  +
       protected class SiteIndexer {
   
           private int UNDEFINED = 0;
  
  
  
  Index: ScheduledSiteIndexationJob.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/src/java/org/jahia/services/search/Attic/ScheduledSiteIndexationJob.java,v
  retrieving revision 1.1.2.5
  retrieving revision 1.1.2.6
  diff -u -r1.1.2.5 -r1.1.2.6
  --- ScheduledSiteIndexationJob.java   24 May 2005 18:13:40 -0000      1.1.2.5
  +++ ScheduledSiteIndexationJob.java   27 May 2005 14:38:44 -0000      1.1.2.6
  @@ -15,6 +15,7 @@
   import org.jahia.data.fields.LoadFlags;
   import org.jahia.exceptions.JahiaException;
   import org.jahia.params.ParamBean;
  +import org.jahia.bin.Jahia;
   
   import java.util.*;
   
  @@ -36,6 +37,18 @@
       public void execute (JobExecutionContext context)
           throws JobExecutionException {
   
  +        logger.debug("Site Indexation Job executed in Thread name=" + 
Thread.currentThread().getName());
  +        ParamBean tjParams = Jahia.getThreadParamBean();
  +        if ( tjParams == null ) {
  +            logger.debug("ThreadParamBean is null");
  +        } else {
  +            try {
  +                logger.debug("SessionId =" + tjParams.getSessionID());
  +            } catch ( Throwable t ){
  +                logger.debug("Exception occured checking sessionId",t);
  +            }
  +        }
  +
           SiteIndexationJobDetail jobDetail =
                   (SiteIndexationJobDetail)context.getJobDetail();
           JobDataMap jobDataMap = jobDetail.getJobDataMap();
  @@ -75,30 +88,38 @@
           // Index the fields
           JahiaField aField;
           int size = listFieldID.size();
  +        boolean success = true;
           for (int i = 0; i < size; i++) {
               int fieldID = ( (Integer) listFieldID.get(i)).intValue();
  +            if ( jobDetail.isShutdown() ){
  +                success = false;
  +                break;
  +            }
               while ( 
sReg.getJahiaSearchService().getNbDocumentsInQueue()>1000 ) {
  -                if ( jobDetail.isKilled() ) {
  -                    jobDetail.setDone(false);
  -                    jobDetail.setEndTime(new Date().getTime());
  -                    
jobDetail.setStatus(SiteIndexationJobDetail.ERROR_STATUS);
  -                    return;
  +                if ( jobDetail.isShutdown() ){
  +                    success = false;
  +                    break;
                   }
                   try {
                       Thread.sleep(2000);
                   } catch ( java.lang.InterruptedException ie ){
                   }
               }
  -            try {
  -                
sReg.getJahiaSearchService().indexField(fieldID,false,jParams,false);
  -            }
  -            catch (Throwable t) {
  -                // page could not exists
  -                logger.debug("Error re-indexing field id=" + fieldID);
  +            if ( !jobDetail.isShutdown() ){
  +                try {
  +                    
sReg.getJahiaSearchService().indexField(fieldID,false,jParams,false);
  +                }
  +                catch (Throwable t) {
  +                    // page could not exists
  +                    logger.debug("Error re-indexing field id=" + fieldID);
  +                }
  +            } else {
  +                success = false;
  +                break;
               }
           }
  -        jobDetail.setDone(true);
  +        jobDetail.setDone(success);
           jobDetail.setEndTime(new Date().getTime());
  -        jobDetail.setStatus(SiteIndexationJobDetail.SUCCESS_STATUS);
  +        
jobDetail.setStatus(success?SiteIndexationJobDetail.SUCCESS_STATUS:SiteIndexationJobDetail.ERROR_STATUS);
       }
   }
  
  
  
  Index: SiteIndexationJobDetail.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/src/java/org/jahia/services/search/Attic/SiteIndexationJobDetail.java,v
  retrieving revision 1.1.2.3
  retrieving revision 1.1.2.4
  diff -u -r1.1.2.3 -r1.1.2.4
  --- SiteIndexationJobDetail.java      23 May 2005 19:35:15 -0000      1.1.2.3
  +++ SiteIndexationJobDetail.java      27 May 2005 14:38:44 -0000      1.1.2.4
  @@ -3,6 +3,7 @@
   import org.quartz.JobDetail;
   
   import java.util.Vector;
  +import java.util.Date;
   
   /**
    * Created by IntelliJ IDEA.
  @@ -22,7 +23,7 @@
   
       private boolean done = false;
   
  -    private boolean killed = false;
  +    private boolean shutdown = false;
   
       private int status = SUCCESS_STATUS;
   
  @@ -64,11 +65,11 @@
           this.endTime = endTime;
       }
   
  -    public boolean isDone() {
  +    public synchronized boolean isDone() {
           return done;
       }
   
  -    public void setDone(boolean done) {
  +    public synchronized void setDone(boolean done) {
           this.done = done;
       }
   
  @@ -80,12 +81,17 @@
           this.status = status;
       }
   
  -    public boolean isKilled() {
  -        return killed;
  +    public synchronized boolean isShutdown() {
  +        return shutdown;
       }
   
  -    public void setKilled(boolean killed) {
  -        this.killed = killed;
  +    public synchronized void setShutdown(boolean shutdown) {
  +        this.shutdown = shutdown;
  +        if ( !this.isDone() ){
  +            setDone(false);
  +            setEndTime(new Date().getTime());
  +            setStatus(SiteIndexationJobDetail.ERROR_STATUS);
  +        }
       }
       
   }
  

Reply via email to