You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by tr...@apache.org on 2013/10/11 17:14:13 UTC

svn commit: r1531328 - in /qpid/trunk/qpid/extras/dispatch: python/qpid/dispatch/router/node.py src/router_node.c src/router_pynode.c tests/router_engine_test.py tests/system_tests_one_router.py

Author: tross
Date: Fri Oct 11 15:14:12 2013
New Revision: 1531328

URL: http://svn.apache.org/r1531328
Log:
QPID-5216
  - Fixed bug that blocked routing of messages inbound from a client link
  - Changed trace to accept any initial header value

Modified:
    qpid/trunk/qpid/extras/dispatch/python/qpid/dispatch/router/node.py
    qpid/trunk/qpid/extras/dispatch/src/router_node.c
    qpid/trunk/qpid/extras/dispatch/src/router_pynode.c
    qpid/trunk/qpid/extras/dispatch/tests/router_engine_test.py
    qpid/trunk/qpid/extras/dispatch/tests/system_tests_one_router.py

Modified: qpid/trunk/qpid/extras/dispatch/python/qpid/dispatch/router/node.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/extras/dispatch/python/qpid/dispatch/router/node.py?rev=1531328&r1=1531327&r2=1531328&view=diff
==============================================================================
--- qpid/trunk/qpid/extras/dispatch/python/qpid/dispatch/router/node.py (original)
+++ qpid/trunk/qpid/extras/dispatch/python/qpid/dispatch/router/node.py Fri Oct 11 15:14:12 2013
@@ -36,9 +36,10 @@ class NodeTracker(object):
         self.max_routers  = max_routers
         self.nodes        = {}  # id => RemoteNode
         self.maskbits     = []
-        self.next_maskbit = 0
+        self.next_maskbit = 1   # Reserve bit '0' to represent this router
         for i in range(max_routers):
             self.maskbits.append(None)
+        self.maskbits[0] = True
 
 
     def tick(self, now):

Modified: qpid/trunk/qpid/extras/dispatch/src/router_node.c
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/extras/dispatch/src/router_node.c?rev=1531328&r1=1531327&r2=1531328&view=diff
==============================================================================
--- qpid/trunk/qpid/extras/dispatch/src/router_node.c (original)
+++ qpid/trunk/qpid/extras/dispatch/src/router_node.c Fri Oct 11 15:14:12 2013
@@ -333,17 +333,19 @@ static dx_field_iterator_t *router_annot
     //
     // If there is a trace field, append this router's ID to the trace.
     //
-    if (trace && dx_parse_is_list(trace)) {
+    if (trace) {
         dx_compose_insert_string(out_da, DX_DA_TRACE);
         dx_compose_start_list(out_da);
 
-        uint32_t idx = 0;
-        dx_parsed_field_t *trace_item = dx_parse_sub_value(trace, idx);
-        while (trace_item) {
-            dx_field_iterator_t *iter = dx_parse_raw(trace_item);
-            dx_compose_insert_string_iterator(out_da, iter);
-            idx++;
-            trace_item = dx_parse_sub_value(trace, idx);
+        if (dx_parse_is_list(trace)) {
+            uint32_t idx = 0;
+            dx_parsed_field_t *trace_item = dx_parse_sub_value(trace, idx);
+            while (trace_item) {
+                dx_field_iterator_t *iter = dx_parse_raw(trace_item);
+                dx_compose_insert_string_iterator(out_da, iter);
+                idx++;
+                trace_item = dx_parse_sub_value(trace, idx);
+            }
         }
 
         dx_compose_insert_string(out_da, direct_prefix);
@@ -366,6 +368,10 @@ static dx_field_iterator_t *router_annot
     dx_message_set_delivery_annotations(msg, out_da);
     dx_compose_free(out_da);
 
+    //
+    // Return the iterator to the ingress field _if_ it was present.
+    // If we added the ingress, return NULL.
+    //
     return ingress_iter;
 }
 
@@ -529,7 +535,8 @@ static void router_rx_handler(void* cont
                                 dx_router_ref_t *rref = DEQ_HEAD(origin_addr->rnodes);
                                 origin = rref->router->mask_bit;
                             }
-                        }
+                        } else
+                            origin = 0;
 
                         //
                         // Forward to the next-hops for remote destinations.

Modified: qpid/trunk/qpid/extras/dispatch/src/router_pynode.c
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/extras/dispatch/src/router_pynode.c?rev=1531328&r1=1531327&r2=1531328&view=diff
==============================================================================
--- qpid/trunk/qpid/extras/dispatch/src/router_pynode.c (original)
+++ qpid/trunk/qpid/extras/dispatch/src/router_pynode.c Fri Oct 11 15:14:12 2013
@@ -292,6 +292,7 @@ static PyObject* dx_set_valid_origins(Py
     }
 
     dx_bitmask_clear_all(rnode->valid_origins);
