knguyen     2005/05/18 15:54:59 CEST

  Modified files:        (Branch: JAHIA-4-1-BRANCH)
    src/java/org/jahia/services/search AddedField.java 
                                       JahiaSearchBaseService.java 
                                       JahiaSearchService.java 
  Added files:           (Branch: JAHIA-4-1-BRANCH)
    src/java/org/jahia/services/search 
                                       ScheduledSiteIndexationJob.java 
                                       SiteIndexationJobDetail.java 
  Log:
  - put full indexation of site in scheduled job.
  - remove server full lock when indexing a site
  
  Revision       Changes    Path
  1.14.2.8.2.6   +4 -1      
jahia/src/java/org/jahia/services/search/AddedField.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/AddedField.java.diff?r1=1.14.2.8.2.5&r2=1.14.2.8.2.6&f=h
  1.42.2.15.2.4  +87 -105   
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.3&r2=1.42.2.15.2.4&f=h
  1.10.4.2.2.2   +25 -3     
jahia/src/java/org/jahia/services/search/JahiaSearchService.java
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/JahiaSearchService.java.diff?r1=1.10.4.2.2.1&r2=1.10.4.2.2.2&f=h
  1.1.2.1        +92 -0     
jahia/src/java/org/jahia/services/search/ScheduledSiteIndexationJob.java (new)
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/ScheduledSiteIndexationJob.java?rev=1.1.2.1&content-type=text/plain
  1.1.2.1        +71 -0     
