diff options
| author | Martin Ritchie <ritchiem@apache.org> | 2010-05-20 15:17:14 +0000 |
|---|---|---|
| committer | Martin Ritchie <ritchiem@apache.org> | 2010-05-20 15:17:14 +0000 |
| commit | f708d8b6f4e703802313ef536e8f77547bd9d737 (patch) | |
| tree | 884312e719375c9f0c51abfd290ad3366f01d39f /java/broker-plugins | |
| parent | e1880e0a9f26685a5ac8e1219a76b54df64fa659 (diff) | |
| download | qpid-python-f708d8b6f4e703802313ef536e8f77547bd9d737.tar.gz | |
QPID-1447 : Update TopicDeletePolicy to have it's own ConfigurationPlugin for handling the configuration section. Improved configuration section based on feedback from Sorin Suciu
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@946664 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/broker-plugins')
5 files changed, 92 insertions, 31 deletions
diff --git a/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/configuration/plugin/SlowConsumerDetectionPolicyConfiguration.java b/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/configuration/plugin/SlowConsumerDetectionPolicyConfiguration.java index a8ebd024b1..a413da387b 100644 --- a/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/configuration/plugin/SlowConsumerDetectionPolicyConfiguration.java +++ b/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/configuration/plugin/SlowConsumerDetectionPolicyConfiguration.java @@ -53,24 +53,12 @@ public class SlowConsumerDetectionPolicyConfiguration extends ConfigurationPlugi public String[] getElementsProcessed() { - return new String[]{"[@name]", "options"}; + return new String[]{"name"}; } public String getPolicyName() { - return _configuration.getString("[@name]"); + return _configuration.getString("name"); } - public String getOption(String option) - { - List options = _configuration.getList("options.option[@name]"); - - if (options != null && options.contains(option)) - { - return _configuration.getString("options.option[@value]" + - "(" + options.indexOf(option) + ")"); - } - - return null; - } } diff --git a/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/Activator.java b/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/Activator.java index a6ab59a230..7b0168d436 100644 --- a/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/Activator.java +++ b/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/Activator.java @@ -25,6 +25,7 @@ import org.apache.qpid.server.configuration.plugin.SlowConsumerDetectionPolicyCo import org.apache.qpid.server.configuration.plugin.SlowConsumerDetectionQueueConfiguration; import org.apache.qpid.server.configuration.plugins.ConfigurationPluginFactory; import org.apache.qpid.server.virtualhost.plugin.policies.TopicDeletePolicy; +import org.apache.qpid.server.virtualhost.plugin.policies.TopicDeletePolicyConfiguration; import org.apache.qpid.server.virtualhost.plugins.VirtualHostPluginFactory; import org.apache.qpid.slowconsumerdetection.policies.SlowConsumerPolicyPluginFactory; import org.osgi.framework.BundleActivator; @@ -47,7 +48,9 @@ public class Activator implements BundleActivator ctx.registerService(ConfigurationPluginFactory.class.getName(), new SlowConsumerDetectionConfiguration.SlowConsumerDetectionConfigurationFactory(), null); ctx.registerService(ConfigurationPluginFactory.class.getName(), new SlowConsumerDetectionPolicyConfiguration.SlowConsumerDetectionPolicyConfigurationFactory(), null); ctx.registerService(VirtualHostPluginFactory.class.getName(), new SlowConsumerDetection.SlowConsumerFactory(), null); - ctx.registerService(SlowConsumerPolicyPluginFactory.class.getName(), new TopicDeletePolicy.DeletePolicyFactory(), null); + + ctx.registerService(SlowConsumerPolicyPluginFactory.class.getName(), new TopicDeletePolicy.TopicDeletePolicyFactory(), null); + ctx.registerService(ConfigurationPluginFactory.class.getName(), new TopicDeletePolicyConfiguration.TopicDeletePolicyConfigurationFactory(), null); } } diff --git a/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/policies/TopicDeletePolicy.java b/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/policies/TopicDeletePolicy.java index fb9dfed103..36892cdcb0 100644 --- a/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/policies/TopicDeletePolicy.java +++ b/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/policies/TopicDeletePolicy.java @@ -34,14 +34,24 @@ import org.apache.qpid.slowconsumerdetection.policies.SlowConsumerPolicyPluginFa public class TopicDeletePolicy implements SlowConsumerPolicyPlugin { Logger _logger = Logger.getLogger(TopicDeletePolicy.class); - private SlowConsumerDetectionPolicyConfiguration _configuration; + private TopicDeletePolicyConfiguration _configuration; - public static class DeletePolicyFactory implements SlowConsumerPolicyPluginFactory + public static class TopicDeletePolicyFactory implements SlowConsumerPolicyPluginFactory { public SlowConsumerPolicyPlugin newInstance(SlowConsumerDetectionPolicyConfiguration configuration) { - return new TopicDeletePolicy(configuration); + TopicDeletePolicyConfiguration config = + configuration.getConfiguration(TopicDeletePolicyConfiguration.class); + + if (config != null) + { + return new TopicDeletePolicy(config); + } + else + { + return null; + } } public String getPluginName() @@ -50,13 +60,18 @@ public class TopicDeletePolicy implements SlowConsumerPolicyPlugin } } - public TopicDeletePolicy(SlowConsumerDetectionPolicyConfiguration config) + public TopicDeletePolicy(TopicDeletePolicyConfiguration config) { _configuration = config; } public void performPolicy(AMQQueue q) { + if (q == null) + { + return; + } + AMQSessionModel owner = q.getExclusiveOwningSession(); // Only process exclusive queues @@ -66,22 +81,20 @@ public class TopicDeletePolicy implements SlowConsumerPolicyPlugin } //Only process Topics - if(!validateQueueIsATopic(q)) + if (!validateQueueIsATopic(q)) { return; } try { + // Close the consumer . this will cause autoDelete Queues to be purged owner.getConnectionModel(). closeSession(owner, AMQConstant.RESOURCE_ERROR, "Consuming to slow."); - String option = _configuration.getOption("delete-persistent"); - - boolean deletePersistent = option != null && Boolean.parseBoolean(option); - - if (!q.isAutoDelete() && deletePersistent) + // Actively delete non autoDelete queues if deletePersistent is set + if (!q.isAutoDelete() && _configuration.deletePersistent()) { q.delete(); } @@ -99,6 +112,7 @@ public class TopicDeletePolicy implements SlowConsumerPolicyPlugin * topic exchange. * * @param q the Queue + * * @return true iff Q is bound to a TopicExchange */ private boolean validateQueueIsATopic(AMQQueue q) diff --git a/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/policies/TopicDeletePolicyConfiguration.java b/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/policies/TopicDeletePolicyConfiguration.java new file mode 100644 index 0000000000..69996b026f --- /dev/null +++ b/java/broker-plugins/experimental/slowconsumerdetection/src/main/java/org/apache/qpid/server/virtualhost/plugin/policies/TopicDeletePolicyConfiguration.java @@ -0,0 +1,62 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ +package org.apache.qpid.server.virtualhost.plugin.policies; + +import org.apache.commons.configuration.Configuration; +import org.apache.commons.configuration.ConfigurationException; +import org.apache.qpid.server.configuration.plugins.ConfigurationPlugin; +import org.apache.qpid.server.configuration.plugins.ConfigurationPluginFactory; + +public class TopicDeletePolicyConfiguration extends ConfigurationPlugin +{ + + public static class TopicDeletePolicyConfigurationFactory + implements ConfigurationPluginFactory + { + public ConfigurationPlugin newInstance(String path, + Configuration config) + throws ConfigurationException + { + TopicDeletePolicyConfiguration slowConsumerConfig = + new TopicDeletePolicyConfiguration(); + slowConsumerConfig.setConfiguration(path, config); + return slowConsumerConfig; + } + + public String[] getParentPaths() + { + return new String[]{ + "virtualhosts.virtualhost.queues.slow-consumer-detection.policy.topicDelete", + "virtualhosts.virtualhost.queues.queue.slow-consumer-detection.policy.topicDelete"}; + } + } + + public String[] getElementsProcessed() + { + return new String[]{"delete-persistent"}; + } + + public boolean deletePersistent() + { + return _configuration.containsKey("delete-persistent"); + } + +} diff --git a/java/broker-plugins/experimental/slowconsumerdetection/src/test/java/org/apache/qpid/systest/SlowConsumerTest.java b/java/broker-plugins/experimental/slowconsumerdetection/src/test/java/org/apache/qpid/systest/SlowConsumerTest.java index 21d1f265fd..b2cb29c33f 100644 --- a/java/broker-plugins/experimental/slowconsumerdetection/src/test/java/org/apache/qpid/systest/SlowConsumerTest.java +++ b/java/broker-plugins/experimental/slowconsumerdetection/src/test/java/org/apache/qpid/systest/SlowConsumerTest.java @@ -95,12 +95,6 @@ public class SlowConsumerTest extends QpidTestCase implements ExceptionListener, <messageCount>50</messageCount> <!-- Policies configuration --> - <policy name="TopicDelete"> - <options> - <option name="delete-persistent" value="true"/> - </options> - </policy> - <policy> <name>TopicDelete"</name> <topicDelete> |
