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