jahia/src/java/org/jahia/services/search/SiteIndexationJobDetail.java (new)
http://jahia.mine.nu:8080/cgi-bin/cvsweb.cgi/jahia/src/java/org/jahia/services/search/SiteIndexationJobDetail.java?rev=1.1.2.1&content-type=text/plain
  
  
  
  
  
  
  
  
  
  Index: AddedField.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/src/java/org/jahia/services/search/Attic/AddedField.java,v
  retrieving revision 1.14.2.8.2.5
  retrieving revision 1.14.2.8.2.6
  diff -u -r1.14.2.8.2.5 -r1.14.2.8.2.6
  --- AddedField.java   17 May 2005 12:41:20 -0000      1.14.2.8.2.5
  +++ AddedField.java   18 May 2005 13:54:58 -0000      1.14.2.8.2.6
  @@ -156,10 +156,13 @@
       private void prepareFieldValue () {
   
           synchronized ( alreadyLoadedValues ) {
  -            if (alreadyLoadedValues.booleanValue() || this.getValues() == 
null) {
  +            if (alreadyLoadedValues.booleanValue()) {
                   return;
               }
               alreadyLoadedValues = Boolean.TRUE;
  +            if ( this.getValues() == null ){
  +                return;
  +            }
           }
   
           ExtractedDocument extDoc = null;
  
  
  
  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.3
  retrieving revision 1.42.2.15.2.4
  diff -u -r1.42.2.15.2.3 -r1.42.2.15.2.4
  --- JahiaSearchBaseService.java       27 Apr 2005 13:41:11 -0000      
1.42.2.15.2.3
  +++ JahiaSearchBaseService.java       18 May 2005 13:54:58 -0000      
1.42.2.15.2.4
  @@ -103,6 +103,7 @@
       private HashMap writers = new HashMap();
       private HashMap readers = new HashMap();
       private HashMap ramDirs = new HashMap();
  +    private HashMap scheduledJobs = new HashMap();
   
       /**
        * Constructor
  @@ -719,125 +720,107 @@
   
       
//--------------------------------------------------------------------------
       /**
  -     * Re-index a full site.
  -     * Should be called under particular situations ( time consuming ).
  +     * Return the current site's indexation job detail if any.
        *
        * @param siteID
  -     * @param jParams
  +     * @return
  +     */
  +    public SiteIndexationJobDetail getSiteIndexationJob (int siteID){
  +        String jobName = "siteScheduledIndexation_" + String.valueOf(siteID) 
+ "_Job";
  +        SiteIndexationJobDetail job = 
(SiteIndexationJobDetail)scheduledJobs.get(jobName);
  +        return job;
  +    }
  +
  +    
//--------------------------------------------------------------------------
  +    /**
  +     * Abort site indexation.
        *
  -     * @return boolean false on error.
  +     * @param siteID
  +     * @return
        */
  -    public boolean indexSite (int siteID, ParamBean jParams) {
  -        // start the chrono...
  -        long startTime = JahiaChrono.getInstance ().start ();
  +    public boolean abortSiteIndexation (int siteID) {
  +        String jobName = "siteScheduledIndexation_" + String.valueOf(siteID) 
+ "_Job";
  +        String triggerName = "siteScheduledIndexation_" + 
String.valueOf(siteID) + "_Trigger";
  +        JobDetail job = (JobDetail)scheduledJobs.get(jobName);
  +        boolean result = true;
  +        if ( job != null ) {
  +            try {
  +                
ServicesRegistry.getInstance().getSchedulerService().unscheduleJob(triggerName,
  +                        Scheduler.DEFAULT_GROUP);
  +            } catch (JahiaException je) {
  +                logger.error("Error aborting site indexation job", je);
  +                result = false;
  +            } finally {
  +                scheduledJobs.remove(jobName);
  +                job = null;
  +            }
  +        }
  +        return result;
  +    }
  +
  +    
//--------------------------------------------------------------------------
  +    /**
  +     * Re-index a full site.
  +     *
  +     * @param siteID
  +     * @param jParams
  +     * @param deleteIndexFirst
  +     * @param abortPreviousJob
  +     * @return
  +     */
  +    public boolean indexSite (int siteID,
  +                              ParamBean jParams, 
  +                              boolean deleteIndexFirst,
  +                              boolean abortPreviousJob) {
   
           if ( !this.localIndexing ){
               logger.info("Ignore re-indexing the site because local indexing 
is disabled !");
               return false;
           }
   
  -        RAMDirectory ramDir = new RAMDirectory ();
  -        IndexWriter writer = null;
  -        IndexReader reader = null;
  -        boolean result = false;
  -
  -        try {
  +        String jobName = "siteScheduledIndexation_" + String.valueOf(siteID) 
+ "_Job";
  +        String triggerName = "siteScheduledIndexation_" + 
String.valueOf(siteID) + "_Trigger";
  +        SiteIndexationJobDetail job = 
(SiteIndexationJobDetail)scheduledJobs.get(jobName);
   
  -            // Override the old index
  -            try {
  -                writer = getIndexWriter(siteID, this.analyzer, true);
  -            } catch ( Throwable t ){
  -                logger.debug("Error creating the search index", t);
  -                return false;
  -            }
  -            if ( writer != null ){
  +        if ( abortPreviousJob ){
  +            if ( job != null ) {
                   try {
  -                    writer.close();
  -                } catch ( Throwable t ){
  -                    logger.debug("Error closing writer",t);
  -                }
  -            }
  -
  -            // Open RAM index writer
  -            writer = new IndexWriter (ramDir, this.analyzer, true);
  -
  -            ServicesRegistry sReg = ServicesRegistry.getInstance ();
  -
  -            // init the JahiaContentFieldFacade
  -            ArrayList localeList = new ArrayList ();
  -            Vector siteLanguageSettings = jParams.getSite 
().getLanguageSettings ();
  -            if (siteLanguageSettings != null) {
  -                for (int i = 0; i < siteLanguageSettings.size (); i++) {
  -                    SiteLanguageSettings curSetting = (SiteLanguageSettings)
  -                            siteLanguageSettings.elementAt (i);
  -                    if (curSetting.isActivated ()) {
  -                        Locale tempLocale = LanguageCodeConverters.
  -                                languageCodeToLocale (curSetting.
  -                                getCode ());
  -                        localeList.add (tempLocale);
  -                    }
  +                    
ServicesRegistry.getInstance().getSchedulerService().unscheduleJob(triggerName,
  +                            Scheduler.DEFAULT_GROUP);
  +                } catch (JahiaException je) {
  +                    logger.error("Error aborting site indexation job", je);
  +                } finally {
  +                    scheduledJobs.remove(jobName);
  +                    job = null;
                   }
               }
  -
  -            reader = this.getIndexReader(siteID);
  +        } else {
  +            if ( job != null && !job.isDone() ){
  +                // job still running
  +                return true;
  +            }
  +        }
  +        if ( job == null || job.isDone() ) {
  +             job = new SiteIndexationJobDetail(jobName, 
Scheduler.DEFAULT_GROUP,
  +                                      ScheduledSiteIndexationJob.class);
  +            JobDataMap jobDataMap = new JobDataMap();
  +            jobDataMap.put("jParams",jParams);
  +            jobDataMap.put("siteId",siteID);
  +            job.setJobDataMap(jobDataMap);
  +
  +            SimpleTrigger trigger = new SimpleTrigger(triggerName,
  +                                        Scheduler.DEFAULT_GROUP);
  +            scheduledJobs.put(jobName,job);
               try {
  -
  -                // Index the fields
  -                JahiaField aField;
  -                Vector listFieldID = 
sReg.getJahiaFieldService().getAllFieldIDs(
  -                    siteID);
  -                int size = listFieldID.size();
  -                for (int i = 0; i < size; i++) {
  -                    int fieldID = ( (Integer) listFieldID.get(i)).intValue();
  -
  -                    try {
  -                        JahiaContentFieldFacade jahiaContentFieldFacade =
  -                            new JahiaContentFieldFacade(fieldID, 
LoadFlags.ALL,
  -                            jParams, localeList, false);
  -                        Enumeration enum = 
jahiaContentFieldFacade.getFields();
  -                        while (enum.hasMoreElements()) {
  -                            aField = (JahiaField) enum.nextElement();
  -                            if (aField.getVersionID() !=
  -                                EntryLoadRequest.DELETED_WORKFLOW_STATE) {
  -                                indexField(aField, aField.getWorkflowState(),
  -                                           writer, reader);
  -                            }
  -                        }
  -                    }
  -                    catch (Throwable t) {
  -                        // page could not exists
  -                        t.printStackTrace();
  -                    }
  -                }
  -            } finally {
  -                closeIndexReader(reader);
  -            }
  -
  -            // Close RAM index writer.
  -            writer.close ();
  -
  -            // Open FS index writer.
  -            writer = getIndexWriter (siteID, this.analyzer, true);
  -            if (writer == null) {
  -                logger.debug ("Search Engine : Index writer is null. Cannot 
Reindex the site");
  -                return false;
  +                
ServicesRegistry.getInstance().getSchedulerService().unscheduleJob(trigger.getName(),
  +                        Scheduler.DEFAULT_GROUP);
  +                
ServicesRegistry.getInstance().getSchedulerService().scheduleJob(
  +                    job, trigger);
  +            } catch (JahiaException je) {
  +                logger.error("Error while scheduling site indexation 
siteId=" + siteID, je);
               }
  -            // Move indexes from RAM to FS.
  -            Directory[] dirs = {ramDir};
  -            writer.addIndexes (dirs);
  -            result = true;
  -
  -        } catch (Throwable t) {
  -            logger.debug ("Error while indexing site:", t);
  -        } finally {
  -            closeIndexWriter (writer);
  -            ramDir = null;
           }
  -
  -        logger.info ("indexing time ["
  -                + JahiaChrono.getInstance ().read (startTime) +
  -                "ms]");
  -        return result;
  +        return true;
       }
   
       
//--------------------------------------------------------------------------
  @@ -1189,6 +1172,8 @@
           Term term = new Term (indObj.getKeyFieldName (), indObj.getKey ());
           removeDoc (indObj.getSiteId (), term, reader);
   
  +        startTime = System.currentTimeMillis();
  +
           IndexWriter ramWriter = null;
           RAMDirectory ramDir = null;
           boolean closeWriter = false;
  @@ -1221,9 +1206,6 @@
               ramWriter.close();
   
               writer.addIndexes(new Directory[] { ramDir });
  -
  -            //writer.addDocument(doc);
  -
           } catch (Throwable t) {
               logger.error ("Error while indexing object " + indObj.getKey () 
+ ":", t);
           } finally {
  
  
  
  Index: JahiaSearchService.java
  ===================================================================
  RCS file: 
/home/cvs/repository/jahia/src/java/org/jahia/services/search/Attic/JahiaSearchService.java,v
  retrieving revision 1.10.4.2.2.1
  retrieving revision 1.10.4.2.2.2
  diff -u -r1.10.4.2.2.1 -r1.10.4.2.2.2
  --- JahiaSearchService.java   27 Apr 2005 13:41:11 -0000      1.10.4.2.2.1
  +++ JahiaSearchService.java   18 May 2005 13:54:58 -0000      1.10.4.2.2.2
  @@ -167,15 +167,37 @@
   
       
//--------------------------------------------------------------------------
       /**
  +     * Return the current site's indexation job detail if any.
  +     *
  +     * @param siteID
  +     * @return
  +     */
  +    public abstract SiteIndexationJobDetail getSiteIndexationJob (int 
siteID);
  +
  +    
//--------------------------------------------------------------------------
  +    /**
        * Re-index a full site.
  -     * Should be called under particular situations ( time consuming ).
        *
        * @param siteID
        * @param jParams
  +     * @param deleteIndexFirst
  +     * @param abortPreviousJob
  +     * @return
  +     */
  +    public abstract boolean indexSite (int siteID,
  +                              ParamBean jParams,
  +                              boolean deleteIndexFirst,
  +                              boolean abortPreviousJob);
  +
  +
  +    
//--------------------------------------------------------------------------
  +    /**
  +     * Abort site indexation.
        *
  -     * @return boolean false on error.
  +     * @param siteID
  +     * @return
        */
  -    public abstract boolean indexSite (int siteID, ParamBean jParams);
  +    public abstract boolean abortSiteIndexation (int siteID);
   
       
//--------------------------------------------------------------------------
       /**
  

Reply via email to