summaryrefslogtreecommitdiff
path: root/qpid/java/broker-core/src
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/java/broker-core/src
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/java/broker-core/src')
-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
2 files changed, 33 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,