summaryrefslogtreecommitdiff
path: root/qpid
diff options
context:
space:
mode:
authorAndrew MacBean <macbean@apache.org>2014-10-29 12:31:26 +0000
committerAndrew MacBean <macbean@apache.org>2014-10-29 12:31:26 +0000
commit6a7034af2fe85270cb3d2cf588203bed9edd3c76 (patch)
treed6e9c1dd202c95787c42db7eeab98509e7f6c7d1 /qpid
parentcbb9d1e220351d5da2fbbdad27430e334c352e07 (diff)
downloadqpid-python-6a7034af2fe85270cb3d2cf588203bed9edd3c76.tar.gz
QPID-6194: [Java Broker] Add option to prevent Broker startup when it has ERRORED children
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1635114 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid')
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java3
-rw-r--r--qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java59
-rw-r--r--qpid/java/systests/src/test/java/org/apache/qpid/server/BrokerStartupTest.java47
3 files changed, 80 insertions, 29 deletions
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
index 4e4acb3e21..17a5bc3a04 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
@@ -58,6 +58,7 @@ public interface Broker<X extends Broker<X>> extends ConfiguredObject<X>, EventL
String CONNECTION_CLOSE_WHEN_NO_ROUTE = "connection.closeWhenNoRoute";
String BROKER_FLOW_TO_DISK_THRESHOLD = "broker.flowToDiskThreshold";
+ String BROKER_FAIL_STARTUP_WITH_ERRORED_CHILD = "broker.failStartupWithErroredChild";
String QPID_AMQP_PORT = "qpid.amqp_port";
String QPID_HTTP_PORT = "qpid.http_port";
@@ -86,6 +87,8 @@ public interface Broker<X extends Broker<X>> extends ConfiguredObject<X>, EventL
@ManagedContextDefault(name = BROKER_FRAME_SIZE)
int DEFAULT_FRAME_SIZE = 65535;
+ @ManagedContextDefault(name = BROKER_FAIL_STARTUP_WITH_ERRORED_CHILD)
+ boolean DEFAULT_BROKER_FAIL_STARTUP_WITH_ERRORED_CHILD = false;
@DerivedAttribute
String getBuildVersion();
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
index d413050cef..313fd509e2 100644
--- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
+++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
@@ -235,41 +235,42 @@ public class BrokerAdapter extends AbstractConfiguredObject<BrokerAdapter> imple
_managementModeAuthenticationProvider.open();
}
- for(KeyStore<?> keyStore : getChildren(KeyStore.class))
- {
- addKeyStore(keyStore);
- }
- for(TrustStore<?> trustStore : getChildren(TrustStore.class))
- {
- addTrustStore(trustStore);
- }
- for(AuthenticationProvider<?> authenticationProvider : getChildren(AuthenticationProvider.class))
- {
- addAuthenticationProvider(authenticationProvider);
- }
- for(Port<?> port : getChildren(Port.class))
- {
- addPort(port);
- }
- for(Plugin<?> plugin : getChildren(Plugin.class))
- {
- addPlugin(plugin);
- }
- for(GroupProvider<?> groupProvider : getChildren(GroupProvider.class))
- {
- addGroupProvider(groupProvider);
- }
- for(AccessControlProvider<?> accessControlProvider : getChildren(AccessControlProvider.class))
+ boolean hasBrokerAnyErroredChildren = false;
+
+ for (final Class<? extends ConfiguredObject> childClass : getModel().getChildTypes(getCategoryClass()))
{
- addAccessControlProvider(accessControlProvider);
+ final Collection<? extends ConfiguredObject> children = getChildren(childClass);
+ if (children != null) {
+ for (final ConfiguredObject<?> child : children) {
+
+ if (child instanceof AccessControlProvider)
+ {
+ addAccessControlProvider((AccessControlProvider)child);
+ }
+ else
+ {
+ child.addChangeListener(this);
+ }
+
+ if (child.getState() == State.ERRORED )
+ {
+ hasBrokerAnyErroredChildren = true;
+ LOGGER.warn(String.format("Broker child object '%s' of type '%s' is %s",
+ child.getName(), childClass.getSimpleName(), State.ERRORED ));
+ }
+ }
+ }
}
- for(VirtualHostNode<?> virtualHostNode : getChildren(VirtualHostNode.class))
+
+ final boolean brokerShutdownOnErroredChild = getContextValue(Boolean.class, BROKER_FAIL_STARTUP_WITH_ERRORED_CHILD);
+ if (!_brokerOptions.isManagementMode() && brokerShutdownOnErroredChild && hasBrokerAnyErroredChildren)
{
- addVirtualHostNode(virtualHostNode);
+ throw new IllegalStateException(String.format("Broker context variable %s is set and the broker has %s children",
+ BROKER_FAIL_STARTUP_WITH_ERRORED_CHILD, State.ERRORED));
}
initialiseStatisticsReporting();
- // changeChildState(State.ACTIVE, false);
+
if (isManagementMode())
{
_eventLogger.message(BrokerMessages.MANAGEMENT_MODE(BrokerOptions.MANAGEMENT_MODE_USER_NAME,
diff --git a/qpid/java/systests/src/test/java/org/apache/qpid/server/BrokerStartupTest.java b/qpid/java/systests/src/test/java/org/apache/qpid/server/BrokerStartupTest.java
index 9f5dd2ec39..e267bf439b 100644
--- a/qpid/java/systests/src/test/java/org/apache/qpid/server/BrokerStartupTest.java
+++ b/qpid/java/systests/src/test/java/org/apache/qpid/server/BrokerStartupTest.java
@@ -24,6 +24,7 @@ import java.io.File;
import java.util.List;
import javax.jms.Connection;
+import javax.jms.JMSException;
import javax.jms.Queue;
import javax.jms.Session;
@@ -183,4 +184,50 @@ public class BrokerStartupTest extends AbstractTestLogging
}
}
+ public void testStartupWithErroredChildrenCanBeConfigured() throws Exception
+ {
+ if (isJavaBroker())
+ {
+ int port = getPort(0);
+ int managementPort = getManagementPort(port);
+ int connectorServerPort = managementPort + JMXPORT_CONNECTORSERVER_OFFSET;
+
+ setTestSystemProperty("qpid.amqp_port",String.valueOf(port));
+ setTestSystemProperty("qpid.jmx_port",String.valueOf(managementPort));
+ setTestSystemProperty("qpid.rmi_port",String.valueOf(connectorServerPort));
+
+ //Purposely set the HTTP port to be the same as the AMQP port so that the port object becomes ERRORED
+ setTestSystemProperty("qpid.http_port",String.valueOf(port));
+
+ // Set broker to fail on startup if it has ERRORED children
+ setTestSystemProperty("broker.failStartupWithErroredChild", String.valueOf(Boolean.TRUE));
+
+ File brokerConfigFile = new File(getTestConfigFile(port));
+ if (brokerConfigFile.exists())
+ {
+ // Config exists from previous test run, delete it.
+ brokerConfigFile.delete();
+ }
+
+ startBroker(port, null);
+
+ AMQConnectionURL url = new AMQConnectionURL(String.format("amqp://"
+ + GUEST_USERNAME
+ + ":"
+ + GUEST_PASSWORD
+ + "@clientid/?brokerlist='localhost:%d'", port));
+
+ try
+ {
+ Connection conn = getConnection(url);
+ fail("Connection should fail as broker startup should have failed due to ERRORED children (port)");
+ conn.close();
+ }
+ catch (JMSException jmse)
+ {
+ //pass
+ }
+ }
+ }
+
}