+    dx_bitmask_set_bit(rnode->valid_origins, 0);  // This router is a valid origin for all destinations
     for (idx = 0; idx < origin_count; idx++) {
         maskbit = PyInt_AS_LONG(PyList_GetItem(origin_list, idx));
         dx_bitmask_set_bit(rnode->valid_origins, maskbit);

Modified: qpid/trunk/qpid/extras/dispatch/tests/router_engine_test.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/extras/dispatch/tests/router_engine_test.py?rev=1531328&r1=1531327&r2=1531328&view=diff
==============================================================================
--- qpid/trunk/qpid/extras/dispatch/tests/router_engine_test.py (original)
+++ qpid/trunk/qpid/extras/dispatch/tests/router_engine_test.py Fri Oct 11 15:14:12 2013
@@ -135,54 +135,47 @@ class NodeTrackerTest(unittest.TestCase)
         tracker.new_neighbor('A', 1)
         self.assertEqual(self.address, 'amqp:/_topo/area/A')
         self.assertEqual(self.link_bit, 1)
-        self.assertEqual(self.router_bit, 0)
+        self.assertEqual(self.router_bit, 1)
         self.assertEqual(self.calls, 1)
 
         self.reset()
         tracker.new_neighbor('B', 5)
         self.assertEqual(self.address, 'amqp:/_topo/area/B')
         self.assertEqual(self.link_bit, 5)
-        self.assertEqual(self.router_bit, 1)
+        self.assertEqual(self.router_bit, 2)
         self.assertEqual(self.calls, 1)
 
         self.reset()
         tracker.new_neighbor('C', 6)
         self.assertEqual(self.address, 'amqp:/_topo/area/C')
         self.assertEqual(self.link_bit, 6)
-        self.assertEqual(self.router_bit, 2)
+        self.assertEqual(self.router_bit, 3)
         self.assertEqual(self.calls, 1)
 
         self.reset()
         tracker.new_neighbor('D', 7)
         self.assertEqual(self.address, 'amqp:/_topo/area/D')
         self.assertEqual(self.link_bit, 7)
-        self.assertEqual(self.router_bit, 3)
-        self.assertEqual(self.calls, 1)
-
-        self.reset()
-        tracker.new_neighbor('E', 8)
-        self.assertEqual(self.address, 'amqp:/_topo/area/E')
-        self.assertEqual(self.link_bit, 8)
         self.assertEqual(self.router_bit, 4)
         self.assertEqual(self.calls, 1)
 
         self.reset()
         try:
-            tracker.new_neighbor('F', 9)
+            tracker.new_neighbor('E', 9)
             AssertFalse("We shouldn't be here")
         except:
             pass
 
         self.reset()
         tracker.lost_neighbor('C')
-        self.assertEqual(self.router_bit, 2)
+        self.assertEqual(self.router_bit, 3)
         self.assertEqual(self.calls, 1)
 
         self.reset()
-        tracker.new_neighbor('F', 9)
-        self.assertEqual(self.address, 'amqp:/_topo/area/F')
+        tracker.new_neighbor('E', 9)
+        self.assertEqual(self.address, 'amqp:/_topo/area/E')
         self.assertEqual(self.link_bit, 9)
-        self.assertEqual(self.router_bit, 2)
+        self.assertEqual(self.router_bit, 3)
         self.assertEqual(self.calls, 1)
 
 
@@ -193,14 +186,14 @@ class NodeTrackerTest(unittest.TestCase)
         tracker.new_node('A')
         self.assertEqual(self.address, 'amqp:/_topo/area/A')
         self.assertFalse(self.link_bit)
-        self.assertEqual(self.router_bit, 0)
+        self.assertEqual(self.router_bit, 1)
         self.assertEqual(self.calls, 1)
 
         self.reset()
         tracker.new_neighbor('A', 3)
         self.assertEqual(self.address, 'amqp:/_topo/area/A')
         self.assertEqual(self.link_bit, 3)
-        self.assertEqual(self.router_bit, 0)
+        self.assertEqual(self.router_bit, 1)
         self.assertEqual(self.calls, 2)
 
         self.reset()
@@ -212,7 +205,7 @@ class NodeTrackerTest(unittest.TestCase)
 
         self.reset()
         tracker.lost_neighbor('A')
-        self.assertEqual(self.router_bit, 0)
+        self.assertEqual(self.router_bit, 1)
         self.assertEqual(self.calls, 1)
 
 
@@ -223,7 +216,7 @@ class NodeTrackerTest(unittest.TestCase)
         tracker.new_neighbor('A', 3)
         self.assertEqual(self.address, 'amqp:/_topo/area/A')
         self.assertEqual(self.link_bit, 3)
-        self.assertEqual(self.router_bit, 0)
+        self.assertEqual(self.router_bit, 1)
         self.assertEqual(self.calls, 1)
 
         self.reset()
@@ -236,12 +229,12 @@ class NodeTrackerTest(unittest.TestCase)
         self.reset()
         tracker.lost_neighbor('A')
         self.assertEqual(self.address, 'amqp:/_topo/area/A')
-        self.assertEqual(self.router_bit, 0)
+        self.assertEqual(self.router_bit, 1)
         self.assertEqual(self.calls, 2)
 
         self.reset()
         tracker.lost_node('A')
-        self.assertEqual(self.router_bit, 0)
+        self.assertEqual(self.router_bit, 1)
         self.assertEqual(self.calls, 1)
 
 

Modified: qpid/trunk/qpid/extras/dispatch/tests/system_tests_one_router.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/extras/dispatch/tests/system_tests_one_router.py?rev=1531328&r1=1531327&r2=1531328&view=diff
==============================================================================
--- qpid/trunk/qpid/extras/dispatch/tests/system_tests_one_router.py (original)
+++ qpid/trunk/qpid/extras/dispatch/tests/system_tests_one_router.py Fri Oct 11 15:14:12 2013
@@ -406,7 +406,7 @@ class RouterTest(unittest.TestCase):
       da = rm.instructions
       self.assertEqual(da.__class__, dict)
       self.assertEqual(da['qdx.ingress'], '_topo/area/Qpid.Dispatch.Router.A/')
-      self.assertFalse('qdx.trace' in da)
+      self.assertEqual(da['qdx.trace'], ['_topo/area/Qpid.Dispatch.Router.A/'])
 
     ##
     ## Empty trace



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org