You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2012/07/06 16:01:28 UTC

svn commit: r1358217 - in /qpid/trunk/qpid/java: bdbstore/jmx/src/test/java/org/apache/qpid/server/store/berkeleydb/ broker/src/main/java/org/apache/qpid/server/model/adapter/ broker/src/main/java/org/apache/qpid/server/virtualhost/

Author: kwall
Date: Fri Jul  6 14:01:27 2012
New Revision: 1358217

URL: http://svn.apache.org/viewvc?rev=1358217&view=rev
Log:
QPID-4093: [Java Broker] Prevent new queues and exchanges from being created on vhosts that are not active

Modified:
    qpid/trunk/qpid/java/bdbstore/jmx/src/test/java/org/apache/qpid/server/store/berkeleydb/HAClusterManagementTest.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
    qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java

Modified: qpid/trunk/qpid/java/bdbstore/jmx/src/test/java/org/apache/qpid/server/store/berkeleydb/HAClusterManagementTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/bdbstore/jmx/src/test/java/org/apache/qpid/server/store/berkeleydb/HAClusterManagementTest.java?rev=1358217&r1=1358216&r2=1358217&view=diff
==============================================================================
--- qpid/trunk/qpid/java/bdbstore/jmx/src/test/java/org/apache/qpid/server/store/berkeleydb/HAClusterManagementTest.java (original)
+++ qpid/trunk/qpid/java/bdbstore/jmx/src/test/java/org/apache/qpid/server/store/berkeleydb/HAClusterManagementTest.java Fri Jul  6 14:01:27 2012
@@ -35,7 +35,9 @@ import javax.management.openmbean.Tabula
 
 import org.apache.log4j.Logger;
 import org.apache.qpid.jms.ConnectionURL;
+import org.apache.qpid.management.common.mbeans.ManagedBroker;
 import org.apache.qpid.server.store.berkeleydb.jmx.ManagedBDBHAMessageStore;
+import org.apache.qpid.server.virtualhost.ManagedVirtualHost;
 import org.apache.qpid.test.utils.JMXTestUtils;
 import org.apache.qpid.test.utils.QpidBrokerTestCase;
 
@@ -221,11 +223,47 @@ public class HAClusterManagementTest ext
         }
     }
 
-    private ManagedBDBHAMessageStore getStoreBeanForNodeAtBrokerPort(
-            final int activeBrokerPortNumber) throws Exception
+    public void testVirtualHostOperationsDeniedForNonMasterNode() throws Exception
     {
-        _jmxUtils.open(activeBrokerPortNumber);
+        final Connection activeConnection = getConnection(_brokerFailoverUrl);
+        final int inactiveBrokerPortNumber = _clusterCreator.getPortNumberOfAnInactiveBroker(activeConnection);
+
+        ManagedBroker inactiveBroker = getManagedBrokerBeanForNodeAtBrokerPort(inactiveBrokerPortNumber);
+
+        try
+        {
+            inactiveBroker.createNewQueue(getTestQueueName(), null, true);
+            fail("Exception not thrown");
+        }
+        catch  (Exception e)
+        {
+            String message = e.getMessage();
+            assertEquals(message, "The virtual hosts state of INITIALISING does not permit this operation.");
+        }
+
+        try
+        {
+            inactiveBroker.createNewExchange(getName(), "direct", true);
+            fail("Exception not thrown");
+        }
+        catch  (Exception e)
+        {
+            String message = e.getMessage();
+            assertEquals(message, "The virtual hosts state of INITIALISING does not permit this operation.");
+        }
+    }
+
+    private ManagedBDBHAMessageStore getStoreBeanForNodeAtBrokerPort(final int brokerPortNumber) throws Exception
+    {
+        _jmxUtils.open(brokerPortNumber);
 
         return _jmxUtils.getManagedObject(ManagedBDBHAMessageStore.class, MANAGED_OBJECT_QUERY);
     }
+
+    private ManagedBroker getManagedBrokerBeanForNodeAtBrokerPort(final int brokerPortNumber) throws Exception
+    {
+        _jmxUtils.open(brokerPortNumber);
+
+        return _jmxUtils.getManagedBroker(VIRTUAL_HOST);
+    }
 }

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java?rev=1358217&r1=1358216&r2=1358217&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java Fri Jul  6 14:01:27 2012
@@ -214,7 +214,6 @@ final class VirtualHostAdapter extends A
         return createExchange(name, state, durable, lifetime, ttl, type, attributes);
     }
 
-
     public Exchange createExchange(final String name,
                                    final State initialState,
                                    final boolean durable,
@@ -224,6 +223,8 @@ final class VirtualHostAdapter extends A
                                    final Map<String, Object> attributes)
             throws AccessControlException, IllegalArgumentException
     {
+        checkVHostStateIsActive();
+
         try
         {
             org.apache.qpid.server.exchange.Exchange exchange =
@@ -285,6 +286,8 @@ final class VirtualHostAdapter extends A
                              final Map<String, Object> attributes)
             throws AccessControlException, IllegalArgumentException
     {
+        checkVHostStateIsActive();
+
         String owner = null;
         if(exclusive)
         {
@@ -797,6 +800,16 @@ final class VirtualHostAdapter extends A
         return AVAILABLE_ATTRIBUTES;
     }
 
+    private void checkVHostStateIsActive()
+    {
+        if (!org.apache.qpid.server.virtualhost.State.ACTIVE.equals(_virtualHost.getState()))
+        {
+            throw new IllegalStateException("The virtual hosts state of " + _virtualHost.getState()
+                    + " does not permit this operation.");
+        }
+    }
+
+
     private static class VirtualHostStatisticsAdapter extends StatisticsAdapter
     {
         private final org.apache.qpid.server.virtualhost.VirtualHost _vhost;

Modified: qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java?rev=1358217&r1=1358216&r2=1358217&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java (original)
+++ qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java Fri Jul  6 14:01:27 2012
@@ -753,15 +753,6 @@ public class VirtualHostImpl implements 
            try
            {
                initialiseHouseKeeping(_vhostConfig.getHousekeepingCheckPeriod());
-//TODO: implement state changing for the VirtualHost MBean instead of registering and unregistering
-//               try
-//               {
-//                   _brokerMBean.register();
-//               }
-//               catch (JMException e)
-//               {
-//                   throw new RuntimeException("Failed to register virtual host mbean for virtual host " + getName(), e);
-//               }
                finalState = State.ACTIVE;
            }
            finally
@@ -787,8 +778,6 @@ public class VirtualHostImpl implements 
                  */
 
                 _connectionRegistry.close(IConnectionRegistry.VHOST_PASSIVATE_REPLY_TEXT);
-//TODO: implement state changing for the VirtualHost MBean instead of registering and unregistering
-//              _brokerMBean.unregister();
                 removeHouseKeepingTasks();
 
                 _queueRegistry.stopAllAndUnregisterMBeans();



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org