diff options
Diffstat (limited to 'documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutingPolicyFactories.java')
-rwxr-xr-x | documentapi/src/main/java/com/yahoo/documentapi/messagebus/protocol/RoutingPolicyFactories.java | 73 |
1 files changed, 34 insertions, 39 deletions
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 7b44a1a4f0d..c313422ab1b 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,54 +1,72 @@ // 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 */ -public abstract class RoutingPolicyFactories { +class RoutingPolicyFactories { + + private 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); - } - - public void destroy() { + return new ContentPolicy(param, distributionConfig); } } static class MessageTypePolicyFactory implements RoutingPolicyFactory { + private final String configId; + private final DocumentProtocolPoliciesConfig config; - public MessageTypePolicyFactory(String configId) { + public MessageTypePolicyFactory(String configId, DocumentProtocolPoliciesConfig config) { this.configId = configId; + this.config = config; } + public DocumentProtocolRoutingPolicy createPolicy(String param) { - return new MessageTypePolicy((param == null || param.isEmpty()) ? configId : param); - } + if (config != null) { + if (config.cluster(param) == null) + return new ErrorPolicy("No message type config for cluster '" + param + "'"); - public void destroy() { + return new MessageTypePolicy(config.cluster(param)); + } + return new MessageTypePolicy(param == null || param.isEmpty() ? configId : param); } } static class DocumentRouteSelectorPolicyFactory implements RoutingPolicyFactory { private final String configId; + private final DocumentProtocolPoliciesConfig config; - public DocumentRouteSelectorPolicyFactory(String configId) { + public DocumentRouteSelectorPolicyFactory(String configId, DocumentProtocolPoliciesConfig config) { this.configId = configId; + this.config = config; } public DocumentProtocolRoutingPolicy createPolicy(String param) { - DocumentRouteSelectorPolicy ret = new DocumentRouteSelectorPolicy((param == null || param.isEmpty()) ? + if (config != null) { + try { + return new DocumentRouteSelectorPolicy(config); + } + catch (IllegalArgumentException e) { + return new ErrorPolicy(e.getMessage()); + } + } + DocumentRouteSelectorPolicy ret = new DocumentRouteSelectorPolicy(param == null || param.isEmpty() ? configId : param); String error = ret.getError(); if (error != null) { @@ -56,10 +74,6 @@ public abstract class RoutingPolicyFactories { } return ret; } - - - public void destroy() { - } } static class ExternPolicyFactory implements RoutingPolicyFactory { @@ -71,49 +85,30 @@ public abstract 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() { - } } + } |