knguyen     2004/08/31 17:29:19 CEST

  Modified files:        (Branch: JAHIA-4-0-BRANCH)
    src/java/org/jahia/services/search JahiaSearchBaseService.java 
  Log:
  - copy indexOrders to local vector before indexing for better concurrency.
  
  Revision  Changes    Path
  1.42.2.9  +57 -7     
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.8&r2=1.42.2.9&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.8
  retrieving revision 1.42.2.9
  diff -u -r1.42.2.8 -r1.42.2.9
  --- JahiaSearchBaseService.java       27 Aug 2004 16:05:06 -0000      1.42.2.8
  +++ JahiaSearchBaseService.java       31 Aug 2004 15:29:19 -0000      1.42.2.9
  @@ -768,15 +768,65 @@
        */
       public void run () {
           while (indexingThreadActivated) {
  -            indexQueue();
  -            synchronized (this) {
  -                try {
  -                    wait (); // wait for next notify
  -                } catch (InterruptedException ie) {
  +
  +            Vector v = new Vector();
  +            synchronized (indexOrders) {
  +
  +                for ( int i=0; i<indexOrders.size(); i++ ){
  +                    v.add(indexOrders.get(i));
  +                }
  +                indexOrders = new Vector();
  +            }
  +
  +            long indexingStartTime = System.currentTimeMillis();
  +            int indexOrderCount = v.size ();
  +
  +            while (v.size() > 0) {
  +                JahiaIndexableDocument nextObject = null;
  +
  +                if (v.size() != 0) {
  +                    nextObject = (JahiaIndexableDocument)
  +                        v.elementAt(0);
  +                    v.remove(0);
  +                }
  +
  +                // okay now we have the next added/removed field, we process it!
  +                if (nextObject != null) {
  +                    if (nextObject.toBeAdded()) {
  +                        backgroundAddObjectToSearchEngine(nextObject);
  +                    }
  +                    else {
  +                        backgroundRemoveObjectFromSearchEngine(nextObject);
  +                    }
  +                    //this.indexOrdersCache.remove(nextObject.getKey());
  +                }
  +            }
  +
  +            long indexingElapsedTime = System.currentTimeMillis() - 
indexingStartTime;
  +            if (logger.isInfoEnabled()) {
  +                logger.info(
  +                    "Finished processing " + indexOrderCount +
  +                    " indexing orders in " + indexingElapsedTime + "ms.");
  +            }
  +
  +            // FIXME : oops, As we are in a separate thread, this would may have 
sence
  +            // to terminate Connection ?
  +            org.jahia.services.database.ConnectionDispenser.
  +                    terminateConnection ();
  +
  +            int size = 0;
  +            synchronized (indexOrders) {
  +                size = indexOrders.size();
  +            }
  +            if ( size == 0 ){
  +                synchronized(this){
  +                    try {
  +                        wait(); // wait for next notify
  +                    }
  +                    catch (InterruptedException ie) {
  +                    }
                   }
               }
  -            logger.debug (
  -                    "Search engine indexing in background, do not shutdown server 
now !...");
           }
       }
   
  

Reply via email to