summaryrefslogtreecommitdiffstats
path: root/documentapi/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'documentapi/src/main')
-rwxr-xr-xdocumentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusParams.java17
-rw-r--r--documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ContentPolicy.java28
-rwxr-xr-xdocumentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentProtocol.java33
-rwxr-xr-xdocumentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentRouteSelectorPolicy.java22
-rw-r--r--documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/MessageTypePolicy.java11
-rwxr-xr-xdocumentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutingPolicyFactories.java73
-rwxr-xr-xdocumentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutingPolicyFactory.java7
-rw-r--r--documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/SlobrokPolicy.java4
8 files changed, 68 insertions, 127 deletions
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusParams.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusParams.java
index 824b1144a67..a838f3b8723 100755
--- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusParams.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusParams.java
@@ -3,15 +3,8 @@ package com.yahoo.documentapi.messagebus;
import com.yahoo.documentapi.DocumentAccessParams;
import com.yahoo.documentapi.messagebus.loadtypes.LoadTypeSet;
-import com.yahoo.documentapi.messagebus.protocol.DocumentProtocol;
import com.yahoo.messagebus.SourceSessionParams;
-import com.yahoo.messagebus.documentapi.DocumentProtocolPoliciesConfig;
import com.yahoo.messagebus.network.rpc.RPCNetworkParams;
-import com.yahoo.vespa.config.content.DistributionConfig;
-
-import java.util.Objects;
-
-import static java.util.Objects.requireNonNull;
/**
* @author Einar M R Rosenvinge
@@ -20,8 +13,6 @@ public class MessageBusParams extends DocumentAccessParams {
private String routingConfigId = null;
private String protocolConfigId = null;
- private DocumentProtocolPoliciesConfig policiesConfig = null;
- private DistributionConfig distributionConfig = null;
private String route = "route:default";
private String routeForGet = "route:default-get";
private int traceLevel = 0;
@@ -88,14 +79,6 @@ public class MessageBusParams extends DocumentAccessParams {
return this;
}
- /** Sets the config used by the {@link DocumentProtocol} policies. */
- public MessageBusParams setDocumentProtocolPoliciesConfig(DocumentProtocolPoliciesConfig policiesConfig,
- DistributionConfig distributionConfig) {
- this.policiesConfig = requireNonNull(policiesConfig);
- this.distributionConfig = requireNonNull(distributionConfig);
- return this;
- }
-
/**
* Sets the name of the route to send appropriate requests to. This is a convenience method for prefixing a route
* with "route:", and using {@link #setRoute} instead.
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ContentPolicy.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ContentPolicy.java
index f8e6989bbfa..c03231543df 100644
--- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ContentPolicy.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/ContentPolicy.java
@@ -6,6 +6,7 @@ import com.yahoo.document.BucketId;
import com.yahoo.document.BucketIdFactory;
import com.yahoo.jrt.slobrok.api.IMirror;
import com.yahoo.jrt.slobrok.api.Mirror;
+import java.util.logging.Level;
import com.yahoo.messagebus.EmptyReply;
import com.yahoo.messagebus.Error;
import com.yahoo.messagebus.ErrorCode;
@@ -21,7 +22,6 @@ import com.yahoo.vdslib.state.ClusterState;
import com.yahoo.vdslib.state.Node;
import com.yahoo.vdslib.state.NodeType;
import com.yahoo.vdslib.state.State;
-import com.yahoo.vespa.config.content.DistributionConfig;
import java.util.ArrayList;
import java.util.Collections;
@@ -32,7 +32,6 @@ import java.util.Random;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
-import java.util.logging.Level;
import java.util.logging.Logger;
/**
@@ -222,28 +221,18 @@ public class ContentPolicy extends SlobrokPolicy {
/** Class parsing the semicolon separated parameter string and exposes the appropriate value to the policy. */
public static class Parameters {
-
protected final String clusterName;
protected final String distributionConfigId;
- protected final DistributionConfig distributionConfig;
protected final SlobrokHostPatternGenerator slobrokHostPatternGenerator;
public Parameters(Map<String, String> params) {
- this(params, null);
- }
-
- private Parameters(Map<String, String> params, DistributionConfig config) {
clusterName = params.get("cluster");
- if (clusterName == null)
- throw new IllegalArgumentException("Required parameter 'cluster', the name of the content cluster, not set");
- distributionConfig = config;
- if (distributionConfig != null && distributionConfig.cluster(clusterName) == null)
- throw new IllegalArgumentException("Distribution config for cluster '" + clusterName + "' not found");
distributionConfigId = params.get("clusterconfigid"); // TODO jonmv: remove
slobrokHostPatternGenerator = createPatternGenerator();
+ if (clusterName == null) throw new IllegalArgumentException("Required parameter 'cluster', the name of the content cluster, not set");
}
- private String getDistributionConfigId() {
+ String getDistributionConfigId() {
return distributionConfigId == null ? clusterName : distributionConfigId;
}
public String getClusterName() {
@@ -256,8 +245,7 @@ public class ContentPolicy extends SlobrokPolicy {
return new TargetCachingSlobrokHostFetcher(slobrokHostPatternGenerator, policy, percent);
}
public Distribution createDistribution(SlobrokPolicy policy) {
- return distributionConfig == null ? new Distribution(getDistributionConfigId())
- : new Distribution(distributionConfig.cluster(clusterName));
+ return new Distribution(getDistributionConfigId());
}
/**
@@ -560,8 +548,12 @@ public class ContentPolicy extends SlobrokPolicy {
private final Parameters parameters;
/** Constructor used in production. */
- public ContentPolicy(String param, DistributionConfig config) {
- this(new Parameters(parse(param), config));
+ public ContentPolicy(String param) {
+ this(parse(param));
+ }
+
+ public ContentPolicy(Map<String, String> params) {
+ this(new Parameters(params));
}
/** Constructor specifying a bit more in detail, so we can override what needs to be overridden in tests */
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentProtocol.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentProtocol.java
index 0ce83a3c204..2680ed011af 100755
--- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentProtocol.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentProtocol.java
@@ -11,12 +11,10 @@ import com.yahoo.messagebus.ErrorCode;
import com.yahoo.messagebus.Protocol;
import com.yahoo.messagebus.Reply;
import com.yahoo.messagebus.Routable;
-import com.yahoo.messagebus.documentapi.DocumentProtocolPoliciesConfig;
import com.yahoo.messagebus.routing.RoutingContext;
import com.yahoo.messagebus.routing.RoutingNodeIterator;
import com.yahoo.messagebus.routing.RoutingPolicy;
import com.yahoo.text.Utf8String;
-import com.yahoo.vespa.config.content.DistributionConfig;
import java.util.Collections;
import java.util.HashSet;
@@ -26,8 +24,6 @@ import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
-import static java.util.Objects.requireNonNull;
-
/**
* Implements the message bus protocol that is used by all components of Vespa.
*
@@ -247,36 +243,27 @@ public class DocumentProtocol implements Protocol {
this(docMan, configId, new LoadTypeSet());
}
- public DocumentProtocol(DocumentTypeManager documentTypeManager, LoadTypeSet loadTypes,
- DocumentProtocolPoliciesConfig policiesConfig, DistributionConfig distributionConfig) {
- this(requireNonNull(documentTypeManager), null, requireNonNull(loadTypes),
- requireNonNull(policiesConfig), requireNonNull(distributionConfig));
- }
-
public DocumentProtocol(DocumentTypeManager docMan, String configId, LoadTypeSet set) {
- this(docMan, configId == null ? "client" : configId, set, null, null);
- }
-
- private DocumentProtocol(DocumentTypeManager docMan, String configId, LoadTypeSet set,
- DocumentProtocolPoliciesConfig policiesConfig, DistributionConfig distributionConfig) {
- if (docMan != null)
+ // Prepare config string for routing policy factories.
+ String cfg = (configId == null ? "client" : configId);
+ if (docMan != null) {
this.docMan = docMan;
- else {
+ } else {
this.docMan = new DocumentTypeManager();
- DocumentTypeManagerConfigurer.configure(this.docMan, configId);
+ DocumentTypeManagerConfigurer.configure(this.docMan, cfg);
}
- this.routableRepository = new RoutableRepository(set);
+ routableRepository = new RoutableRepository(set);
// When adding factories to this list, please KEEP THEM ORDERED alphabetically like they are now.
putRoutingPolicyFactory("AND", new RoutingPolicyFactories.AndPolicyFactory());
- putRoutingPolicyFactory("Content", new RoutingPolicyFactories.ContentPolicyFactory(distributionConfig));
- putRoutingPolicyFactory("DocumentRouteSelector", new RoutingPolicyFactories.DocumentRouteSelectorPolicyFactory(configId, policiesConfig));
+ putRoutingPolicyFactory("Content", new RoutingPolicyFactories.ContentPolicyFactory());
+ putRoutingPolicyFactory("DocumentRouteSelector", new RoutingPolicyFactories.DocumentRouteSelectorPolicyFactory(cfg));
putRoutingPolicyFactory("Extern", new RoutingPolicyFactories.ExternPolicyFactory());
putRoutingPolicyFactory("LocalService", new RoutingPolicyFactories.LocalServicePolicyFactory());
- putRoutingPolicyFactory("MessageType", new RoutingPolicyFactories.MessageTypePolicyFactory(configId, policiesConfig));
+ putRoutingPolicyFactory("MessageType", new RoutingPolicyFactories.MessageTypePolicyFactory(cfg));
putRoutingPolicyFactory("RoundRobin", new RoutingPolicyFactories.RoundRobinPolicyFactory());
putRoutingPolicyFactory("LoadBalancer", new RoutingPolicyFactories.LoadBalancerPolicyFactory());
- putRoutingPolicyFactory("Storage", new RoutingPolicyFactories.ContentPolicyFactory(distributionConfig));
+ putRoutingPolicyFactory("Storage", new RoutingPolicyFactories.ContentPolicyFactory());
putRoutingPolicyFactory("SubsetService", new RoutingPolicyFactories.SubsetServicePolicyFactory());
// Prepare version specifications to use when adding routable factories.
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentRouteSelectorPolicy.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentRouteSelectorPolicy.java
index 6151daf043f..8fbd1548f68 100755
--- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentRouteSelectorPolicy.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/DocumentRouteSelectorPolicy.java
@@ -5,15 +5,13 @@ import com.yahoo.config.subscription.ConfigSubscriber;
import com.yahoo.document.DocumentGet;
import com.yahoo.document.select.DocumentSelector;
import com.yahoo.document.select.Result;
-import com.yahoo.document.select.parser.ParseException;
+import java.util.logging.Level;
import com.yahoo.messagebus.Message;
-import com.yahoo.messagebus.documentapi.DocumentProtocolPoliciesConfig;
import com.yahoo.messagebus.routing.Route;
import com.yahoo.messagebus.routing.RoutingContext;
import java.util.HashMap;
import java.util.Map;
-import java.util.logging.Level;
import java.util.logging.Logger;
/**
@@ -32,24 +30,6 @@ public class DocumentRouteSelectorPolicy
private String error = "Not configured.";
private ConfigSubscriber subscriber;
- /** This policy is constructed with the proper config at its time of creation. */
- public DocumentRouteSelectorPolicy(DocumentProtocolPoliciesConfig config) {
- Map<String, DocumentSelector> selectors = new HashMap<>();
- config.cluster().forEach((name, cluster) -> {
- try {
- selectors.put(name, new DocumentSelector(cluster.selector()));
- }
- catch (ParseException e) {
- throw new IllegalArgumentException("Error parsing selector '" +
- cluster.selector() +
- "' for route '" + name +"'",
- e);
- }
- });
- this.config = Map.copyOf(selectors);
- this.error = null;
- }
-
/**
* This policy is constructed with a configuration identifier that can be subscribed to for the document selector
* config. If the string is either null or empty it will default to the proper one.
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/MessageTypePolicy.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/MessageTypePolicy.java
index 026a26cfc0c..4226c1e6cac 100644
--- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/MessageTypePolicy.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/MessageTypePolicy.java
@@ -2,17 +2,13 @@
package com.yahoo.documentapi.messagebus.protocol;
import com.yahoo.config.subscription.ConfigSubscriber;
-import com.yahoo.messagebus.documentapi.DocumentProtocolPoliciesConfig;
import com.yahoo.messagebus.routing.Route;
import com.yahoo.messagebus.routing.RoutingContext;
import com.yahoo.vespa.config.content.MessagetyperouteselectorpolicyConfig;
-
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
-import static java.util.stream.Collectors.toUnmodifiableMap;
-
/**
* @author baldersheim
*/
@@ -22,13 +18,6 @@ public class MessageTypePolicy implements DocumentProtocolRoutingPolicy, ConfigS
private ConfigSubscriber subscriber;
private volatile Route defaultRoute;
- MessageTypePolicy(DocumentProtocolPoliciesConfig.Cluster config) {
- configRef.set(config.route().stream()
- .collect(toUnmodifiableMap(route -> route.messageType(),
- route -> Route.parse(route.name()))));
- defaultRoute = Route.parse(config.defaultRoute());
- }
-
MessageTypePolicy(String configId) {
subscriber = new ConfigSubscriber();
subscriber.subscribe(this, MessagetyperouteselectorpolicyConfig.class, configId);
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutingPolicyFactories.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutingPolicyFactories.java
index 8535fa610dd..7b44a1a4f0d 100755
--- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutingPolicyFactories.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutingPolicyFactories.java
@@ -1,72 +1,54 @@
// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.documentapi.messagebus.protocol;
-import com.yahoo.messagebus.documentapi.DocumentProtocolPoliciesConfig;
-import com.yahoo.vespa.config.content.DistributionConfig;
-
/**
* @author Simon Thoresen Hult
- * @author jonmv
*/
-class RoutingPolicyFactories {
-
- private RoutingPolicyFactories() { }
+public abstract class RoutingPolicyFactories {
static class AndPolicyFactory implements RoutingPolicyFactory {
public DocumentProtocolRoutingPolicy createPolicy(String param) {
return new ANDPolicy(param);
}
+
+
+ public void destroy() {
+ }
}
static class ContentPolicyFactory implements RoutingPolicyFactory {
- private final DistributionConfig distributionConfig;
- public ContentPolicyFactory(DistributionConfig config) { this.distributionConfig = config; }
public DocumentProtocolRoutingPolicy createPolicy(String param) {
- return new ContentPolicy(param, distributionConfig);
+ return new ContentPolicy(param);
+ }
+
+ public void destroy() {
}
}
static class MessageTypePolicyFactory implements RoutingPolicyFactory {
-
private final String configId;
- private final DocumentProtocolPoliciesConfig config;
- public MessageTypePolicyFactory(String configId, DocumentProtocolPoliciesConfig config) {
+ public MessageTypePolicyFactory(String configId) {
this.configId = configId;
- this.config = config;
}
-
public DocumentProtocolRoutingPolicy createPolicy(String param) {
- if (config != null) {
- if (config.cluster(param) == null)
- return new ErrorPolicy("No message type config for cluster '" + param + "'");
+ return new MessageTypePolicy((param == null || param.isEmpty()) ? configId : param);
+ }
- return new MessageTypePolicy(config.cluster(param));
- }
- return new MessageTypePolicy(param == null || param.isEmpty() ? configId : param);
+ public void destroy() {
}
}
static class DocumentRouteSelectorPolicyFactory implements RoutingPolicyFactory {
private final String configId;
- private final DocumentProtocolPoliciesConfig config;
- public DocumentRouteSelectorPolicyFactory(String configId, DocumentProtocolPoliciesConfig config) {
+ public DocumentRouteSelectorPolicyFactory(String configId) {
this.configId = configId;
- this.config = config;
}
public DocumentProtocolRoutingPolicy createPolicy(String param) {
- if (config != null) {
- try {
- return new DocumentRouteSelectorPolicy(config);
- }
- catch (IllegalArgumentException e) {
- return new ErrorPolicy(e.getMessage());
- }
- }
- DocumentRouteSelectorPolicy ret = new DocumentRouteSelectorPolicy(param == null || param.isEmpty() ?
+ DocumentRouteSelectorPolicy ret = new DocumentRouteSelectorPolicy((param == null || param.isEmpty()) ?
configId : param);
String error = ret.getError();
if (error != null) {
@@ -74,6 +56,10 @@ class RoutingPolicyFactories {
}
return ret;
}
+
+
+ public void destroy() {
+ }
}
static class ExternPolicyFactory implements RoutingPolicyFactory {
@@ -85,30 +71,49 @@ class RoutingPolicyFactories {
}
return ret;
}
+
+
+ public void destroy() {
+ }
}
static class LocalServicePolicyFactory implements RoutingPolicyFactory {
public DocumentProtocolRoutingPolicy createPolicy(String param) {
return new LocalServicePolicy(param);
}
+
+
+ public void destroy() {
+ }
}
static class RoundRobinPolicyFactory implements RoutingPolicyFactory {
public DocumentProtocolRoutingPolicy createPolicy(String param) {
return new RoundRobinPolicy();
}
+
+
+ public void destroy() {
+ }
}
static class LoadBalancerPolicyFactory implements RoutingPolicyFactory {
public DocumentProtocolRoutingPolicy createPolicy(String param) {
return new LoadBalancerPolicy(param);
}
+
+
+ public void destroy() {
+ }
}
static class SubsetServicePolicyFactory implements RoutingPolicyFactory {
public DocumentProtocolRoutingPolicy createPolicy(String param) {
return new SubsetServicePolicy(param);
}
- }
+
+ public void destroy() {
+ }
+ }
}
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutingPolicyFactory.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutingPolicyFactory.java
index 3e368832c98..6ea5020607e 100755
--- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutingPolicyFactory.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutingPolicyFactory.java
@@ -24,6 +24,11 @@ public interface RoutingPolicyFactory {
* @param param The parameter to use when creating the policy.
* @return The created routing policy.
*/
- DocumentProtocolRoutingPolicy createPolicy(String param);
+ public DocumentProtocolRoutingPolicy createPolicy(String param);
+ /**
+ * Destroys this factory and frees up any resources it has held. Making further calls on a destroyed
+ * factory causes a runtime exception.
+ */
+ public void destroy();
}
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/SlobrokPolicy.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/SlobrokPolicy.java
index 1ffce622d78..f4e1bb33dd1 100644
--- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/SlobrokPolicy.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/SlobrokPolicy.java
@@ -10,10 +10,10 @@ import java.util.Map;
import java.util.TreeMap;
/**
- * Abstract class for policies that allow you to specify which slobrok to use for the routing.
+ * Abstract class for policies that allow you to specify which slobrok to use for the
+ * routing.
*/
public abstract class SlobrokPolicy implements DocumentProtocolRoutingPolicy {
-
private boolean firstTry = true;
protected List<Mirror.Entry> lookup(RoutingContext context, String pattern) {