diff options
| author | Aidan Skinner <aidan@apache.org> | 2008-08-19 10:03:07 +0000 |
|---|---|---|
| committer | Aidan Skinner <aidan@apache.org> | 2008-08-19 10:03:07 +0000 |
| commit | 910fad9a0c17d465f7a7e23b6063095bbda3e310 (patch) | |
| tree | ab8622fd5b5115ddb2409eeebb2ddbb1295ceef8 /qpid/java/broker | |
| parent | d732245476e8ddde0a5304c1c9a48eccda9efd94 (diff) | |
| download | qpid-python-910fad9a0c17d465f7a7e23b6063095bbda3e310.tar.gz | |
QPID-1202: Rebind durable subscriptions if the arguments have changed
TopicExchange: take field arguments into account when determining if topic binding already exists when binding, but not for regular isBound().
DurableSubscriptionTest: add test case for QPID-1202
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk@687010 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/broker')
| -rw-r--r-- | qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java | 33 |
1 files changed, 25 insertions, 8 deletions
diff --git a/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java b/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java index c18cc337fe..59a8339346 100644 --- a/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java +++ b/qpid/java/broker/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java @@ -115,11 +115,13 @@ public class TopicExchange extends AbstractExchange { private final AMQShortString _bindingKey; private final AMQQueue _queue; + private final FieldTable _args; - public Binding(AMQShortString bindingKey, AMQQueue queue) + public Binding(AMQShortString bindingKey, AMQQueue queue, FieldTable args) { _bindingKey = bindingKey; _queue = queue; + _args = args; } public AMQShortString getBindingKey() @@ -134,7 +136,7 @@ public class TopicExchange extends AbstractExchange public int hashCode() { - return (_bindingKey == null ? 1 : _bindingKey.hashCode())*31 + _queue.hashCode(); + return (_bindingKey == null ? 1 : _bindingKey.hashCode())*31 +_queue.hashCode(); } public boolean equals(Object o) @@ -382,7 +384,7 @@ public class TopicExchange extends AbstractExchange routingKey = rKey; } - Binding binding = new Binding(rKey, queue); + Binding binding = new Binding(rKey, queue, args); if(_bindings.containsKey(binding)) { @@ -544,14 +546,29 @@ public class TopicExchange extends AbstractExchange public boolean isBound(AMQShortString routingKey, FieldTable arguments, AMQQueue queue) { - return isBound(routingKey, queue); + Binding binding = new Binding(routingKey, queue, arguments); + if (arguments == null) + { + return _bindings.containsKey(binding); + } + else + { + FieldTable o = _bindings.get(binding); + if (o != null) + { + return o.equals(arguments); + } + else + { + return false; + } + + } } public boolean isBound(AMQShortString routingKey, AMQQueue queue) { - Binding binding = new Binding(routingKey, queue); - - return _bindings.containsKey(binding); + return isBound(routingKey, null, queue); } public boolean isBound(AMQShortString routingKey) @@ -590,7 +607,7 @@ public class TopicExchange extends AbstractExchange assert queue != null; assert rKey != null; - Binding binding = new Binding(rKey, queue); + Binding binding = new Binding(rKey, queue, args); if (!_bindings.containsKey(binding)) |
