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);
+ }
}
}