diff options
| author | Ted Ross <tross@apache.org> | 2013-10-11 15:14:12 +0000 |
|---|---|---|
| committer | Ted Ross <tross@apache.org> | 2013-10-11 15:14:12 +0000 |
| commit | 1b1c02486f1036d1e26a073361b6688ca48eaeb2 (patch) | |
| tree | c7fb4d8ecdb9f594d8d9e3a3749c059e62a07863 | |
| parent | 3fb57a88813f6fa7e8d8bb9c85a5383dbc7e2d95 (diff) | |
| download | qpid-python-1b1c02486f1036d1e26a073361b6688ca48eaeb2.tar.gz | |
QPID-5216
- Fixed bug that blocked routing of messages inbound from a client link
- Changed trace to accept any initial header value
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1531328 13f79535-47bb-0310-9956-ffa450edef68
| -rw-r--r-- | qpid/extras/dispatch/python/qpid/dispatch/router/node.py | 3 | ||||
| -rw-r--r-- | qpid/extras/dispatch/src/router_node.c | 25 | ||||
| -rw-r--r-- | qpid/extras/dispatch/src/router_pynode.c | 1 | ||||
| -rw-r--r-- | qpid/extras/dispatch/tests/router_engine_test.py | 35 | ||||
| -rw-r--r-- | qpid/extras/dispatch/tests/system_tests_one_router.py | 2 |
5 files changed, 34 insertions, 32 deletions
diff --git a/qpid/extras/dispatch/python/qpid/dispatch/router/node.py b/qpid/extras/dispatch/python/qpid/dispatch/router/node.py index b1f6df2662..f1abb5702a 100644 --- a/qpid/extras/dispatch/python/qpid/dispatch/router/node.py +++ b/qpid/extras/dispatch/python/qpid/dispatch/router/node.py @@ -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): diff --git a/qpid/extras/dispatch/src/router_node.c b/qpid/extras/dispatch/src/router_node.c index 4b13230687..414d920428 100644 --- a/qpid/extras/dispatch/src/router_node.c +++ b/qpid/extras/dispatch/src/router_node.c @@ -333,17 +333,19 @@ static dx_field_iterator_t *router_annotate_message(dx_router_t *router, dx_mess // // 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_annotate_message(dx_router_t *router, dx_mess 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* context, dx_link_t *link, dx_delivery_t *del 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. diff --git a/qpid/extras/dispatch/src/router_pynode.c b/qpid/extras/dispatch/src/router_pynode.c index 70882326af..0638c06c3e 100644 --- a/qpid/extras/dispatch/src/router_pynode.c +++ b/qpid/extras/dispatch/src/router_pynode.c @@ -292,6 +292,7 @@ static PyObject* dx_set_valid_origins(PyObject *self, PyObject *args) } 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); diff --git a/qpid/extras/dispatch/tests/router_engine_test.py b/qpid/extras/dispatch/tests/router_engine_test.py index e7257756e1..e25ce35d22 100644 --- a/qpid/extras/dispatch/tests/router_engine_test.py +++ b/qpid/extras/dispatch/tests/router_engine_test.py @@ -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) diff --git a/qpid/extras/dispatch/tests/system_tests_one_router.py b/qpid/extras/dispatch/tests/system_tests_one_router.py index c026888c54..302030e463 100644 --- a/qpid/extras/dispatch/tests/system_tests_one_router.py +++ b/qpid/extras/dispatch/tests/system_tests_one_router.py @@ -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 |
