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