knguyen 2004/09/01 14:12:33 CEST
Modified files: (Branch: JAHIA-4-0-BRANCH)
src/java/org/jahia/services/search JahiaSearchBaseService.java
Log:
- some synchronizing code
Revision Changes Path
1.42.2.10 +51 -10
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.9&r2=1.42.2.10&f=h
Index: JahiaSearchBaseService.java
===================================================================
RCS file:
/home/cvs/repository/jahia/src/java/org/jahia/services/search/Attic/JahiaSearchBaseService.java,v
retrieving revision 1.42.2.9
retrieving revision 1.42.2.10
diff -u -r1.42.2.9 -r1.42.2.10
--- JahiaSearchBaseService.java 31 Aug 2004 15:29:19 -0000 1.42.2.9
+++ JahiaSearchBaseService.java 1 Sep 2004 12:12:33 -0000 1.42.2.10
@@ -204,7 +204,9 @@
public synchronized void shutdown() throws JahiaException {
indexingThreadActivated = false;
- notifyAll();
+ synchronized(this){
+ notifyAll();
+ }
// give it a change to finish right now if it's not processing anything.
Thread.yield();
mIsServiceInitialized = false;
@@ -240,7 +242,9 @@
}
indexOrdersCache.put(indObj.getKey(),indObj);
}
- notifyAll ();
+ synchronized(this){
+ notifyAll();
+ }
}
//--------------------------------------------------------------------------
@@ -277,7 +281,9 @@
keyFieldValue, new Hashtable ());
doc.setBeAdded (false);
this.removeFromSearchEngine (doc);
- notifyAll ();
+ synchronized(this){
+ notifyAll();
+ }
}
//--------------------------------------------------------------------------
@@ -447,7 +453,9 @@
} catch (Throwable t) {
t.printStackTrace ();
} finally {
- notifyAll ();
+ synchronized(this){
+ notifyAll();
+ }
}
}
@@ -468,8 +476,9 @@
}
indexOrdersCache.put (rField.getKey(),rField);
}
-
- notifyAll ();
+ synchronized(this){
+ notifyAll();
+ }
}
//--------------------------------------------------------------------------
@@ -491,8 +500,9 @@
}
indexOrdersCache.put (rField.getKey(),rField);
}
-
- notifyAll ();
+ synchronized(this){
+ notifyAll();
+ }
}
//--------------------------------------------------------------------------
@@ -770,11 +780,40 @@
while (indexingThreadActivated) {
Vector v = new Vector();
+ HashMap toBeAdded = new HashMap();
+ HashMap toBeRemoved = new HashMap();
+ JahiaIndexableDocument doc = null;
synchronized (indexOrders) {
+ // 1. separate docs that are going to be added or removed
for ( int i=0; i<indexOrders.size(); i++ ){
+ doc = (JahiaIndexableDocument)indexOrders.get(i);
+ if ( doc.toBeAdded() ){
+ toBeAdded.put(doc.getKeyFieldName() + "_" +
doc.getKey(),new Integer(i));
+ } else {
+ toBeRemoved.put(doc.getKeyFieldName() + "_" +
doc.getKey(),new Integer(i));
+ }
v.add(indexOrders.get(i));
}
+
+ // 2. remove "to added" docs, if they are going to be removed
+ Iterator iterator = toBeRemoved.keySet().iterator();
+ String key = null;
+ Integer addOrder = null;
+ Integer removeOrder = null;
+ while ( iterator.hasNext() ){
+ key = (String)iterator.next();
+ addOrder = (Integer)toBeAdded.get(key);
+ if ( addOrder != null ){
+ removeOrder = (Integer)toBeRemoved.get(key);
+ if ( removeOrder.intValue() > addOrder.intValue() ){
+ // it would be great to use weight with objects to be
removed or added
+ // ( removing a staging entry of a field is not as
weight as removing the whole field )
+ v.setElementAt(null,addOrder.intValue());
+ }
+ }
+ }
+
indexOrders = new Vector();
}
@@ -798,7 +837,7 @@
else {
backgroundRemoveObjectFromSearchEngine(nextObject);
}
- //this.indexOrdersCache.remove(nextObject.getKey());
+ this.indexOrdersCache.remove(nextObject.getKey());
}
}
@@ -1249,7 +1288,9 @@
CacheEntry cacheEntry = (CacheEntry)entryValue;
this.indexOrders.add(cacheEntry.getObject());
logger.debug("Search Cache listener : added value in indexOrders");
- this.notifyAll();
+ synchronized(this){
+ notifyAll();
+ }
//indexQueue();
}
}