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

Reply via email to