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/22 19:53:50 UTC
svn commit: r1534710 - in /qpid/trunk/qpid/extras/dispatch:
include/qpid/dispatch/iterator.h src/iterator.c src/router_node.c
tests/field_test.c tests/system_tests_one_router.py
Author: tross
Date: Tue Oct 22 17:53:50 2013
New Revision: 1534710
URL: http://svn.apache.org/r1534710
Log:
QPID-5216 - Cleaned up the format of a router-id in the message annotations.
Modified:
qpid/trunk/qpid/extras/dispatch/include/qpid/dispatch/iterator.h
qpid/trunk/qpid/extras/dispatch/src/iterator.c
qpid/trunk/qpid/extras/dispatch/src/router_node.c
qpid/trunk/qpid/extras/dispatch/tests/field_test.c
qpid/trunk/qpid/extras/dispatch/tests/system_tests_one_router.py
Modified: qpid/trunk/qpid/extras/dispatch/include/qpid/dispatch/iterator.h
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/extras/dispatch/include/qpid/dispatch/iterator.h?rev=1534710&r1=1534709&r2=1534710&view=diff
==============================================================================
--- qpid/trunk/qpid/extras/dispatch/include/qpid/dispatch/iterator.h (original)
+++ qpid/trunk/qpid/extras/dispatch/include/qpid/dispatch/iterator.h Tue Oct 22 17:53:50 2013
@@ -76,13 +76,22 @@ typedef struct dx_field_iterator_t dx_fi
* amqp:/<mobile>
* M^^^^^^^^
*
+ * ITER_VIEW_NODE_HASH - Isolate the hashable part of a router-id, used for headers
+ *
+ * <area>/<router>
+ * A^^^^^^
+ *
+ * <my_area>/<router>
+ * R^^^^^^^^
+ *
*/
typedef enum {
ITER_VIEW_ALL,
ITER_VIEW_NO_HOST,
ITER_VIEW_NODE_ID,
ITER_VIEW_NODE_SPECIFIC,
- ITER_VIEW_ADDRESS_HASH
+ ITER_VIEW_ADDRESS_HASH,
+ ITER_VIEW_NODE_HASH
} dx_iterator_view_t;
Modified: qpid/trunk/qpid/extras/dispatch/src/iterator.c
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/extras/dispatch/src/iterator.c?rev=1534710&r1=1534709&r2=1534710&view=diff
==============================================================================
--- qpid/trunk/qpid/extras/dispatch/src/iterator.c (original)
+++ qpid/trunk/qpid/extras/dispatch/src/iterator.c Tue Oct 22 17:53:50 2013
@@ -114,6 +114,29 @@ static void parse_address_view(dx_field_
}
+static void parse_node_view(dx_field_iterator_t *iter)
+{
+ //
+ // This function starts with an iterator view that is identical to
+ // ITER_VIEW_NO_HOST. We will now further refine the view in order
+ // to aid the router in looking up nodes.
+ //
+
+ if (dx_field_iterator_prefix(iter, my_area)) {
+ iter->prefix = 'R';
+ iter->at_prefix = 1;
+ iter->view_prefix = 1;
+ iter->mode = MODE_TO_END;
+ return;
+ }
+
+ iter->prefix = 'A';
+ iter->at_prefix = 1;
+ iter->view_prefix = 1;
+ iter->mode = MODE_TO_SLASH;
+}
+
+
static void view_initialize(dx_field_iterator_t *iter)
{
//
@@ -210,6 +233,12 @@ static void view_initialize(dx_field_ite
return;
}
+ if (iter->view == ITER_VIEW_NODE_HASH) {
+ iter->mode = MODE_TO_END;
+ parse_node_view(iter);
+ return;
+ }
+
if (iter->view == ITER_VIEW_NODE_SPECIFIC) {
iter->mode = MODE_TO_END;
while (!dx_field_iterator_end(iter)) {
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=1534710&r1=1534709&r2=1534710&view=diff
==============================================================================
--- qpid/trunk/qpid/extras/dispatch/src/router_node.c (original)
+++ qpid/trunk/qpid/extras/dispatch/src/router_node.c Tue Oct 22 17:53:50 2013
@@ -32,6 +32,7 @@ static char *router_role = "inter-rout
static char *local_prefix = "_local/";
static char *topo_prefix = "_topo/";
static char *direct_prefix;
+static char *node_id;
/**
* Address Types and Processing:
@@ -388,7 +389,7 @@ static dx_field_iterator_t *router_annot
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);
- if (dx_field_iterator_equal(iter, (unsigned char*) direct_prefix))
+ if (dx_field_iterator_equal(iter, (unsigned char*) node_id))
*drop = 1;
dx_field_iterator_reset(iter);
dx_compose_insert_string_iterator(out_da, iter);
@@ -398,7 +399,7 @@ static dx_field_iterator_t *router_annot
}
}
- dx_compose_insert_string(out_da, direct_prefix);
+ dx_compose_insert_string(out_da, node_id);
dx_compose_end_list(out_da);
//
@@ -410,7 +411,7 @@ static dx_field_iterator_t *router_annot
ingress_iter = dx_parse_raw(ingress);
dx_compose_insert_string_iterator(out_da, ingress_iter);
} else
- dx_compose_insert_string(out_da, direct_prefix);
+ dx_compose_insert_string(out_da, node_id);
dx_compose_end_map(out_da);
@@ -585,7 +586,7 @@ static void router_rx_handler(void* cont
//
int origin = -1;
if (ingress_iter) {
- dx_field_iterator_reset_view(ingress_iter, ITER_VIEW_ADDRESS_HASH);
+ dx_field_iterator_reset_view(ingress_iter, ITER_VIEW_NODE_HASH);
dx_address_t *origin_addr;
dx_hash_retrieve(router->addr_hash, ingress_iter, (void*) &origin_addr);
if (origin_addr && DEQ_SIZE(origin_addr->rnodes) == 1) {
@@ -1105,6 +1106,11 @@ dx_router_t *dx_router(dx_dispatch_t *dx
strcat(direct_prefix, id);
strcat(direct_prefix, "/");
+ node_id = (char*) malloc(dplen);
+ strcpy(node_id, area);
+ strcat(node_id, "/");
+ strcat(node_id, id);
+
dx_router_t *router = NEW(dx_router_t);
router_node.type_context = router;
@@ -1186,7 +1192,7 @@ void dx_router_free(dx_router_t *router)
const char *dx_router_id(const dx_dispatch_t *dx)
{
- return direct_prefix;
+ return node_id;
}
Modified: qpid/trunk/qpid/extras/dispatch/tests/field_test.c
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/extras/dispatch/tests/field_test.c?rev=1534710&r1=1534709&r2=1534710&view=diff
==============================================================================
--- qpid/trunk/qpid/extras/dispatch/tests/field_test.c (original)
+++ qpid/trunk/qpid/extras/dispatch/tests/field_test.c Tue Oct 22 17:53:50 2013
@@ -137,6 +137,30 @@ static char* test_view_address_hash(void
}
+static char* test_view_node_hash(void *context)
+{
+ struct {const char *addr; const char *view;} cases[] = {
+ {"area/router", "Aarea"},
+ {"my-area/router", "Rrouter"},
+ {"my-area/my-router", "Rmy-router"},
+ {0, 0}
+ };
+ int idx;
+
+ for (idx = 0; cases[idx].addr; idx++) {
+ dx_field_iterator_t *iter = dx_field_iterator_string(cases[idx].addr, ITER_VIEW_NODE_HASH);
+ if (!dx_field_iterator_equal(iter, (unsigned char*) cases[idx].view)) {
+ char *got = (char*) dx_field_iterator_copy(iter);
+ snprintf(fail_text, FAIL_TEXT_SIZE, "Addr '%s' failed. Expected '%s', got '%s'",
+ cases[idx].addr, cases[idx].view, got);
+ return fail_text;
+ }
+ }
+
+ return 0;
+}
+
+
int field_tests(void)
{
int result = 0;
@@ -147,6 +171,7 @@ int field_tests(void)
TEST_CASE(test_view_global_non_dns, 0);
TEST_CASE(test_view_global_no_host, 0);
TEST_CASE(test_view_address_hash, 0);
+ TEST_CASE(test_view_node_hash, 0);
return result;
}
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=1534710&r1=1534709&r2=1534710&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 Tue Oct 22 17:53:50 2013
@@ -369,8 +369,8 @@ class RouterTest(unittest.TestCase):
self.assertEqual(i, rm.body['number'])
da = rm.instructions
self.assertEqual(da.__class__, dict)
- self.assertEqual(da['qdx.ingress'], '_topo/area/Qpid.Dispatch.Router.A/')
- self.assertEqual(da['qdx.trace'], ['_topo/area/Qpid.Dispatch.Router.A/'])
+ self.assertEqual(da['qdx.ingress'], 'area/Qpid.Dispatch.Router.A')
+ self.assertEqual(da['qdx.trace'], ['area/Qpid.Dispatch.Router.A'])
##
## Pre-existing ingress
@@ -388,7 +388,7 @@ class RouterTest(unittest.TestCase):
da = rm.instructions
self.assertEqual(da.__class__, dict)
self.assertEqual(da['qdx.ingress'], 'ingress-router')
- self.assertEqual(da['qdx.trace'], ['_topo/area/Qpid.Dispatch.Router.A/'])
+ self.assertEqual(da['qdx.trace'], ['area/Qpid.Dispatch.Router.A'])
##
## Invalid trace type
@@ -405,8 +405,8 @@ class RouterTest(unittest.TestCase):
self.assertEqual(i, rm.body['number'])
da = rm.instructions
self.assertEqual(da.__class__, dict)
- self.assertEqual(da['qdx.ingress'], '_topo/area/Qpid.Dispatch.Router.A/')
- self.assertEqual(da['qdx.trace'], ['_topo/area/Qpid.Dispatch.Router.A/'])
+ self.assertEqual(da['qdx.ingress'], 'area/Qpid.Dispatch.Router.A')
+ self.assertEqual(da['qdx.trace'], ['area/Qpid.Dispatch.Router.A'])
##
## Empty trace
@@ -423,13 +423,13 @@ class RouterTest(unittest.TestCase):
self.assertEqual(i, rm.body['number'])
da = rm.instructions
self.assertEqual(da.__class__, dict)
- self.assertEqual(da['qdx.ingress'], '_topo/area/Qpid.Dispatch.Router.A/')
- self.assertEqual(da['qdx.trace'], ['_topo/area/Qpid.Dispatch.Router.A/'])
+ self.assertEqual(da['qdx.ingress'], 'area/Qpid.Dispatch.Router.A')
+ self.assertEqual(da['qdx.trace'], ['area/Qpid.Dispatch.Router.A'])
##
## Non-empty trace
##
- tm.instructions = {'qdx.trace' : ['first.hop']}
+ tm.instructions = {'qdx.trace' : ['area/first.hop']}
for i in range(10):
tm.body = {'number': i}
M1.put(tm)
@@ -441,8 +441,8 @@ class RouterTest(unittest.TestCase):
self.assertEqual(i, rm.body['number'])
da = rm.instructions
self.assertEqual(da.__class__, dict)
- self.assertEqual(da['qdx.ingress'], '_topo/area/Qpid.Dispatch.Router.A/')
- self.assertEqual(da['qdx.trace'], ['first.hop', '_topo/area/Qpid.Dispatch.Router.A/'])
+ self.assertEqual(da['qdx.ingress'], 'area/Qpid.Dispatch.Router.A')
+ self.assertEqual(da['qdx.trace'], ['area/first.hop', 'area/Qpid.Dispatch.Router.A'])
M1.stop()
M2.stop()
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org