Author: macbean
Date: Wed Oct 29 12:31:26 2014
New Revision: 1635114
URL: http://svn.apache.org/r1635114
Log:
QPID-6194: [Java Broker] Add option to prevent Broker startup when it has
ERRORED children
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/server/BrokerStartupTest.java
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java?rev=1635114&r1=1635113&r2=1635114&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/Broker.java
Wed Oct 29 12:31:26 2014
@@ -58,6 +58,7 @@ public interface Broker<X extends Broker
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
@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();
Modified:
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java?rev=1635114&r1=1635113&r2=1635114&view=diff
==============================================================================
---
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
(original)
+++
qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/model/adapter/BrokerAdapter.java
Wed Oct 29 12:31:26 2014
@@ -235,41 +235,42 @@ public class BrokerAdapter extends Abstr
_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,
Modified:
qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/server/BrokerStartupTest.java
URL:
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/server/BrokerStartupTest.java?rev=1635114&r1=1635113&r2=1635114&view=diff
==============================================================================
---
qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/server/BrokerStartupTest.java
(original)
+++
qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/server/BrokerStartupTest.java
Wed Oct 29 12:31:26 2014
@@ -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 A
}
}
+ 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
+ }
+ }
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]