summaryrefslogtreecommitdiff
path: root/java/broker/src/main
diff options
context:
space:
mode:
authorAidan Skinner <aidan@apache.org>2008-08-19 10:03:07 +0000
committerAidan Skinner <aidan@apache.org>2008-08-19 10:03:07 +0000
commit4de98efcdae4926ac062397cabeeed59a35beddd (patch)
tree2d188d8e7744dd7bd7dc06ffc297dfaf9e0836d5 /java/broker/src/main
parente4540065984e2a791a3869826e0c03d596fce7eb (diff)
downloadqpid-python-4de98efcdae4926ac062397cabeeed59a35beddd.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/qpid@687010 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java/broker/src/main')
-rw-r--r--java/broker/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java33
1 files changed, 25 insertions, 8 deletions
diff --git a/java/broker/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java b/java/broker/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java
index c18cc337fe..59a8339346 100644
--- a/java/broker/src/main/java/org/apache/qpid/server/exchange/TopicExchange.java
+++ b/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))