Repository: qpid-dispatch Updated Branches: refs/heads/master 9739f93e0 -> 49c1269fc
DISPATCH-808 - Allow router to respond to addresses with non-QD_TREATMENT_UNAVAILABLE treatment. This must have been part of fix to DISPATCH-803 Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/49c1269f Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/49c1269f Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/49c1269f Branch: refs/heads/master Commit: 49c1269fc0363c4c14f611eb4516cec856e80605 Parents: 9739f93 Author: Ganesh Murthy <gmur...@redhat.com> Authored: Mon Aug 14 17:28:40 2017 -0400 Committer: Ganesh Murthy <gmur...@redhat.com> Committed: Mon Aug 14 17:28:40 2017 -0400 ---------------------------------------------------------------------- src/router_core/connections.c | 16 +++++++++++----- tests/system_tests_default_distribution.py | 24 ++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/49c1269f/src/router_core/connections.c ---------------------------------------------------------------------- diff --git a/src/router_core/connections.c b/src/router_core/connections.c index 4010ecb..65d8bc3 100644 --- a/src/router_core/connections.c +++ b/src/router_core/connections.c @@ -1129,24 +1129,30 @@ static qdr_address_t *qdr_lookup_terminus_address_CT(qdr_core_t *core, int addr_phase; qd_address_treatment_t treat = qdr_treatment_for_address_CT(core, conn, iter, &in_phase, &out_phase); - if (treat == QD_TREATMENT_UNAVAILABLE) { - *unavailable = true; - return 0; - } - qd_iterator_annotate_prefix(iter, '\0'); // Cancel previous override addr_phase = dir == QD_INCOMING ? in_phase : out_phase; qd_iterator_annotate_phase(iter, (char) addr_phase + '0'); qd_hash_retrieve(core->addr_hash, iter, (void**) &addr); + + if (addr && addr->treatment == QD_TREATMENT_UNAVAILABLE) + *unavailable = true; + if (!addr && create_if_not_found) { addr = qdr_address_CT(core, treat); if (addr) { qd_hash_insert(core->addr_hash, iter, addr, &addr->hash_handle); DEQ_INSERT_TAIL(core->addrs, addr); } + + if (!addr && treat == QD_TREATMENT_UNAVAILABLE) + *unavailable = true; } + if (qdr_terminus_is_coordinator(terminus)) + *unavailable = false; + + return addr; } http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/49c1269f/tests/system_tests_default_distribution.py ---------------------------------------------------------------------- diff --git a/tests/system_tests_default_distribution.py b/tests/system_tests_default_distribution.py index e97acf8..90adbd2 100644 --- a/tests/system_tests_default_distribution.py +++ b/tests/system_tests_default_distribution.py @@ -17,6 +17,9 @@ # under the License. # +import re +import system_test +from subprocess import PIPE from system_test import TestCase, Qdrouterd, TIMEOUT from proton.handlers import MessagingHandler from proton.reactor import Container @@ -41,6 +44,17 @@ class DefaultDistributionTest(TestCase): cls.router.wait_ready() cls.address = cls.router.addresses[0] + def run_qdstat(self, args, regexp=None, address=None): + p = self.popen( + ['qdstat', '--bus', str(address or self.address), '--timeout', str(system_test.TIMEOUT) ] + args, + name='qdstat-'+self.id(), stdout=PIPE, expect=None) + + out = p.communicate()[0] + assert p.returncode == 0, \ + "qdstat exit status %s, output:\n%s" % (p.returncode, out) + if regexp: assert re.search(regexp, out, re.I), "Can't find '%s' in '%s'" % (regexp, out) + return out + def test_create_unavailable_sender(self): test = UnavailableSender(self.address) test.run() @@ -55,6 +69,16 @@ class DefaultDistributionTest(TestCase): test = UnavailableAnonymousSender(self.address) test.run() self.assertTrue(test.received_error) + + def test_general(self): + out = self.run_qdstat(['--general'], r'(?s)Router Statistics.*Mode\s*Standalone') + self.assertTrue("Connections 1" in out) + self.assertTrue("Nodes 0" in out) + self.assertTrue("Auto Links 0" in out) + self.assertTrue("Link Routes 0" in out) + self.assertTrue("Router Id QDR" in out) + self.assertTrue("Mode standalone" in out) + class Timeout(object): def __init__(self, parent): self.parent = parent --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org