You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by yo...@apache.org on 2012/02/01 15:51:07 UTC
svn commit: r1239155 - in /lucene/dev/trunk/solr: ./
core/src/java/org/apache/solr/core/ core/src/java/org/apache/solr/handler/
core/src/java/org/apache/solr/update/ core/src/test/org/apache/solr/handler/
core/src/test/org/apache/solr/update/ example/e...
Author: yonik
Date: Wed Feb 1 14:51:07 2012
New Revision: 1239155
URL: http://svn.apache.org/viewvc?rev=1239155&view=rev
Log:
SOLR-3062: implement openSearcher=false, make commitWithin soft, refactor commit param parsing
Modified:
lucene/dev/trunk/solr/CHANGES.txt
lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrConfig.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/JsonLoader.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/RequestHandlerUtils.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/XMLLoader.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/CommitTracker.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/CommitUpdateCommand.java
lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java
lucene/dev/trunk/solr/core/src/test/org/apache/solr/update/AutoCommitTest.java
lucene/dev/trunk/solr/example/exampledocs/post.sh
lucene/dev/trunk/solr/example/solr/conf/solrconfig.xml
lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/params/UpdateParams.java
Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1239155&r1=1239154&r2=1239155&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Wed Feb 1 14:51:07 2012
@@ -63,6 +63,7 @@ Upgrading from Solr 3.6-dev
renamed from "update.processor" to "update.chain". The old parameter was
deprecated but still working since Solr3.2, but is now removed entirely.
+
Detailed Change List
----------------------
@@ -195,6 +196,10 @@ New Features
* SOLR-2906: Added LFU cache options to Solr. (Shawn Heisey via Erick Erickson)
+* SOLR-3069: Ability to add openSearcher=false to not open a searcher when doing
+ a hard commit. commitWithin now only invokes a softCommit. (yonik)
+
+
Optimizations
----------------------
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrConfig.java?rev=1239155&r1=1239154&r2=1239155&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrConfig.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrConfig.java Wed Feb 1 14:51:07 2012
@@ -204,6 +204,7 @@ public class SolrConfig extends Config {
return new UpdateHandlerInfo(get("updateHandler/@class",null),
getInt("updateHandler/autoCommit/maxDocs",-1),
getInt("updateHandler/autoCommit/maxTime",-1),
+ getBool("updateHandler/autoCommit/openSearcher",true),
getInt("updateHandler/commitIntervalLowerBound",-1),
getInt("updateHandler/autoSoftCommit/maxDocs",-1),
getInt("updateHandler/autoSoftCommit/maxTime",-1));
@@ -365,6 +366,7 @@ public class SolrConfig extends Config {
public final String className;
public final int autoCommmitMaxDocs,autoCommmitMaxTime,commitIntervalLowerBound,
autoSoftCommmitMaxDocs,autoSoftCommmitMaxTime;
+ public final boolean openSearcher; // is opening a new searcher part of hard autocommit?
/**
* @param className
@@ -372,11 +374,12 @@ public class SolrConfig extends Config {
* @param autoCommmitMaxTime set -1 as default
* @param commitIntervalLowerBound set -1 as default
*/
- public UpdateHandlerInfo(String className, int autoCommmitMaxDocs, int autoCommmitMaxTime, int commitIntervalLowerBound,
+ public UpdateHandlerInfo(String className, int autoCommmitMaxDocs, int autoCommmitMaxTime, boolean openSearcher, int commitIntervalLowerBound,
int autoSoftCommmitMaxDocs, int autoSoftCommmitMaxTime) {
this.className = className;
this.autoCommmitMaxDocs = autoCommmitMaxDocs;
this.autoCommmitMaxTime = autoCommmitMaxTime;
+ this.openSearcher = openSearcher;
this.commitIntervalLowerBound = commitIntervalLowerBound;
this.autoSoftCommmitMaxDocs = autoSoftCommmitMaxDocs;
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/JsonLoader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/JsonLoader.java?rev=1239155&r1=1239154&r2=1239155&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/JsonLoader.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/JsonLoader.java Wed Feb 1 14:51:07 2012
@@ -19,14 +19,18 @@ package org.apache.solr.handler;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
+import java.util.Iterator;
+import java.util.Map;
import java.util.Stack;
import org.apache.commons.io.IOUtils;
import org.apache.noggit.JSONParser;
+import org.apache.noggit.JSONUtil;
+import org.apache.noggit.ObjectBuilder;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.SolrInputField;
-import org.apache.solr.common.params.UpdateParams;
+import org.apache.solr.common.params.*;
import org.apache.solr.common.util.ContentStream;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
@@ -203,34 +207,30 @@ class JsonLoader extends ContentStreamLo
void parseCommitOptions(CommitUpdateCommand cmd ) throws IOException
{
assertNextEvent( JSONParser.OBJECT_START );
+ final Map<String,Object> map = (Map)ObjectBuilder.getVal(parser);
- while( true ) {
- int ev = parser.nextEvent();
- if( ev == JSONParser.STRING ) {
- String key = parser.getString();
- if( parser.wasKey() ) {
- if( XmlUpdateRequestHandler.WAIT_SEARCHER.equals( key ) ) {
- cmd.waitSearcher = parser.getBoolean();
- }
- else {
- throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Unknown key: "+key+" ["+parser.getPosition()+"]" );
- }
- }
- else {
- throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
- "invalid string: " + key
- +" at ["+parser.getPosition()+"]" );
- }
+ // SolrParams currently expects string values...
+ SolrParams p = new SolrParams() {
+ @Override
+ public String get(String param) {
+ Object o = map.get(param);
+ return o == null ? null : o.toString();
}
- else if( ev == JSONParser.OBJECT_END ) {
- return;
+
+ @Override
+ public String[] getParams(String param) {
+ return new String[]{get(param)};
}
- else {
- throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
- "Got: "+JSONParser.getEventString( ev )
- +" at ["+parser.getPosition()+"]" );
+
+ @Override
+ public Iterator<String> getParameterNamesIterator() {
+ return map.keySet().iterator();
}
- }
+ };
+
+ RequestHandlerUtils.validateCommitParams(p);
+ p = SolrParams.wrapDefaults(p, req.getParams()); // default to the normal request params for commit options
+ RequestHandlerUtils.updateCommit(cmd, p);
}
AddUpdateCommand parseAdd() throws IOException
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/RequestHandlerUtils.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/RequestHandlerUtils.java?rev=1239155&r1=1239154&r2=1239155&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/RequestHandlerUtils.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/RequestHandlerUtils.java Wed Feb 1 14:51:07 2012
@@ -18,8 +18,9 @@
package org.apache.solr.handler;
import java.io.IOException;
-import java.util.HashMap;
+import java.util.*;
+import org.apache.solr.common.SolrException;
import org.apache.solr.common.params.MapSolrParams;
import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.params.UpdateParams;
@@ -44,69 +45,27 @@ public class RequestHandlerUtils
{
rsp.add( "WARNING", "This response format is experimental. It is likely to change in the future." );
}
-
- /**
- * Check the request parameters and decide if it should commit or optimize.
- * If it does, it will check parameters for "waitFlush" and "waitSearcher"
- *
- * @deprecated Use {@link #handleCommit(SolrQueryRequest,UpdateRequestProcessor,SolrParams,boolean)}
- *
- * @since solr 1.2
- */
- @Deprecated
- public static boolean handleCommit( SolrQueryRequest req, SolrQueryResponse rsp, boolean force ) throws IOException
- {
- SolrParams params = req.getParams();
- if( params == null ) {
- params = new MapSolrParams( new HashMap<String, String>() );
- }
-
- boolean optimize = params.getBool( UpdateParams.OPTIMIZE, false );
- boolean commit = params.getBool( UpdateParams.COMMIT, false );
-
- if( optimize || commit || force ) {
- CommitUpdateCommand cmd = new CommitUpdateCommand(req, optimize );
- cmd.waitSearcher = params.getBool( UpdateParams.WAIT_SEARCHER, cmd.waitSearcher );
- cmd.softCommit = params.getBool( UpdateParams.SOFT_COMMIT, cmd.softCommit );
- cmd.expungeDeletes = params.getBool( UpdateParams.EXPUNGE_DELETES, cmd.expungeDeletes);
- cmd.maxOptimizeSegments = params.getInt(UpdateParams.MAX_OPTIMIZE_SEGMENTS, cmd.maxOptimizeSegments);
- req.getCore().getUpdateHandler().commit( cmd );
-
- // Lets wait till after solr1.2 to define consistent output format
- //if( optimize ) {
- // rsp.add( "optimize", true );
- //}
- //else {
- // rsp.add( "commit", true );
- //}
- return true;
- }
- return false;
- }
-
+
/**
* Check the request parameters and decide if it should commit or optimize.
- * If it does, it will check parameters for "waitFlush" and "waitSearcher"
+ * If it does, it will check other related parameters such as "waitFlush" and "waitSearcher"
*/
public static boolean handleCommit(SolrQueryRequest req, UpdateRequestProcessor processor, SolrParams params, boolean force ) throws IOException
{
- if( params == null ) {
+ if( params == null) {
params = new MapSolrParams( new HashMap<String, String>() );
}
boolean optimize = params.getBool( UpdateParams.OPTIMIZE, false );
boolean commit = params.getBool( UpdateParams.COMMIT, false );
+ boolean softCommit = params.getBool( UpdateParams.SOFT_COMMIT, false );
boolean prepareCommit = params.getBool( UpdateParams.PREPARE_COMMIT, false );
- if( optimize || commit || prepareCommit || force ) {
+ if( optimize || commit || softCommit || prepareCommit || force ) {
CommitUpdateCommand cmd = new CommitUpdateCommand(req, optimize );
- cmd.waitSearcher = params.getBool( UpdateParams.WAIT_SEARCHER, cmd.waitSearcher );
- cmd.softCommit = params.getBool( UpdateParams.SOFT_COMMIT, cmd.softCommit );
- cmd.expungeDeletes = params.getBool( UpdateParams.EXPUNGE_DELETES, cmd.expungeDeletes);
- cmd.maxOptimizeSegments = params.getInt(UpdateParams.MAX_OPTIMIZE_SEGMENTS, cmd.maxOptimizeSegments);
- cmd.prepareCommit = prepareCommit;
+ updateCommit(cmd, params);
processor.processCommit( cmd );
return true;
}
@@ -115,6 +74,35 @@ public class RequestHandlerUtils
return false;
}
+
+ private static Set<String> commitParams = new HashSet<String>(Arrays.asList(new String[]{UpdateParams.OPEN_SEARCHER, UpdateParams.WAIT_SEARCHER, UpdateParams.SOFT_COMMIT, UpdateParams.EXPUNGE_DELETES, UpdateParams.MAX_OPTIMIZE_SEGMENTS, UpdateParams.PREPARE_COMMIT}));
+
+ public static void validateCommitParams(SolrParams params) {
+ Iterator<String> i = params.getParameterNamesIterator();
+ while (i.hasNext()) {
+ String key = i.next();
+ if (!commitParams.contains(key)) {
+ throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "Unknown commit parameter '" + key + "'");
+ }
+ }
+ }
+
+ /**
+ * Modify UpdateCommand based on request parameters
+ */
+ public static void updateCommit(CommitUpdateCommand cmd, SolrParams params) throws IOException
+ {
+ if( params == null ) return;
+
+ cmd.openSearcher = params.getBool( UpdateParams.OPEN_SEARCHER, cmd.openSearcher );
+ cmd.waitSearcher = params.getBool( UpdateParams.WAIT_SEARCHER, cmd.waitSearcher );
+ cmd.softCommit = params.getBool( UpdateParams.SOFT_COMMIT, cmd.softCommit );
+ cmd.expungeDeletes = params.getBool( UpdateParams.EXPUNGE_DELETES, cmd.expungeDeletes );
+ cmd.maxOptimizeSegments = params.getInt( UpdateParams.MAX_OPTIMIZE_SEGMENTS, cmd.maxOptimizeSegments );
+ cmd.prepareCommit = params.getBool( UpdateParams.PREPARE_COMMIT, cmd.prepareCommit );
+ }
+
+
/**
* @since Solr 1.4
*/
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/XMLLoader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/XMLLoader.java?rev=1239155&r1=1239154&r2=1239155&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/XMLLoader.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/XMLLoader.java Wed Feb 1 14:51:07 2012
@@ -16,6 +16,7 @@ package org.apache.solr.handler;
* limitations under the License.
*/
+import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.update.processor.UpdateRequestProcessor;
import org.apache.solr.update.AddUpdateCommand;
import org.apache.solr.update.CommitUpdateCommand;
@@ -139,23 +140,18 @@ class XMLLoader extends ContentStreamLoa
XmlUpdateRequestHandler.log.trace("parsing " + currTag);
CommitUpdateCommand cmd = new CommitUpdateCommand(req, XmlUpdateRequestHandler.OPTIMIZE.equals(currTag));
-
+ ModifiableSolrParams mp = new ModifiableSolrParams();
+
for (int i = 0; i < parser.getAttributeCount(); i++) {
String attrName = parser.getAttributeLocalName(i);
String attrVal = parser.getAttributeValue(i);
- if (XmlUpdateRequestHandler.WAIT_SEARCHER.equals(attrName)) {
- cmd.waitSearcher = StrUtils.parseBoolean(attrVal);
- } else if (XmlUpdateRequestHandler.SOFT_COMMIT.equals(attrName)) {
- cmd.softCommit = StrUtils.parseBoolean(attrVal);
- } else if (UpdateParams.MAX_OPTIMIZE_SEGMENTS.equals(attrName)) {
- cmd.maxOptimizeSegments = Integer.parseInt(attrVal);
- } else if (UpdateParams.EXPUNGE_DELETES.equals(attrName)) {
- cmd.expungeDeletes = StrUtils.parseBoolean(attrVal);
- } else {
- XmlUpdateRequestHandler.log.warn("unexpected attribute commit/@" + attrName);
- }
+ mp.set(attrName, attrVal);
}
+ RequestHandlerUtils.validateCommitParams(mp);
+ SolrParams p = SolrParams.wrapDefaults(mp, req.getParams()); // default to the normal request params for commit options
+ RequestHandlerUtils.updateCommit(cmd, p);
+
processor.processCommit(cmd);
} // end commit
else if (XmlUpdateRequestHandler.ROLLBACK.equals(currTag)) {
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/CommitTracker.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/CommitTracker.java?rev=1239155&r1=1239154&r2=1239155&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/CommitTracker.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/CommitTracker.java Wed Feb 1 14:51:07 2012
@@ -61,11 +61,12 @@ final class CommitTracker implements Run
private final SolrCore core;
private final boolean softCommit;
- private final boolean waitSearcher;
+ private final boolean openSearcher;
+ private final boolean waitSearcher = true;
private String name;
- public CommitTracker(String name, SolrCore core, int docsUpperBound, int timeUpperBound, boolean waitSearcher, boolean softCommit) {
+ public CommitTracker(String name, SolrCore core, int docsUpperBound, int timeUpperBound, boolean openSearcher, boolean softCommit) {
this.core = core;
this.name = name;
pending = null;
@@ -74,7 +75,7 @@ final class CommitTracker implements Run
this.timeUpperBound = timeUpperBound;
this.softCommit = softCommit;
- this.waitSearcher = waitSearcher;
+ this.openSearcher = openSearcher;
SolrCore.log.info(name + " AutoCommit: " + this);
}
@@ -183,6 +184,7 @@ final class CommitTracker implements Run
new ModifiableSolrParams());
try {
CommitUpdateCommand command = new CommitUpdateCommand(req, false);
+ command.openSearcher = openSearcher;
command.waitSearcher = waitSearcher;
command.softCommit = softCommit;
// no need for command.maxOptimizeSegments = 1; since it is not optimizing
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/CommitUpdateCommand.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/CommitUpdateCommand.java?rev=1239155&r1=1239154&r2=1239155&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/CommitUpdateCommand.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/CommitUpdateCommand.java Wed Feb 1 14:51:07 2012
@@ -24,6 +24,7 @@ import org.apache.solr.request.SolrQuery
*/
public class CommitUpdateCommand extends UpdateCommand {
public boolean optimize;
+ public boolean openSearcher=true; // open a new searcher as part of a hard commit
public boolean waitSearcher=true;
public boolean expungeDeletes = false;
public boolean softCommit = false;
@@ -49,6 +50,7 @@ public class CommitUpdateCommand extends
@Override
public String toString() {
return super.toString() + ",optimize="+optimize
+ +",openSearcher="+openSearcher
+",waitSearcher="+waitSearcher
+",expungeDeletes="+expungeDeletes
+",softCommit="+softCommit
Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java?rev=1239155&r1=1239154&r2=1239155&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java Wed Feb 1 14:51:07 2012
@@ -93,7 +93,7 @@ public class DirectUpdateHandler2 extend
.getUpdateHandlerInfo();
int docsUpperBound = updateHandlerInfo.autoCommmitMaxDocs; // getInt("updateHandler/autoCommit/maxDocs", -1);
int timeUpperBound = updateHandlerInfo.autoCommmitMaxTime; // getInt("updateHandler/autoCommit/maxTime", -1);
- commitTracker = new CommitTracker("Hard", core, docsUpperBound, timeUpperBound, true, false);
+ commitTracker = new CommitTracker("Hard", core, docsUpperBound, timeUpperBound, updateHandlerInfo.openSearcher, false);
int softCommitDocsUpperBound = updateHandlerInfo.autoSoftCommmitMaxDocs; // getInt("updateHandler/autoSoftCommit/maxDocs", -1);
int softCommitTimeUpperBound = updateHandlerInfo.autoSoftCommmitMaxTime; // getInt("updateHandler/autoSoftCommit/maxTime", -1);
@@ -114,11 +114,11 @@ public class DirectUpdateHandler2 extend
.getUpdateHandlerInfo();
int docsUpperBound = updateHandlerInfo.autoCommmitMaxDocs; // getInt("updateHandler/autoCommit/maxDocs", -1);
int timeUpperBound = updateHandlerInfo.autoCommmitMaxTime; // getInt("updateHandler/autoCommit/maxTime", -1);
- commitTracker = new CommitTracker("Hard", core, docsUpperBound, timeUpperBound, true, false);
+ commitTracker = new CommitTracker("Hard", core, docsUpperBound, timeUpperBound, updateHandlerInfo.openSearcher, false);
int softCommitDocsUpperBound = updateHandlerInfo.autoSoftCommmitMaxDocs; // getInt("updateHandler/autoSoftCommit/maxDocs", -1);
int softCommitTimeUpperBound = updateHandlerInfo.autoSoftCommmitMaxTime; // getInt("updateHandler/autoSoftCommit/maxTime", -1);
- softCommitTracker = new CommitTracker("Soft", core, softCommitDocsUpperBound, softCommitTimeUpperBound, true, true);
+ softCommitTracker = new CommitTracker("Soft", core, softCommitDocsUpperBound, softCommitTimeUpperBound, updateHandlerInfo.openSearcher, true);
this.ulog = updateHandler.getUpdateLog();
if (this.ulog != null) {
@@ -186,8 +186,8 @@ public class DirectUpdateHandler2 extend
if (ulog != null) ulog.add(cmd);
if ((cmd.getFlags() & UpdateCommand.IGNORE_AUTOCOMMIT) == 0) {
- commitTracker.addedDocument( cmd.commitWithin );
- softCommitTracker.addedDocument( -1 ); // TODO: support commitWithin with soft update
+ commitTracker.addedDocument( -1 );
+ softCommitTracker.addedDocument( cmd.commitWithin );
}
rc = 1;
@@ -203,6 +203,20 @@ public class DirectUpdateHandler2 extend
return rc;
}
+ private void updateDeleteTrackers(DeleteUpdateCommand cmd) {
+ if ((cmd.getFlags() & UpdateCommand.IGNORE_AUTOCOMMIT) == 0) {
+ softCommitTracker.deletedDocument( cmd.commitWithin );
+
+ if (commitTracker.getTimeUpperBound() > 0) {
+ commitTracker.scheduleCommitWithin(commitTracker.getTimeUpperBound());
+ }
+
+ if (softCommitTracker.getTimeUpperBound() > 0) {
+ softCommitTracker.scheduleCommitWithin(softCommitTracker.getTimeUpperBound());
+ }
+ }
+ }
+
// we don't return the number of docs deleted because it's not always possible to quickly know that info.
@Override
@@ -214,21 +228,12 @@ public class DirectUpdateHandler2 extend
Term deleteTerm = new Term(idField.getName(), cmd.getIndexedId());
// SolrCore.verbose("deleteDocuments",deleteTerm,writer);
- commitTracker.deletedDocument( cmd.commitWithin );
writer.deleteDocuments(deleteTerm);
// SolrCore.verbose("deleteDocuments",deleteTerm,"DONE");
if (ulog != null) ulog.delete(cmd);
- if ((cmd.getFlags() & UpdateCommand.IGNORE_AUTOCOMMIT) == 0) {
- if (commitTracker.getTimeUpperBound() > 0) {
- commitTracker.scheduleCommitWithin(commitTracker.getTimeUpperBound());
- }
-
- if (softCommitTracker.getTimeUpperBound() > 0) {
- softCommitTracker.scheduleCommitWithin(softCommitTracker.getTimeUpperBound());
- }
- }
+ updateDeleteTrackers(cmd);
}
// we don't return the number of docs deleted because it's not always possible to quickly know that info.
@@ -267,8 +272,6 @@ public class DirectUpdateHandler2 extend
boolean delAll = MatchAllDocsQuery.class == q.getClass();
- commitTracker.deletedDocument(cmd.commitWithin);
-
//
// synchronized to prevent deleteByQuery from running during the "open new searcher"
// part of a commit. DBQ needs to signal that a fresh reader will be needed for
@@ -286,15 +289,9 @@ public class DirectUpdateHandler2 extend
}
madeIt = true;
-
- if (commitTracker.getTimeUpperBound() > 0) {
- commitTracker.scheduleCommitWithin(commitTracker.getTimeUpperBound());
- }
-
- if (softCommitTracker.getTimeUpperBound()> 0) {
- softCommitTracker.scheduleCommitWithin(softCommitTracker.getTimeUpperBound());
- }
-
+
+ updateDeleteTrackers(cmd);
+
} finally {
if (!madeIt) {
numErrors.incrementAndGet();
@@ -416,7 +413,12 @@ public class DirectUpdateHandler2 extend
} else {
synchronized (this) {
if (ulog != null) ulog.preSoftCommit(cmd);
- core.getSearcher(true, false, waitSearcher);
+ if (cmd.openSearcher) {
+ core.getSearcher(true, false, waitSearcher);
+ } else {
+ // force open a new realtime searcher so realtime-get and versioning code can see the latest
+ core.openNewSearcher(true,true);
+ }
if (ulog != null) ulog.postSoftCommit(cmd);
}
if (ulog != null) ulog.postCommit(cmd); // postCommit currently means new searcher has
Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java?rev=1239155&r1=1239154&r2=1239155&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/handler/JsonLoaderTest.java Wed Feb 1 14:51:07 2012
@@ -65,7 +65,7 @@ public class JsonLoaderTest extends Solr
"},\n" +
"\n" +
"'commit': {},\n" +
- "'optimize': { 'waitSearcher':false },\n" +
+ "'optimize': { 'waitSearcher':false, 'openSearcher':false },\n" +
"\n" +
"'delete': { 'id':'ID' },\n" +
"'delete': { 'id':'ID', 'commitWithin':'500' },\n" +
@@ -108,11 +108,13 @@ public class JsonLoaderTest extends Solr
CommitUpdateCommand commit = p.commitCommands.get( 0 );
assertFalse( commit.optimize );
assertTrue( commit.waitSearcher );
-
+ assertTrue( commit.openSearcher );
+
commit = p.commitCommands.get( 1 );
assertTrue( commit.optimize );
assertFalse( commit.waitSearcher );
-
+ assertFalse( commit.openSearcher );
+
// DELETE COMMANDS
assertEquals( 4, p.deleteCommands.size() );
Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/update/AutoCommitTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/update/AutoCommitTest.java?rev=1239155&r1=1239154&r2=1239155&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/update/AutoCommitTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/update/AutoCommitTest.java Wed Feb 1 14:51:07 2012
@@ -144,7 +144,7 @@ public class AutoCommitTest extends Abst
NewSearcherListener trigger = new NewSearcherListener();
DirectUpdateHandler2 updateHandler = (DirectUpdateHandler2)core.getUpdateHandler();
- CommitTracker tracker = updateHandler.commitTracker;
+ CommitTracker tracker = updateHandler.softCommitTracker;
tracker.setTimeUpperBound(-1);
tracker.setDocsUpperBound(14);
core.registerNewSearcherListener(trigger);
@@ -191,7 +191,7 @@ public class AutoCommitTest extends Abst
NewSearcherListener trigger = new NewSearcherListener();
core.registerNewSearcherListener(trigger);
DirectUpdateHandler2 updater = (DirectUpdateHandler2) core.getUpdateHandler();
- CommitTracker tracker = updater.commitTracker;
+ CommitTracker tracker = updater.softCommitTracker;
// too low of a number can cause a slow host to commit before the test code checks that it
// isn't there... causing a failure at "shouldn't find any"
tracker.setTimeUpperBound(1000);
@@ -264,7 +264,7 @@ public class AutoCommitTest extends Abst
NewSearcherListener trigger = new NewSearcherListener();
core.registerNewSearcherListener(trigger);
DirectUpdateHandler2 updater = (DirectUpdateHandler2) core.getUpdateHandler();
- CommitTracker tracker = updater.commitTracker;
+ CommitTracker tracker = updater.softCommitTracker;
tracker.setTimeUpperBound(0);
tracker.setDocsUpperBound(-1);
Modified: lucene/dev/trunk/solr/example/exampledocs/post.sh
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/example/exampledocs/post.sh?rev=1239155&r1=1239154&r2=1239155&view=diff
==============================================================================
--- lucene/dev/trunk/solr/example/exampledocs/post.sh (original)
+++ lucene/dev/trunk/solr/example/exampledocs/post.sh Wed Feb 1 14:51:07 2012
@@ -24,5 +24,7 @@ for f in $FILES; do
done
#send the commit command to make sure all the changes are flushed and visible
-curl $URL --data-binary '<commit/>' -H 'Content-type:application/xml'
+#curl $URL --data-binary '<commit softCommit=true/>' -H 'Content-type:application/xml'
+
+curl "$URL?softCommit=true"
echo
Modified: lucene/dev/trunk/solr/example/solr/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/example/solr/conf/solrconfig.xml?rev=1239155&r1=1239154&r2=1239155&view=diff
==============================================================================
--- lucene/dev/trunk/solr/example/solr/conf/solrconfig.xml (original)
+++ lucene/dev/trunk/solr/example/solr/conf/solrconfig.xml Wed Feb 1 14:51:07 2012
@@ -291,12 +291,14 @@
maxTime - Maximum amount of time in ms that is allowed to pass
since a document was added before automaticly
triggering a new commit.
- -->
- <!--
- <autoCommit>
- <maxTime>60000</maxTime>
- </autoCommit>
- -->
+ openSearcher - if false, the commit causes recent index changes
+ to be flushed to stable storage, but does not cause a new
+ searcher to be opened to make those changes visible.
+ -->
+ <autoCommit>
+ <maxTime>15000</maxTime>
+ <openSearcher>false</openSearcher>
+ </autoCommit>
<!-- softAutoCommit is like autoCommit except it causes a
'soft' commit which only ensures that changes are visible
Modified: lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/params/UpdateParams.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/params/UpdateParams.java?rev=1239155&r1=1239154&r2=1239155&view=diff
==============================================================================
--- lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/params/UpdateParams.java (original)
+++ lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/common/params/UpdateParams.java Wed Feb 1 14:51:07 2012
@@ -25,10 +25,13 @@ package org.apache.solr.common.params;
*/
public interface UpdateParams
{
-
- /** wait for the search to warm up */
+
+ /** Open up a new searcher as part of a commit */
+ public static String OPEN_SEARCHER = "openSearcher";
+
+ /** wait for the searcher to be registered/visible */
public static String WAIT_SEARCHER = "waitSearcher";
-
+
public static String SOFT_COMMIT = "softCommit";
/** overwrite indexing fields */
Re: svn commit: r1239155 - in /lucene/dev/trunk/solr: ./
core/src/java/org/apache/solr/core/ core/src/java/org/apache/solr/handler/
core/src/java/org/apache/solr/update/ core/src/test/org/apache/solr/handler/
core/src/test/org/apache/solr/update/ example/e...
Posted by Chris Hostetter <ho...@fucit.org>.
this is the wrong jira number, so the jira<->commit linkage is going to be
off...
: SOLR-3062: implement openSearcher=false, make commitWithin soft, refactor commit param parsing
...
: +* SOLR-3069: Ability to add openSearcher=false to not open a searcher when doing
: + a hard commit. commitWithin now only invokes a softCommit. (yonik)
-Hoss
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org