Hi Jayson,

It is on my list of things to do. I've been having a very busy week and and am also working all weekend. I hope to get to it next week sometime, if no-one else has taken it.

cheers,
-mike

On 8-May-09, at 10:15 PM, jayson.minard wrote:


First cut of updated handler now in:
https://issues.apache.org/jira/browse/SOLR-1155

Needs review from those that know Lucene better, and double check for errors
in locking or other areas of the code.  Thanks.

--j


jayson.minard wrote:

Can we move this to patch files within the JIRA issue please. Will make
it easier to review and help out a as a patch to current trunk.

--j


Jim Murphy wrote:



Yonik Seeley-2 wrote:

...your code snippit elided and edited below ...




Don't take this code as correct (or even compiling) but is this the
essence? I moved shared access to the writer inside the read lock and kept the other non-commit bits to the write lock. I'd need to rethink
the locking in a more fundamental way but is this close to idea?



public void commit(CommitUpdateCommand cmd) throws IOException {

   if (cmd.optimize) {
     optimizeCommands.incrementAndGet();
   } else {
     commitCommands.incrementAndGet();
   }

   Future[] waitSearcher = null;
   if (cmd.waitSearcher) {
     waitSearcher = new Future[1];
   }

   boolean error=true;
   iwCommit.lock();
   try {
     log.info("start "+cmd);

     if (cmd.optimize) {
       closeSearcher();
       openWriter();
       writer.optimize(cmd.maxOptimizeSegments);
     }
   finally {
     iwCommit.unlock();
    }


     iwAccess.lock();
     try
    {
     writer.commit();
    }
    finally
    {
     iwAccess.unlock();
    }

     iwCommit.lock();
     try
    {
     callPostCommitCallbacks();
     if (cmd.optimize) {
       callPostOptimizeCallbacks();
     }
     // open a new searcher in the sync block to avoid opening it
// after a deleteByQuery changed the index, or in between deletes
     // and adds of another commit being done.
     core.getSearcher(true,false,waitSearcher);

     // reset commit tracking
     tracker.didCommit();

     log.info("end_commit_flush");

     error=false;
   }
   finally {
     iwCommit.unlock();
     addCommands.set(0);
     deleteByIdCommands.set(0);
     deleteByQueryCommands.set(0);
     numErrors.set(error ? 1 : 0);
   }

// if we are supposed to wait for the searcher to be registered, then
we should do it
// outside of the synchronized block so that other update operations
can proceed.
   if (waitSearcher!=null && waitSearcher[0] != null) {
      try {
       waitSearcher[0].get();
     } catch (InterruptedException e) {
       SolrException.log(log,e);
     } catch (ExecutionException e) {
       SolrException.log(log,e);
     }
   }
 }







--
View this message in context: 
http://www.nabble.com/Autocommit-blocking-adds---AutoCommit-Speedup--tp23435224p23457422.html
Sent from the Solr - User mailing list archive at Nabble.com.


Reply via email to