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 2016/09/30 12:23:43 UTC
[1/4] qpid-dispatch git commit: DISPATCH-496 - Issue credit to
blocked senders when an autolink attaches the first consumer.
Repository: qpid-dispatch
Updated Branches:
refs/heads/0.6.x 74544485b -> 2a00adda0
DISPATCH-496 - Issue credit to blocked senders when an autolink attaches the first consumer.
Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/b18aa3ab
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/b18aa3ab
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/b18aa3ab
Branch: refs/heads/0.6.x
Commit: b18aa3ab35320e9984162bf8bd01da4232359e8d
Parents: 7454448
Author: Ted Ross <tr...@redhat.com>
Authored: Fri Sep 2 16:24:37 2016 -0400
Committer: Ted Ross <tr...@redhat.com>
Committed: Thu Sep 29 09:01:09 2016 -0400
----------------------------------------------------------------------
src/router_core/connections.c | 1 +
1 file changed, 1 insertion(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/b18aa3ab/src/router_core/connections.c
----------------------------------------------------------------------
diff --git a/src/router_core/connections.c b/src/router_core/connections.c
index 336b90f..ff6362a 100644
--- a/src/router_core/connections.c
+++ b/src/router_core/connections.c
@@ -1214,6 +1214,7 @@ static void qdr_link_inbound_second_attach_CT(qdr_core_t *core, qdr_action_t *ac
const char *key = (const char*) qd_hash_key_by_handle(link->auto_link->addr->hash_handle);
if (key && *key == 'M')
qdr_post_mobile_added_CT(core, key);
+ qdr_addr_start_inlinks_CT(core, link->auto_link->addr);
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[3/4] qpid-dispatch git commit: DISPATCH-523 - Make sure deliveries
that _should_ be deliverable but are not get released.
Posted by tr...@apache.org.
DISPATCH-523 - Make sure deliveries that _should_ be deliverable but are not get released.
Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/74cee2f3
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/74cee2f3
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/74cee2f3
Branch: refs/heads/0.6.x
Commit: 74cee2f39a218bd93a59befbd135ca7c5581cd61
Parents: 0ec6ede
Author: Ted Ross <tr...@redhat.com>
Authored: Fri Sep 23 17:11:36 2016 -0400
Committer: Ted Ross <tr...@redhat.com>
Committed: Thu Sep 29 09:56:16 2016 -0400
----------------------------------------------------------------------
src/router_core/transfer.c | 65 ++++++++++++++++++++++++-----------------
1 file changed, 39 insertions(+), 26 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/74cee2f3/src/router_core/transfer.c
----------------------------------------------------------------------
diff --git a/src/router_core/transfer.c b/src/router_core/transfer.c
index 40ee1ec..d33d905 100644
--- a/src/router_core/transfer.c
+++ b/src/router_core/transfer.c
@@ -430,8 +430,36 @@ static void qdr_link_flow_CT(qdr_core_t *core, qdr_action_t *action, bool discar
}
-static int qdr_link_forward_CT(qdr_core_t *core, qdr_link_t *link, qdr_delivery_t *dlv, qdr_address_t *addr)
+/**
+ * Return the number of outbound paths to destinations that this address has.
+ * Note that even if there are more than zero paths, the destination still may
+ * be unreachable (e.g. an rnode next hop with no link).
+ */
+static long qdr_addr_path_count_CT(qdr_address_t *addr)
+{
+ return (long) DEQ_SIZE(addr->subscriptions) + (long) DEQ_SIZE(addr->rlinks) +
+ (long) qd_bitmask_cardinality(addr->rnodes);
+}
+
+
+static void qdr_link_forward_CT(qdr_core_t *core, qdr_link_t *link, qdr_delivery_t *dlv, qdr_address_t *addr)
{
+ if (addr && addr == link->owning_addr && qdr_addr_path_count_CT(addr) == 0) {
+ //
+ // We are trying to forward a delivery on an address that has no outbound paths
+ // AND the incoming link is targeted (not anonymous). In this case, we must put
+ // the delivery on the incoming link's undelivered list. Note that it is safe
+ // to do this because the undelivered list will be flushed once the number of
+ // paths transitions from zero to one.
+ //
+ // Use the action-reference as the reference for undelivered rather
+ // than decrementing and incrementing the delivery ref_count.
+ //
+ DEQ_INSERT_TAIL(link->undelivered, dlv);
+ dlv->where = QDR_DELIVERY_IN_UNDELIVERED;
+ return;
+ }
+
int fanout = 0;
if (addr) {
@@ -442,28 +470,15 @@ static int qdr_link_forward_CT(qdr_core_t *core, qdr_link_t *link, qdr_delivery_
}
if (fanout == 0) {
- if (link->owning_addr) {
- //
- // Message was not delivered and the link is not anonymous.
- // Queue the message for later delivery (when the address gets
- // a valid destination).
- //
- // Use the action-reference as the reference for undelivered rather
- // than decrementing and incrementing the delivery ref_count.
- //
- DEQ_INSERT_TAIL(link->undelivered, dlv);
- dlv->where = QDR_DELIVERY_IN_UNDELIVERED;
- } else {
- //
- // Message was not delivered and the link is anonymous, drop the delivery.
- //
- // If the delivery is not settled, release it.
- //
- if (!dlv->settled)
- qdr_delivery_release_CT(core, dlv);
- qdr_delivery_decref(dlv);
- qdr_link_issue_credit_CT(core, link, 1, false);
- }
+ //
+ // Message was not delivered, drop the delivery.
+ //
+ // If the delivery is not settled, release it.
+ //
+ if (!dlv->settled)
+ qdr_delivery_release_CT(core, dlv);
+ qdr_delivery_decref(dlv);
+ qdr_link_issue_credit_CT(core, link, 1, false);
} else if (fanout > 0) {
if (dlv->settled) {
//
@@ -494,8 +509,6 @@ static int qdr_link_forward_CT(qdr_core_t *core, qdr_link_t *link, qdr_delivery_
qdr_link_issue_credit_CT(core, link, 1, false);
}
}
-
- return fanout;
}
@@ -716,7 +729,7 @@ void qdr_addr_start_inlinks_CT(qdr_core_t *core, qdr_address_t *addr)
if (DEQ_SIZE(addr->inlinks) == 0)
return;
- if (DEQ_SIZE(addr->subscriptions) + DEQ_SIZE(addr->rlinks) + qd_bitmask_cardinality(addr->rnodes) == 1) {
+ if (qdr_addr_path_count_CT(addr) == 1) {
qdr_link_ref_t *ref = DEQ_HEAD(addr->inlinks);
while (ref) {
qdr_link_t *link = ref->link;
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[4/4] qpid-dispatch git commit: DISPATCH-500 - Fixed code to use
qdr_field_t to pass around the name and identity of management objects
Posted by tr...@apache.org.
DISPATCH-500 - Fixed code to use qdr_field_t to pass around the name and identity of management objects
(cherry picked from commit 52b5a19aca807b4b3abe8b9e81a9b4819e2d8773)
Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/2a00adda
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/2a00adda
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/2a00adda
Branch: refs/heads/0.6.x
Commit: 2a00adda006a235bf2a54996b5c263fea821a211
Parents: 74cee2f
Author: Ganesh Murthy <gm...@redhat.com>
Authored: Wed Sep 14 14:10:32 2016 -0400
Committer: Ted Ross <tr...@redhat.com>
Committed: Fri Sep 30 08:21:35 2016 -0400
----------------------------------------------------------------------
src/router_config.c | 27 ++++++++++++++++++---
src/router_core/agent.c | 39 ++++++++++++++++++------------
src/router_core/router_core.c | 11 +++++++++
src/router_core/router_core_private.h | 5 ++--
tests/system_tests_qdmanage.py | 29 +++++++++++++++++++++-
5 files changed, 90 insertions(+), 21 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/2a00adda/src/router_config.c
----------------------------------------------------------------------
diff --git a/src/router_config.c b/src/router_config.c
index 1c37851..a100bbf 100644
--- a/src/router_config.c
+++ b/src/router_config.c
@@ -280,7 +280,14 @@ qd_error_t qd_router_configure_address(qd_router_t *router, qd_entity_t *entity)
qd_parsed_field_t *in_body = qd_parse(iter);
qd_field_iterator_free(iter);
- qdr_manage_create(router->router_core, 0, QD_ROUTER_CONFIG_ADDRESS, 0, in_body, 0);
+ qd_field_iterator_t *name_iter = 0;
+
+ if (name)
+ name_iter = qd_field_iterator_string(name);
+
+ qdr_manage_create(router->router_core, 0, QD_ROUTER_CONFIG_ADDRESS, name_iter, in_body, 0);
+
+ qd_field_iterator_free(name_iter);
} while(0);
@@ -365,7 +372,14 @@ qd_error_t qd_router_configure_link_route(qd_router_t *router, qd_entity_t *enti
qd_parsed_field_t *in_body = qd_parse(iter);
qd_field_iterator_free(iter);
- qdr_manage_create(router->router_core, 0, QD_ROUTER_CONFIG_LINK_ROUTE, 0, in_body, 0);
+ qd_field_iterator_t *name_iter = 0;
+
+ if (name)
+ name_iter = qd_field_iterator_string(name);
+
+ qdr_manage_create(router->router_core, 0, QD_ROUTER_CONFIG_LINK_ROUTE, name_iter, in_body, 0);
+
+ qd_field_iterator_free(name_iter);
} while(0);
@@ -450,7 +464,14 @@ qd_error_t qd_router_configure_auto_link(qd_router_t *router, qd_entity_t *entit
qd_parsed_field_t *in_body = qd_parse(iter);
qd_field_iterator_free(iter);
- qdr_manage_create(router->router_core, 0, QD_ROUTER_CONFIG_AUTO_LINK, 0, in_body, 0);
+ qd_field_iterator_t *name_iter = 0;
+
+ if (name)
+ name_iter = qd_field_iterator_string(name);
+
+ qdr_manage_create(router->router_core, 0, QD_ROUTER_CONFIG_AUTO_LINK, name_iter, in_body, 0);
+
+ qd_field_iterator_free(name_iter);
} while (0);
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/2a00adda/src/router_core/agent.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent.c b/src/router_core/agent.c
index 401d4ae..a72d4ca 100644
--- a/src/router_core/agent.c
+++ b/src/router_core/agent.c
@@ -112,7 +112,7 @@ void qdr_manage_create(qdr_core_t *core,
// Create a query object here
action->args.agent.query = qdr_query(core, context, type, out_body);
- action->args.agent.name = name;
+ action->args.agent.name = qdr_field_from_iter(name);
action->args.agent.in_body = in_body;
qdr_action_enqueue(core, action);
@@ -129,8 +129,8 @@ void qdr_manage_delete(qdr_core_t *core,
// Create a query object here
action->args.agent.query = qdr_query(core, context, type, 0);
- action->args.agent.name = name;
- action->args.agent.identity = identity;
+ action->args.agent.name = qdr_field_from_iter(name);
+ action->args.agent.identity = qdr_field_from_iter(identity);
qdr_action_enqueue(core, action);
}
@@ -147,8 +147,8 @@ void qdr_manage_read(qdr_core_t *core,
// Create a query object here
action->args.agent.query = qdr_query(core, context, entity_type, body);
- action->args.agent.identity = identity;
- action->args.agent.name = name;
+ action->args.agent.identity = qdr_field_from_iter(identity);
+ action->args.agent.name = qdr_field_from_iter(name);
qdr_action_enqueue(core, action);
}
@@ -164,8 +164,8 @@ void qdr_manage_update(qdr_core_t *core,
{
qdr_action_t *action = qdr_action(qdr_manage_update_CT, "manage_update");
action->args.agent.query = qdr_query(core, context, type, out_body);
- action->args.agent.name = name;
- action->args.agent.identity = identity;
+ action->args.agent.name = qdr_field_from_iter(name);
+ action->args.agent.identity = qdr_field_from_iter(identity);
action->args.agent.in_body = in_body;
qdr_action_enqueue(core, action);
@@ -330,8 +330,8 @@ static void qdr_agent_forbidden(qdr_core_t *core, qdr_query_t *query, bool op_qu
static void qdr_manage_read_CT(qdr_core_t *core, qdr_action_t *action, bool discard)
{
- qd_field_iterator_t *identity = action->args.agent.identity;
- qd_field_iterator_t *name = action->args.agent.name;
+ qd_field_iterator_t *identity = qdr_field_iterator(action->args.agent.identity);
+ qd_field_iterator_t *name = qdr_field_iterator(action->args.agent.name);
qdr_query_t *query = action->args.agent.query;
switch (query->entity_type) {
@@ -345,12 +345,15 @@ static void qdr_manage_read_CT(qdr_core_t *core, qdr_action_t *action, bool disc
case QD_ROUTER_EXCHANGE: break;
case QD_ROUTER_BINDING: break;
}
+
+ qdr_field_free(action->args.agent.name);
+ qdr_field_free(action->args.agent.identity);
}
static void qdr_manage_create_CT(qdr_core_t *core, qdr_action_t *action, bool discard)
{
- qd_field_iterator_t *name = action->args.agent.name;
+ qd_field_iterator_t *name = qdr_field_iterator(action->args.agent.name);
qdr_query_t *query = action->args.agent.query;
qd_parsed_field_t *in_body = action->args.agent.in_body;
@@ -367,14 +370,15 @@ static void qdr_manage_create_CT(qdr_core_t *core, qdr_action_t *action, bool di
}
+ qdr_field_free(action->args.agent.name);
qd_parse_free(in_body);
}
static void qdr_manage_delete_CT(qdr_core_t *core, qdr_action_t *action, bool discard)
{
- qd_field_iterator_t *name = action->args.agent.name;
- qd_field_iterator_t *identity = action->args.agent.identity;
+ qd_field_iterator_t *name = qdr_field_iterator(action->args.agent.name);
+ qd_field_iterator_t *identity = qdr_field_iterator(action->args.agent.identity);
qdr_query_t *query = action->args.agent.query;
switch (query->entity_type) {
@@ -388,12 +392,15 @@ static void qdr_manage_delete_CT(qdr_core_t *core, qdr_action_t *action, bool di
case QD_ROUTER_EXCHANGE: break;
case QD_ROUTER_BINDING: break;
}
+
+ qdr_field_free(action->args.agent.name);
+ qdr_field_free(action->args.agent.identity);
}
static void qdr_manage_update_CT(qdr_core_t *core, qdr_action_t *action, bool discard)
{
- qd_field_iterator_t *identity = action->args.agent.identity;
- qd_field_iterator_t *name = action->args.agent.name;
+ qd_field_iterator_t *identity = qdr_field_iterator(action->args.agent.identity);
+ qd_field_iterator_t *name = qdr_field_iterator(action->args.agent.name);
qdr_query_t *query = action->args.agent.query;
qd_parsed_field_t *in_body = action->args.agent.in_body;
@@ -409,7 +416,9 @@ static void qdr_manage_update_CT(qdr_core_t *core, qdr_action_t *action, bool di
case QD_ROUTER_BINDING: break;
}
- qd_parse_free(in_body);
+ qdr_field_free(action->args.agent.name);
+ qdr_field_free(action->args.agent.identity);
+ qd_parse_free(in_body);
}
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/2a00adda/src/router_core/router_core.c
----------------------------------------------------------------------
diff --git a/src/router_core/router_core.c b/src/router_core/router_core.c
index f5b2474..059c03e 100644
--- a/src/router_core/router_core.c
+++ b/src/router_core/router_core.c
@@ -143,6 +143,9 @@ qdr_field_t *qdr_field(const char *text)
qdr_field_t *qdr_field_from_iter(qd_field_iterator_t *iter)
{
+ if (!iter)
+ return 0;
+
qdr_field_t *field = new_qdr_field_t();
qd_buffer_t *buf;
int remaining;
@@ -166,6 +169,14 @@ qdr_field_t *qdr_field_from_iter(qd_field_iterator_t *iter)
return field;
}
+qd_field_iterator_t *qdr_field_iterator(qdr_field_t *field)
+{
+ if (!field)
+ return 0;
+
+ return field->iterator;
+}
+
void qdr_field_free(qdr_field_t *field)
{
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/2a00adda/src/router_core/router_core_private.h
----------------------------------------------------------------------
diff --git a/src/router_core/router_core_private.h b/src/router_core/router_core_private.h
index 394bd55..9b64a21 100644
--- a/src/router_core/router_core_private.h
+++ b/src/router_core/router_core_private.h
@@ -61,6 +61,7 @@ typedef struct {
qdr_field_t *qdr_field(const char *string);
qdr_field_t *qdr_field_from_iter(qd_field_iterator_t *iter);
+qd_field_iterator_t *qdr_field_iterator(qdr_field_t *field);
void qdr_field_free(qdr_field_t *field);
char *qdr_field_copy(qdr_field_t *field);
@@ -137,8 +138,8 @@ struct qdr_action_t {
struct {
qdr_query_t *query;
int offset;
- qd_field_iterator_t *identity;
- qd_field_iterator_t *name;
+ qdr_field_t *identity;
+ qdr_field_t *name;
qd_parsed_field_t *in_body;
} agent;
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/2a00adda/tests/system_tests_qdmanage.py
----------------------------------------------------------------------
diff --git a/tests/system_tests_qdmanage.py b/tests/system_tests_qdmanage.py
index b8837b3..5696d44 100644
--- a/tests/system_tests_qdmanage.py
+++ b/tests/system_tests_qdmanage.py
@@ -46,7 +46,10 @@ class QdmanageTest(TestCase):
'password': 'server-password'}),
('listener', {'port': cls.tester.get_port()}),
('connector', {'role': 'inter-router', 'port': cls.inter_router_port}),
- ('listener', {'port': cls.tester.get_port(), 'ssl-profile': 'server-ssl'})
+ ('address', {'name': 'test-address', 'prefix': 'abcd', 'distribution': 'multicast'}),
+ ('linkRoute', {'name': 'test-link-route', 'prefix': 'xyz', 'dir': 'in'}),
+ ('autoLink', {'name': 'test-auto-link', 'addr': 'mnop', 'dir': 'out'}),
+ ('listener', {'port': cls.tester.get_port(), 'sslProfile': 'server-ssl'})
])
config_2 = Qdrouterd.Config([
@@ -198,6 +201,30 @@ class QdmanageTest(TestCase):
connector = json.loads(self.run_qdmanage(create_command))
return connector
+ def test_check_address_name(self):
+ long_type = 'org.apache.qpid.dispatch.router.config.address'
+ query_command = 'QUERY --type=' + long_type
+ output = json.loads(self.run_qdmanage(query_command))
+ self.assertEqual(output[0]['name'], "test-address")
+ self.assertEqual(output[0]['distribution'], "multicast")
+ self.assertEqual(output[0]['prefix'], "abcd")
+
+ def test_check_link_route_name(self):
+ long_type = 'org.apache.qpid.dispatch.router.config.linkRoute'
+ query_command = 'QUERY --type=' + long_type
+ output = json.loads(self.run_qdmanage(query_command))
+ self.assertEqual(output[0]['name'], "test-link-route")
+ self.assertEqual(output[0]['dir'], "in")
+ self.assertEqual(output[0]['prefix'], "xyz")
+
+ def test_check_auto_link_name(self):
+ long_type = 'org.apache.qpid.dispatch.router.config.autoLink'
+ query_command = 'QUERY --type=' + long_type
+ output = json.loads(self.run_qdmanage(query_command))
+ self.assertEqual(output[0]['name'], "test-auto-link")
+ self.assertEqual(output[0]['dir'], "out")
+ self.assertEqual(output[0]['addr'], "mnop")
+
def test_create_delete_connector(self):
long_type = 'org.apache.qpid.dispatch.connector'
query_command = 'QUERY --type=' + long_type
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org
[2/4] qpid-dispatch git commit: DISPATCH-505 - Fix handling of credit
with unroutable deliveries on anonymous links.
Posted by tr...@apache.org.
DISPATCH-505 - Fix handling of credit with unroutable deliveries on anonymous links.
Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/0ec6ede0
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/0ec6ede0
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/0ec6ede0
Branch: refs/heads/0.6.x
Commit: 0ec6ede05f0b780fd94596e37019acd238dec73f
Parents: b18aa3a
Author: Ted Ross <tr...@redhat.com>
Authored: Tue Sep 13 13:59:42 2016 -0400
Committer: Ted Ross <tr...@redhat.com>
Committed: Thu Sep 29 09:01:36 2016 -0400
----------------------------------------------------------------------
src/router_core/transfer.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/0ec6ede0/src/router_core/transfer.c
----------------------------------------------------------------------
diff --git a/src/router_core/transfer.c b/src/router_core/transfer.c
index 40ba82e..40ee1ec 100644
--- a/src/router_core/transfer.c
+++ b/src/router_core/transfer.c
@@ -455,12 +455,14 @@ static int qdr_link_forward_CT(qdr_core_t *core, qdr_link_t *link, qdr_delivery_
dlv->where = QDR_DELIVERY_IN_UNDELIVERED;
} else {
//
- // Release the delivery
+ // Message was not delivered and the link is anonymous, drop the delivery.
//
- qdr_delivery_release_CT(core, dlv);
+ // If the delivery is not settled, release it.
+ //
+ if (!dlv->settled)
+ qdr_delivery_release_CT(core, dlv);
qdr_delivery_decref(dlv);
- if (link->link_type == QD_LINK_ROUTER)
- qdr_link_issue_credit_CT(core, link, 1, false);
+ qdr_link_issue_credit_CT(core, link, 1, false);
}
} else if (fanout > 0) {
if (dlv->settled) {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org