You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2015/03/02 01:45:45 UTC
svn commit: r1663189 - in /qpid/trunk/qpid/java:
bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/
broker-core/src/main/java/org/apache/qpid/server/exchange/
broker-core/src/main/java/org/apache/qpid/server/model/ broker-core/src/ma...
Author: rgodfrey
Date: Mon Mar 2 00:45:45 2015
New Revision: 1663189
URL: http://svn.apache.org/r1663189
Log:
QPID-6425 : [Java Broker] Allow for local and global name equivalence on virtual hosts
Modified:
qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHostImpl.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultDestination.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostImpl.java
qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java
Modified: qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHostImpl.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHostImpl.java?rev=1663189&r1=1663188&r2=1663189&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHostImpl.java (original)
+++ qpid/trunk/qpid/java/bdbstore/src/main/java/org/apache/qpid/server/virtualhost/berkeleydb/BDBHAReplicaVirtualHostImpl.java Mon Mar 2 00:45:45 2015
@@ -90,6 +90,8 @@ public class BDBHAReplicaVirtualHostImpl
@ManagedAttributeField
private List<String> _disabledConnectionValidators;
+ @ManagedAttributeField
+ private List<String> _globalAddressDomains;
@ManagedObjectFactoryConstructor
public BDBHAReplicaVirtualHostImpl(final Map<String, Object> attributes, VirtualHostNode<?> virtualHostNode)
@@ -482,6 +484,29 @@ public class BDBHAReplicaVirtualHostImpl
return _disabledConnectionValidators;
}
+ @Override
+ public List<String> getGlobalAddressDomains()
+ {
+ return _globalAddressDomains;
+ }
+
+ @Override
+ public String getLocalAddress(final String routingAddress)
+ {
+ String localAddress = routingAddress;
+ if(getGlobalAddressDomains() != null)
+ {
+ for(String domain : getGlobalAddressDomains())
+ {
+ if(localAddress.length() > routingAddress.length() - domain.length() && routingAddress.startsWith(domain + "/"))
+ {
+ localAddress = routingAddress.substring(domain.length());
+ }
+ }
+ }
+ return localAddress;
+ }
+
private void throwUnsupportedForReplica()
{
throw new IllegalStateException("The virtual host state of " + getState()
Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultDestination.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultDestination.java?rev=1663189&r1=1663188&r2=1663189&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultDestination.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/exchange/DefaultDestination.java Mon Mar 2 00:45:45 2015
@@ -62,7 +62,8 @@ public class DefaultDestination implemen
final AMQQueue q = _virtualHost.getQueue(routingAddress);
if(q == null)
{
- if(routingAddress != null && routingAddress.contains("/") && !routingAddress.startsWith("/"))
+ routingAddress = _virtualHost.getLocalAddress(routingAddress);
+ if(routingAddress.contains("/") && !routingAddress.startsWith("/"))
{
String[] parts = routingAddress.split("/",2);
ExchangeImpl exchange = _virtualHost.getExchange(parts[0]);
@@ -71,7 +72,7 @@ public class DefaultDestination implemen
return exchange.send(message, parts[1], instanceProperties, txn, postEnqueueAction);
}
}
- else if(routingAddress == null || !routingAddress.contains("/"))
+ else if(!routingAddress.contains("/"))
{
ExchangeImpl exchange = _virtualHost.getExchange(routingAddress);
if(exchange != null)
Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java?rev=1663189&r1=1663188&r2=1663189&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/VirtualHost.java Mon Mar 2 00:45:45 2015
@@ -46,6 +46,7 @@ public interface VirtualHost<X extends V
String MODEL_VERSION = "modelVersion";
String ENABLED_CONNECTION_VALIDATORS = "enabledConnectionValidators";
String DISABLED_CONNECTION_VALIDATORS = "disabledConnectionValidators";
+ String GLOBAL_ADDRESS_DOMAINS = "globalAddressDomains";
@ManagedContextDefault( name = "queue.deadLetterQueueEnabled")
public static final boolean DEFAULT_DEAD_LETTER_QUEUE_ENABLED = false;
@@ -104,6 +105,9 @@ public interface VirtualHost<X extends V
@ManagedAttribute( defaultValue = "${virtualhost.disabledConnectionValidators}")
List<String> getDisabledConnectionValidators();
+ @ManagedAttribute( defaultValue = "[]")
+ List<String> getGlobalAddressDomains();
+
@ManagedStatistic
long getQueueCount();
Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java?rev=1663189&r1=1663188&r2=1663189&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java Mon Mar 2 00:45:45 2015
@@ -172,6 +172,8 @@ public abstract class AbstractVirtualHos
@ManagedAttributeField
private List<String> _disabledConnectionValidators;
+ @ManagedAttributeField
+ private List<String> _globalAddressDomains;
private boolean _useAsyncRecoverer;
@@ -222,6 +224,13 @@ public abstract class AbstractVirtualHos
{
throw new IllegalArgumentException(getClass().getSimpleName() + " must be durable");
}
+ if(getGlobalAddressDomains() != null)
+ {
+ for(String domain : getGlobalAddressDomains())
+ {
+ validateGlobalAddressDomain(domain);
+ }
+ }
}
@Override
@@ -240,6 +249,26 @@ public abstract class AbstractVirtualHos
throw new IntegrityViolationException("Cannot delete default virtual host '" + getName() + "'");
}
}
+ if(changedAttributes.contains(GLOBAL_ADDRESS_DOMAINS))
+ {
+ VirtualHost<?, ?, ?> virtualHost = (VirtualHost<?, ?, ?>) proxyForValidation;
+ if(virtualHost.getGlobalAddressDomains() != null)
+ {
+ for(String name : virtualHost.getGlobalAddressDomains())
+ {
+ validateGlobalAddressDomain(name);
+ }
+ }
+ }
+ }
+
+ private void validateGlobalAddressDomain(final String name)
+ {
+ String regex = "/(/?)([\\w_\\-:.\\$]+/)*[\\w_\\-:.\\$]+";
+ if(!name.matches(regex))
+ {
+ throw new IllegalArgumentException("'"+name+"' is not a valid global address domain");
+ }
}
@Override
@@ -253,8 +282,17 @@ public abstract class AbstractVirtualHos
{
super.validateOnCreate();
validateMessageStoreCreation();
+ if(getGlobalAddressDomains() != null)
+ {
+ for(String name : getGlobalAddressDomains())
+ {
+ validateGlobalAddressDomain(name);
+ }
+ }
}
+
+
private void validateMessageStoreCreation()
{
MessageStore store = createMessageStore();
@@ -574,11 +612,31 @@ public abstract class AbstractVirtualHos
return _disabledConnectionValidators;
}
+ @Override
+ public List<String> getGlobalAddressDomains()
+ {
+ return _globalAddressDomains;
+ }
@Override
public AMQQueue<?> getQueue(String name)
{
- return (AMQQueue<?>) getChildByName(Queue.class, name);
+ AMQQueue<?> childByName = (AMQQueue<?>) getChildByName(Queue.class, name);
+ if(childByName == null && getGlobalAddressDomains() != null)
+ {
+ for(String domain : getGlobalAddressDomains())
+ {
+ if(name.startsWith(domain + "/"))
+ {
+ childByName = (AMQQueue<?>) getChildByName(Queue.class,name.substring(domain.length()));
+ if(childByName != null)
+ {
+ break;
+ }
+ }
+ }
+ }
+ return childByName;
}
@Override
@@ -664,7 +722,22 @@ public abstract class AbstractVirtualHos
@Override
public ExchangeImpl getExchange(String name)
{
- return getChildByName(ExchangeImpl.class,name);
+ ExchangeImpl childByName = getChildByName(ExchangeImpl.class, name);
+ if(childByName == null && getGlobalAddressDomains() != null)
+ {
+ for(String domain : getGlobalAddressDomains())
+ {
+ if(name.startsWith(domain + "/"))
+ {
+ childByName = getChildByName(ExchangeImpl.class,name.substring(domain.length()));
+ if(childByName != null)
+ {
+ break;
+ }
+ }
+ }
+ }
+ return childByName;
}
@Override
@@ -721,6 +794,23 @@ public abstract class AbstractVirtualHos
exchange.deleteWithChecks();
}
+ @Override
+ public String getLocalAddress(final String routingAddress)
+ {
+ String localAddress = routingAddress;
+ if(getGlobalAddressDomains() != null)
+ {
+ for(String domain : getGlobalAddressDomains())
+ {
+ if(localAddress.length() > routingAddress.length() - domain.length() && routingAddress.startsWith(domain + "/"))
+ {
+ localAddress = routingAddress.substring(domain.length());
+ }
+ }
+ }
+ return localAddress;
+ }
+
public SecurityManager getSecurityManager()
{
return _broker.getSecurityManager();
Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java?rev=1663189&r1=1663188&r2=1663189&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java Mon Mar 2 00:45:45 2015
@@ -110,4 +110,6 @@ public interface VirtualHostImpl< X exte
EventLogger getEventLogger();
boolean authoriseCreateConnection(AMQConnectionModel<?, ?> connection);
+
+ String getLocalAddress(String routingAddress);
}
Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostImpl.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostImpl.java?rev=1663189&r1=1663188&r2=1663189&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostImpl.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhostnode/RedirectingVirtualHostImpl.java Mon Mar 2 00:45:45 2015
@@ -90,6 +90,8 @@ class RedirectingVirtualHostImpl
@ManagedAttributeField
private List<String> _disabledConnectionValidators;
+ @ManagedAttributeField
+ private List<String> _globalAddressDomains;
@ManagedObjectFactoryConstructor
public RedirectingVirtualHostImpl(final Map<String, Object> attributes, VirtualHostNode<?> virtualHostNode)
@@ -482,6 +484,29 @@ class RedirectingVirtualHostImpl
return _disabledConnectionValidators;
}
+ @Override
+ public List<String> getGlobalAddressDomains()
+ {
+ return _globalAddressDomains;
+ }
+
+ @Override
+ public String getLocalAddress(final String routingAddress)
+ {
+ String localAddress = routingAddress;
+ if(getGlobalAddressDomains() != null)
+ {
+ for(String domain : getGlobalAddressDomains())
+ {
+ if(localAddress.length() > routingAddress.length() - domain.length() && routingAddress.startsWith(domain + "/"))
+ {
+ localAddress = routingAddress.substring(domain.length());
+ }
+ }
+ }
+ return localAddress;
+ }
+
private void throwUnsupportedForRedirector()
{
throw new IllegalStateException("The virtual host state of " + getState()
Modified: qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java?rev=1663189&r1=1663188&r2=1663189&view=diff
==============================================================================
--- qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java (original)
+++ qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/Asserts.java Mon Mar 2 00:45:45 2015
@@ -78,6 +78,7 @@ public class Asserts
ConfiguredObject.DESIRED_STATE,
VirtualHost.ENABLED_CONNECTION_VALIDATORS,
VirtualHost.DISABLED_CONNECTION_VALIDATORS,
+ VirtualHost.GLOBAL_ADDRESS_DOMAINS,
VirtualHost.TYPE);
assertEquals("Unexpected value of attribute " + VirtualHost.NAME,
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org