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.