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

Reply via email to