diff options
author | Jon Marius Venstad <jonmv@users.noreply.github.com> | 2021-01-28 08:31:04 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-01-28 08:31:04 +0100 |
commit | 2e2e2edeb3ea99f2c04925070cf44601e2cd94fb (patch) | |
tree | 51b8ba2272b299ab676cdae6e04b3f050979ac12 /documentapi | |
parent | e4a2b4d09f15ef07c41c35520a23e0970895b2aa (diff) |
Revert "Jonmv/reapply document protocol super config [run-systemtest]"
Diffstat (limited to 'documentapi')
13 files changed, 104 insertions, 315 deletions
diff --git a/documentapi/abi-spec.json b/documentapi/abi-spec.json index 36c2e1fda99..39d6898215c 100644 --- a/documentapi/abi-spec.json +++ b/documentapi/abi-spec.json @@ -1128,7 +1128,6 @@ "public com.yahoo.documentapi.messagebus.MessageBusParams setRoutingConfigId(java.lang.String)", "public java.lang.String getProtocolConfigId()", "public com.yahoo.documentapi.messagebus.MessageBusParams setProtocolConfigId(java.lang.String)", - "public com.yahoo.documentapi.messagebus.MessageBusParams setDocumentProtocolPoliciesConfig(com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig, com.yahoo.vespa.config.content.DistributionConfig)", "public com.yahoo.documentapi.messagebus.MessageBusParams setRouteName(java.lang.String)", "public com.yahoo.documentapi.messagebus.MessageBusParams setRoute(java.lang.String)", "public com.yahoo.documentapi.messagebus.MessageBusParams setRouteNameForGet(java.lang.String)", @@ -1574,7 +1573,6 @@ "fields": [ "protected final java.lang.String clusterName", "protected final java.lang.String distributionConfigId", - "protected final com.yahoo.vespa.config.content.DistributionConfig distributionConfig", "protected final com.yahoo.documentapi.messagebus.protocol.ContentPolicy$SlobrokHostPatternGenerator slobrokHostPatternGenerator" ] }, @@ -1597,7 +1595,8 @@ "public" ], "methods": [ - "public void <init>(java.lang.String, com.yahoo.vespa.config.content.DistributionConfig)", + "public void <init>(java.lang.String)", + "public void <init>(java.util.Map)", "public void <init>(com.yahoo.documentapi.messagebus.protocol.ContentPolicy$Parameters)", "public void select(com.yahoo.messagebus.routing.RoutingContext)", "public void merge(com.yahoo.messagebus.routing.RoutingContext)", @@ -1807,7 +1806,6 @@ "public static com.yahoo.documentapi.messagebus.protocol.DocumentProtocol$Priority getPriorityByName(java.lang.String)", "public void <init>(com.yahoo.document.DocumentTypeManager)", "public void <init>(com.yahoo.document.DocumentTypeManager, java.lang.String)", - "public void <init>(com.yahoo.document.DocumentTypeManager, com.yahoo.documentapi.messagebus.loadtypes.LoadTypeSet, com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig, com.yahoo.vespa.config.content.DistributionConfig)", "public void <init>(com.yahoo.document.DocumentTypeManager, java.lang.String, com.yahoo.documentapi.messagebus.loadtypes.LoadTypeSet)", "public com.yahoo.documentapi.messagebus.protocol.DocumentProtocol putRoutingPolicyFactory(java.lang.String, com.yahoo.documentapi.messagebus.protocol.RoutingPolicyFactory)", "public com.yahoo.documentapi.messagebus.protocol.DocumentProtocol putRoutableFactory(int, com.yahoo.documentapi.messagebus.protocol.RoutableFactory, com.yahoo.component.VersionSpecification)", @@ -1892,138 +1890,6 @@ "public static final int ERROR_SUSPENDED" ] }, - "com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig$Builder": { - "superClass": "java.lang.Object", - "interfaces": [ - "com.yahoo.config.ConfigInstance$Builder" - ], - "attributes": [ - "public" - ], - "methods": [ - "public void <init>()", - "public void <init>(com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig)", - "public com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig$Builder cluster(java.lang.String, com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig$Cluster$Builder)", - "public com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig$Builder cluster(java.util.Map)", - "public final boolean dispatchGetConfig(com.yahoo.config.ConfigInstance$Producer)", - "public final java.lang.String getDefMd5()", - "public final java.lang.String getDefName()", - "public final java.lang.String getDefNamespace()", - "public final boolean getApplyOnRestart()", - "public final void setApplyOnRestart(boolean)", - "public com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig build()" - ], - "fields": [ - "public java.util.Map cluster" - ] - }, - "com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig$Cluster$Builder": { - "superClass": "java.lang.Object", - "interfaces": [ - "com.yahoo.config.ConfigBuilder" - ], - "attributes": [ - "public" - ], - "methods": [ - "public void <init>()", - "public void <init>(com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig$Cluster)", - "public com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig$Cluster$Builder defaultRoute(java.lang.String)", - "public com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig$Cluster$Builder route(com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig$Cluster$Route$Builder)", - "public com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig$Cluster$Builder route(java.util.List)", - "public com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig$Cluster$Builder selector(java.lang.String)", - "public com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig$Cluster build()" - ], - "fields": [ - "public java.util.List route" - ] - }, - "com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig$Cluster$Route$Builder": { - "superClass": "java.lang.Object", - "interfaces": [ - "com.yahoo.config.ConfigBuilder" - ], - "attributes": [ - "public" - ], - "methods": [ - "public void <init>()", - "public void <init>(com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig$Cluster$Route)", - "public com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig$Cluster$Route$Builder name(java.lang.String)", - "public com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig$Cluster$Route$Builder messageType(int)", - "public com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig$Cluster$Route build()" - ], - "fields": [] - }, - "com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig$Cluster$Route": { - "superClass": "com.yahoo.config.InnerNode", - "interfaces": [], - "attributes": [ - "public", - "final" - ], - "methods": [ - "public void <init>(com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig$Cluster$Route$Builder)", - "public java.lang.String name()", - "public int messageType()" - ], - "fields": [] - }, - "com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig$Cluster": { - "superClass": "com.yahoo.config.InnerNode", - "interfaces": [], - "attributes": [ - "public", - "final" - ], - "methods": [ - "public void <init>(com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig$Cluster$Builder)", - "public java.lang.String defaultRoute()", - "public java.util.List route()", - "public com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig$Cluster$Route route(int)", - "public java.lang.String selector()" - ], - "fields": [] - }, - "com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig$Producer": { - "superClass": "java.lang.Object", - "interfaces": [ - "com.yahoo.config.ConfigInstance$Producer" - ], - "attributes": [ - "public", - "interface", - "abstract" - ], - "methods": [ - "public abstract void getConfig(com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig$Builder)" - ], - "fields": [] - }, - "com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig": { - "superClass": "com.yahoo.config.ConfigInstance", - "interfaces": [], - "attributes": [ - "public", - "final" - ], - "methods": [ - "public static java.lang.String getDefMd5()", - "public static java.lang.String getDefName()", - "public static java.lang.String getDefNamespace()", - "public static java.lang.String getDefVersion()", - "public void <init>(com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig$Builder)", - "public java.util.Map cluster()", - "public com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig$Cluster cluster(java.lang.String)" - ], - "fields": [ - "public static final java.lang.String CONFIG_DEF_MD5", - "public static final java.lang.String CONFIG_DEF_NAME", - "public static final java.lang.String CONFIG_DEF_NAMESPACE", - "public static final java.lang.String CONFIG_DEF_VERSION", - "public static final java.lang.String[] CONFIG_DEF_SCHEMA" - ] - }, "com.yahoo.documentapi.messagebus.protocol.DocumentProtocolRoutingPolicy": { "superClass": "java.lang.Object", "interfaces": [ @@ -2062,7 +1928,6 @@ "public" ], "methods": [ - "public void <init>(com.yahoo.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig)", "public void <init>(java.lang.String)", "public synchronized java.lang.String getError()", "public void configure(com.yahoo.documentapi.messagebus.protocol.DocumentrouteselectorpolicyConfig)", @@ -3087,6 +2952,18 @@ ], "fields": [] }, + "com.yahoo.documentapi.messagebus.protocol.RoutingPolicyFactories": { + "superClass": "java.lang.Object", + "interfaces": [], + "attributes": [ + "public", + "abstract" + ], + "methods": [ + "public void <init>()" + ], + "fields": [] + }, "com.yahoo.documentapi.messagebus.protocol.RoutingPolicyFactory": { "superClass": "java.lang.Object", "interfaces": [], @@ -3096,7 +2973,8 @@ "abstract" ], "methods": [ - "public abstract com.yahoo.documentapi.messagebus.protocol.DocumentProtocolRoutingPolicy createPolicy(java.lang.String)" + "public abstract com.yahoo.documentapi.messagebus.protocol.DocumentProtocolRoutingPolicy createPolicy(java.lang.String)", + "public abstract void destroy()" ], "fields": [] }, 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 e167e0057e2..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,13 +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.documentapi.messagebus.protocol.DocumentProtocolPoliciesConfig; import com.yahoo.messagebus.SourceSessionParams; import com.yahoo.messagebus.network.rpc.RPCNetworkParams; -import com.yahoo.vespa.config.content.DistributionConfig; - -import static java.util.Objects.requireNonNull; /** * @author Einar M R Rosenvinge @@ -18,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; @@ -86,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 547d7f76dc5..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 @@ -15,7 +15,6 @@ 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; @@ -25,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. * @@ -246,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 07fd098c9b4..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,14 +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.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; /** @@ -31,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 34124cf48db..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 @@ -5,13 +5,10 @@ import com.yahoo.config.subscription.ConfigSubscriber; 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 */ @@ -21,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 c313422ab1b..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.documentapi.messagebus.protocol.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) { diff --git a/documentapi/src/main/resources/configdefinitions/document-protocol-policies.def b/documentapi/src/main/resources/configdefinitions/document-protocol-policies.def deleted file mode 100644 index ace4f254821..00000000000 --- a/documentapi/src/main/resources/configdefinitions/document-protocol-policies.def +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -namespace=documentapi.messagebus.protocol - -## -## Super config for all policies in the document protocol, keyed by content cluster ids. -## Note: ContentPolicy also uses the "distribution" config. -## - -# -# Config used by MessageTypeRouteSelectorPolicy -# -# Default route if no override is set for a type. -cluster{}.defaultRoute string - -# The name of the route. -cluster{}.route[].name string - -# The document protocol message type triggering this route. -cluster{}.route[].messageType int - -# -# Config used by DocumentRouteSelectorPolicy -# -# The document selector for this cluster route. -cluster{}.selector string diff --git a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/storagepolicy/ContentPolicyTest.java b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/storagepolicy/ContentPolicyTest.java index 5aa3994a757..f324245b612 100644 --- a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/storagepolicy/ContentPolicyTest.java +++ b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/storagepolicy/ContentPolicyTest.java @@ -5,7 +5,6 @@ import org.junit.Ignore; import org.junit.Test; public class ContentPolicyTest extends Simulator { - /** * Verify that a resent message with failures doesn't ruin overall performance. (By dumping the cached state too often * so other requests are sent to wrong target) @@ -18,7 +17,6 @@ public class ContentPolicyTest extends Simulator { + "Last correctnode 99, wrongnode 1, downnode 0, worked 92, failed 8", new PersistentFailureTestParameters().addBadNode(new BadNode(3, FailureType.TRANSIENT_ERROR))); } - /** * Verify that a resent message with failures doesn't ruin overall performance. (By dumping the cached state too often * so other requests are sent to wrong target) @@ -31,7 +29,6 @@ public class ContentPolicyTest extends Simulator { + "Last correctnode 99, wrongnode 1, downnode 0, worked 92, failed 8", new PersistentFailureTestParameters().addBadNode(new BadNode(3, FailureType.FATAL_ERROR))); } - /** * Verify that a node responding with old cluster state doesn't ruin overall performance (By dumping/switching cached * state too often) @@ -44,7 +41,6 @@ public class ContentPolicyTest extends Simulator { + "Last correctnode 100, wrongnode 0, downnode 0, worked 100, failed 0", new PersistentFailureTestParameters().addBadNode(new BadNode(3, FailureType.OLD_CLUSTER_STATE).setDownInCurrentState())); } - /** * Verify that a reset cluster state version doesn't keep sending requests to the wrong node. * We expect a few failures in first half. We should have detected the issue before second half, so there all should be fine. @@ -56,7 +52,6 @@ public class ContentPolicyTest extends Simulator { + "Last correctnode .*, wrongnode 0, downnode 0, worked .*, failed 0", new PersistentFailureTestParameters().addBadNode(new BadNode(3, FailureType.RESET_CLUSTER_STATE).setDownInCurrentState())); } - /** * Verify that a reset cluster state version doesn't keep sending requests to the wrong node. * We expect a few failures in first half. We should have detected the issue before second half, so there all should be fine. @@ -75,7 +70,6 @@ public class ContentPolicyTest extends Simulator { + "Last correctnode .*, wrongnode 100, downnode 100, worked 0, failed 100", new PersistentFailureTestParameters().addBadNode(new BadNode(3, FailureType.RESET_CLUSTER_STATE_NO_GOOD_NODES).setDownInCurrentState())); } - /** * Verify that a reset cluster state version doesn't keep sending requests to the wrong node. * We expect a few failures in first half. We should have detected the issue before second half, so there all should be fine. @@ -92,7 +86,6 @@ public class ContentPolicyTest extends Simulator { + "Last correctnode .*, wrongnode 91, downnode 0, worked 0, failed 100", new PersistentFailureTestParameters().addBadNode(new BadNode(3, FailureType.RESET_CLUSTER_STATE_NO_GOOD_NODES))); } - /** * Verify that a reset cluster state version doesn't keep sending requests to the wrong node. * Another scenario where we have a node coming up in correct state. @@ -105,7 +98,6 @@ public class ContentPolicyTest extends Simulator { + "Last correctnode .*, wrongnode 0, downnode 0, worked .*, failed 0", new PersistentFailureTestParameters().newNodeAdded().addBadNode(new BadNode(3, FailureType.RESET_CLUSTER_STATE).setDownInCurrentState())); } - /** Test node that is not in slobrok. Until fleetcontroller detects this, we expect 10% of the requests to go to wrong node. */ @Test @Ignore // FIXME test has been implicitly disabled for ages, figure out and fix diff --git a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/storagepolicy/ContentPolicyTestEnvironment.java b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/storagepolicy/ContentPolicyTestEnvironment.java index 6d2477e1871..479e0b0f422 100644 --- a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/storagepolicy/ContentPolicyTestEnvironment.java +++ b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/storagepolicy/ContentPolicyTestEnvironment.java @@ -34,13 +34,11 @@ import java.util.TreeSet; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; public abstract class ContentPolicyTestEnvironment { - protected ContentPolicyTestFactory policyFactory; + protected StoragePolicyTestFactory policyFactory; protected PolicyTestFrame frame; private Set<Integer> nodes; protected static int[] bucketOneNodePreference = new int[]{ 3, 5, 7, 6, 8, 0, 9, 2, 1, 4 }; @@ -53,7 +51,7 @@ public abstract class ContentPolicyTestEnvironment { frame = new PolicyTestFrame(manager); nodes = new TreeSet<>(); DocumentProtocol protocol = (DocumentProtocol) frame.getMessageBus().getProtocol((Utf8Array)DocumentProtocol.NAME); - policyFactory = new ContentPolicyTestFactory(nodes); + policyFactory = new StoragePolicyTestFactory(nodes); protocol.putRoutingPolicyFactory("storage", policyFactory); frame.setMessage(createMessage("id:ns:testdoc:n=1:foo")); frame.setHop(new HopSpec("test", "[storage:cluster=foo]")); @@ -106,7 +104,7 @@ public abstract class ContentPolicyTestEnvironment { public static class TestHostFetcher extends ContentPolicy.HostFetcher { private final String clusterName; - private final RandomGen randomizer = new RandomGen(1234); + private RandomGen randomizer = new RandomGen(1234); private final Set<Integer> nodes; private Integer avoidPickingAtRandom = null; @@ -123,14 +121,13 @@ public abstract class ContentPolicyTestEnvironment { try{ if (distributor == null) { if (nodes.size() == 1) { - assertNotSame(avoidPickingAtRandom, nodes.iterator().next()); + assertTrue(avoidPickingAtRandom != nodes.iterator().next()); distributor = nodes.iterator().next(); } else { Iterator<Integer> it = nodes.iterator(); for (int i = 0, n = randomizer.nextInt(nodes.size() - 1); i<n; ++i) it.next(); distributor = it.next(); - if (avoidPickingAtRandom != null && avoidPickingAtRandom.equals(distributor)) - distributor = it.next(); + if (avoidPickingAtRandom != null && distributor == avoidPickingAtRandom) distributor = it.next(); } } if (nodes.contains(distributor)) { @@ -140,7 +137,8 @@ public abstract class ContentPolicyTestEnvironment { } } catch (RuntimeException e) { e.printStackTrace(); - throw new AssertionError(e.getMessage()); + assertTrue(e.getMessage(), false); + throw e; } } } @@ -162,12 +160,12 @@ public abstract class ContentPolicyTestEnvironment { public Distribution createDistribution(SlobrokPolicy policy) { return distribution; } } - public static class ContentPolicyTestFactory implements RoutingPolicyFactory { + public static class StoragePolicyTestFactory implements RoutingPolicyFactory { private Set<Integer> nodes; - private final LinkedList<TestParameters> parameterInstances = new LinkedList<>(); + private final LinkedList<TestParameters> parameterInstances = new LinkedList<TestParameters>(); private Integer avoidPickingAtRandom = null; - public ContentPolicyTestFactory(Set<Integer> nodes) { + public StoragePolicyTestFactory(Set<Integer> nodes) { this.nodes = nodes; } public DocumentProtocolRoutingPolicy createPolicy(String parameters) { diff --git a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/storagepolicy/Simulator.java b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/storagepolicy/Simulator.java index be880e69781..d23dd9ea998 100644 --- a/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/storagepolicy/Simulator.java +++ b/documentapi/src/test/java/com/yahoo/documentapi/messagebus/protocol/test/storagepolicy/Simulator.java @@ -31,7 +31,7 @@ public abstract class Simulator extends ContentPolicyTestEnvironment { RESET_CLUSTER_STATE_NO_GOOD_NODES, NODE_NOT_IN_SLOBROK }; - private int getIdealTarget(String idString, String clusterState) { + private Integer getIdealTarget(String idString, String clusterState) { DocumentId did = new DocumentId(idString); BucketIdFactory factory = new BucketIdFactory(); BucketId bid = factory.getBucketId(did); @@ -145,7 +145,6 @@ public abstract class Simulator extends ContentPolicyTestEnvironment { return currentClusterState; } } - public void runSimulation(String expected, PersistentFailureTestParameters params) { params.validate(); // Set nodes in slobrok @@ -158,16 +157,16 @@ public abstract class Simulator extends ContentPolicyTestEnvironment { replyWrongDistribution(target, "foo", null, params.getInitialClusterState().toString()); } RandomGen randomizer = new RandomGen(432121); - int[] correctnode = new int[2], - wrongnode = new int[2], - failed = new int[2], - worked = new int[2], - downnode = new int[2]; + int correctnode[] = new int[2], + wrongnode[] = new int[2], + failed[] = new int[2], + worked[] = new int[2], + downnode[] = new int[2]; for (int step = 0, steps = (params.getTotalRequests() / params.getParallellRequests()); step < steps; ++step) { int half = (step < steps / 2 ? 0 : 1); if (debug) System.err.println("Starting step " + step + " in half " + half); - String[] docId = new String[params.getParallellRequests()]; - RoutingNode[] targets = new RoutingNode[params.getParallellRequests()]; + String docId[] = new String[params.getParallellRequests()]; + RoutingNode targets[] = new RoutingNode[params.getParallellRequests()]; for (int i=0; i<params.getParallellRequests(); ++i) { docId[i] = "id:ns:testdoc::" + (step * params.getParallellRequests() + i); frame.setMessage(createMessage(docId[i])); @@ -207,6 +206,7 @@ public abstract class Simulator extends ContentPolicyTestEnvironment { } } StringBuilder actual = new StringBuilder(); + String result[][] = new String[2][]; for (int i=0; i<2; ++i) { actual.append(i == 0 ? "First " : " Last ") .append("correctnode ").append(correctnode[i]) @@ -215,7 +215,7 @@ public abstract class Simulator extends ContentPolicyTestEnvironment { .append(", worked ").append(worked[i]) .append(", failed ").append(failed[i]); } - if ( ! Pattern.matches(expected, actual.toString())) { + if (!Pattern.matches(expected, actual.toString())) { assertEquals(expected, actual.toString()); } } |