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