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);
//--------------------------------------------------------------------------
/**