diff options
author | Gordon Sim <gsim@apache.org> | 2011-06-09 15:35:35 +0000 |
---|---|---|
committer | Gordon Sim <gsim@apache.org> | 2011-06-09 15:35:35 +0000 |
commit | 6046c7a7fd3bcf0d1f1ac9cd9074a7d5d13aac3b (patch) | |
tree | ac78a646a57fd80eceadc1a0acc91a41b8b69972 /qpid/cpp/src | |
parent | 8b26427f6f6efd465aea2ca5c2657b704891d030 (diff) | |
download | qpid-python-6046c7a7fd3bcf0d1f1ac9cd9074a7d5d13aac3b.tar.gz |
QPID-3298: don't include the internal federation related args in the biding for headers exchange
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1133942 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src')
-rw-r--r-- | qpid/cpp/src/qpid/broker/HeadersExchange.cpp | 9 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/federation.py | 13 |
2 files changed, 17 insertions, 5 deletions
diff --git a/qpid/cpp/src/qpid/broker/HeadersExchange.cpp b/qpid/cpp/src/qpid/broker/HeadersExchange.cpp index abcaa5f69d..4bda70d313 100644 --- a/qpid/cpp/src/qpid/broker/HeadersExchange.cpp +++ b/qpid/cpp/src/qpid/broker/HeadersExchange.cpp @@ -112,9 +112,14 @@ bool HeadersExchange::bind(Queue::shared_ptr queue, const string& bindingKey, co { Mutex::ScopedLock l(lock); - Binding::shared_ptr binding (new Binding (bindingKey, queue, this, *args)); + //NOTE: do not include the fed op/tags/origin in the + //arguments as when x-match is 'all' these would prevent + //matching (they are internally added properties + //controlling binding propagation but not relevant to + //actual routing) + Binding::shared_ptr binding (new Binding (bindingKey, queue, this, extra_args)); BoundKey bk(binding); - if (bindings.add_unless(bk, MatchArgs(queue, args))) { + if (bindings.add_unless(bk, MatchArgs(queue, &extra_args))) { binding->startManagement(); propagate = bk.fedBinding.addOrigin(queue->getName(), fedOrigin); if (mgmtExchange != 0) { diff --git a/qpid/cpp/src/tests/federation.py b/qpid/cpp/src/tests/federation.py index 201b06a4a2..49bdecdd95 100755 --- a/qpid/cpp/src/tests/federation.py +++ b/qpid/cpp/src/tests/federation.py @@ -649,10 +649,17 @@ class FederationTests(TestBase010): self.verify_cleanup() - def test_dynamic_headers(self): + def test_dynamic_headers_any(self): + self.do_test_dynamic_headers('any') + + def test_dynamic_headers_all(self): + self.do_test_dynamic_headers('all') + + + def do_test_dynamic_headers(self, match_mode): session = self.session r_conn = self.connect(host=self.remote_host(), port=self.remote_port()) - r_session = r_conn.session("test_dynamic_headers") + r_session = r_conn.session("test_dynamic_headers_%s" % match_mode) session.exchange_declare(exchange="fed.headers", type="headers") r_session.exchange_declare(exchange="fed.headers", type="headers") @@ -671,7 +678,7 @@ class FederationTests(TestBase010): sleep(5) session.queue_declare(queue="fed1", exclusive=True, auto_delete=True) - session.exchange_bind(queue="fed1", exchange="fed.headers", binding_key="key1", arguments={'x-match':'any', 'class':'first'}) + session.exchange_bind(queue="fed1", exchange="fed.headers", binding_key="key1", arguments={'x-match':match_mode, 'class':'first'}) self.subscribe(queue="fed1", destination="f1") queue = session.incoming("f1") |