You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ho...@apache.org on 2016/03/24 01:04:00 UTC
[5/5] lucene-solr:jira/SOLR-445: SOLR-8890: generalized whitelist of
param names DUP will use when forwarding requests, usage in SOLR-445
SOLR-8890: generalized whitelist of param names DUP will use when forwarding requests, usage in SOLR-445
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/da3ea40e
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/da3ea40e
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/da3ea40e
Branch: refs/heads/jira/SOLR-445
Commit: da3ea40e80189c7c2bbd8114a99c72a64262786b
Parents: a468655
Author: Chris Hostetter <ho...@apache.org>
Authored: Wed Mar 23 14:33:29 2016 -0700
Committer: Chris Hostetter <ho...@apache.org>
Committed: Wed Mar 23 17:01:11 2016 -0700
----------------------------------------------------------------------
.../processor/DistributedUpdateProcessor.java | 19 ++++++++++++++-----
.../DistributedUpdateProcessorFactory.java | 20 ++++++++++++++++++++
.../TolerantUpdateProcessorFactory.java | 3 ++-
3 files changed, 36 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/da3ea40e/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java b/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
index 0614c6c..5f4e4f1 100644
--- a/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
+++ b/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
@@ -92,7 +92,8 @@ import org.slf4j.LoggerFactory;
// NOT mt-safe... create a new processor for each add thread
// TODO: we really should not wait for distrib after local? unless a certain replication factor is asked for
public class DistributedUpdateProcessor extends UpdateRequestProcessor {
-
+
+ final static String PARAM_WHITELIST_CTX_KEY = DistributedUpdateProcessor.class + "PARAM_WHITELIST_CTX_KEY";
public static final String DISTRIB_FROM_SHARD = "distrib.from.shard";
public static final String DISTRIB_FROM_COLLECTION = "distrib.from.collection";
public static final String DISTRIB_FROM_PARENT = "distrib.from.parent";
@@ -292,6 +293,10 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
this.req = req;
+ // this should always be used - see filterParams
+ DistributedUpdateProcessorFactory.addParamToDistributedRequestWhitelist
+ (this.req, UpdateParams.UPDATE_CHAIN, TEST_DISTRIB_SKIP_SERVERS);
+
CoreDescriptor coreDesc = req.getCore().getCoreDescriptor();
this.zkEnabled = coreDesc.getCoreContainer().isZooKeeperAware();
@@ -1207,12 +1212,16 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
}
}
+ /** @see DistributedUpdateProcessorFactory#addParamToDistributedRequestWhitelist */
protected ModifiableSolrParams filterParams(SolrParams params) {
ModifiableSolrParams fparams = new ModifiableSolrParams();
- passParam(params, fparams, UpdateParams.UPDATE_CHAIN);
- passParam(params, fparams, TEST_DISTRIB_SKIP_SERVERS);
- // nocommit ... generalize this...
- passParam(params, fparams, "maxErrors");
+
+ Set<String> whitelist = (Set<String>) this.req.getContext().get(PARAM_WHITELIST_CTX_KEY);
+ assert null != whitelist : "whitelist can't be null, constructor adds to it";
+
+ for (String p : whitelist) {
+ passParam(params, fparams, p);
+ }
return fparams;
}
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/da3ea40e/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessorFactory.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessorFactory.java b/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessorFactory.java
index 4b64dec..6446b1a 100644
--- a/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessorFactory.java
+++ b/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessorFactory.java
@@ -16,6 +16,9 @@
*/
package org.apache.solr.update.processor;
+import java.util.Set;
+import java.util.TreeSet;
+
import org.apache.solr.common.util.NamedList;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.response.SolrQueryResponse;
@@ -28,6 +31,23 @@ import org.apache.solr.response.SolrQueryResponse;
public class DistributedUpdateProcessorFactory
extends UpdateRequestProcessorFactory
implements DistributingUpdateProcessorFactory {
+
+ /**
+ * By default, the {@link DistributedUpdateProcessor} is extremely conservative in the list of request
+ * params that will be copied/included when updates are forwarded to other nodes. This method may be
+ * used by any {@link UpdateRequestProcessorFactory#getInstance} call to annotate a
+ * SolrQueryRequest with the names of parameters that should also be forwarded.
+ */
+ public static void addParamToDistributedRequestWhitelist(final SolrQueryRequest req, final String... paramNames) {
+ Set<String> whitelist = (Set<String>) req.getContext().get(DistributedUpdateProcessor.PARAM_WHITELIST_CTX_KEY);
+ if (null == whitelist) {
+ whitelist = new TreeSet<String>();
+ req.getContext().put(DistributedUpdateProcessor.PARAM_WHITELIST_CTX_KEY, whitelist);
+ }
+ for (String p : paramNames) {
+ whitelist.add(p);
+ }
+ }
@Override
public void init(NamedList args) {
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/da3ea40e/solr/core/src/java/org/apache/solr/update/processor/TolerantUpdateProcessorFactory.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/update/processor/TolerantUpdateProcessorFactory.java b/solr/core/src/java/org/apache/solr/update/processor/TolerantUpdateProcessorFactory.java
index e7f5653..8cd3500 100644
--- a/solr/core/src/java/org/apache/solr/update/processor/TolerantUpdateProcessorFactory.java
+++ b/solr/core/src/java/org/apache/solr/update/processor/TolerantUpdateProcessorFactory.java
@@ -129,7 +129,8 @@ public class TolerantUpdateProcessorFactory extends UpdateRequestProcessorFactor
if (DistribPhase.FROMLEADER.equals(distribPhase)) {
return next;
}
-
+
+ DistributedUpdateProcessorFactory.addParamToDistributedRequestWhitelist(req, MAX_ERRORS_PARAM);
int maxErrors = req.getParams().getInt(MAX_ERRORS_PARAM, defaultMaxErrors);
if (maxErrors < -1) {
throw new SolrException(ErrorCode.BAD_REQUEST, "'"+MAX_ERRORS_PARAM + "' must either be non-negative, or -1 to indicate 'unlimiited': " + maxErrors);