diff options
Diffstat (limited to 'qpid/java')
3 files changed, 55 insertions, 15 deletions
diff --git a/qpid/java/bdbstore/jmx/src/test/java/org/apache/qpid/server/store/berkeleydb/HAClusterManagementTest.java b/qpid/java/bdbstore/jmx/src/test/java/org/apache/qpid/server/store/berkeleydb/HAClusterManagementTest.java index 45038bf050..606983cdae 100644 --- a/qpid/java/bdbstore/jmx/src/test/java/org/apache/qpid/server/store/berkeleydb/HAClusterManagementTest.java +++ b/qpid/java/bdbstore/jmx/src/test/java/org/apache/qpid/server/store/berkeleydb/HAClusterManagementTest.java @@ -35,7 +35,9 @@ import javax.management.openmbean.TabularData; 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 extends QpidBrokerTestCase } } - 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); + } } diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java index 6e601ea6aa..e2efb05205 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/model/adapter/VirtualHostAdapter.java @@ -214,7 +214,6 @@ final class VirtualHostAdapter extends AbstractAdapter implements VirtualHost, E 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 AbstractAdapter implements VirtualHost, E 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 AbstractAdapter implements VirtualHost, E final Map<String, Object> attributes) throws AccessControlException, IllegalArgumentException { + checkVHostStateIsActive(); + String owner = null; if(exclusive) { @@ -797,6 +800,16 @@ final class VirtualHostAdapter extends AbstractAdapter implements VirtualHost, E 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; diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java index 8945431e99..9ddb01d34c 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/virtualhost/VirtualHostImpl.java @@ -753,15 +753,6 @@ public class VirtualHostImpl implements VirtualHost, IConnectionRegistry.Registr 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 VirtualHost, IConnectionRegistry.Registr */ _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(); |
