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/08/04 18:33:37 UTC
qpid-dispatch git commit: DISPATCH-373 - Added improved error
messages for reads in the core agent. This closes #86
Repository: qpid-dispatch
Updated Branches:
refs/heads/master cc8f70a6c -> a2612ca4f
DISPATCH-373 - Added improved error messages for reads in the core agent.
This closes #86
Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/a2612ca4
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/a2612ca4
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/a2612ca4
Branch: refs/heads/master
Commit: a2612ca4fc5296ed7144ac8d5045192cc121eb77
Parents: cc8f70a
Author: Ted Ross <tr...@redhat.com>
Authored: Thu Aug 4 14:32:35 2016 -0400
Committer: Ted Ross <tr...@redhat.com>
Committed: Thu Aug 4 14:32:35 2016 -0400
----------------------------------------------------------------------
.../qpid_dispatch_internal/management/agent.py | 4 ++--
src/router_core/agent_config_address.c | 20 +++++++++++++++---
src/router_core/agent_config_auto_link.c | 20 +++++++++++++++---
src/router_core/agent_config_link_route.c | 22 +++++++++++++++++---
src/router_core/router_core.c | 5 +++--
src/router_core/router_core_private.h | 1 +
tests/system_tests_link_routes.py | 2 +-
7 files changed, 60 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a2612ca4/python/qpid_dispatch_internal/management/agent.py
----------------------------------------------------------------------
diff --git a/python/qpid_dispatch_internal/management/agent.py b/python/qpid_dispatch_internal/management/agent.py
index 6e4b7fc..42191da 100644
--- a/python/qpid_dispatch_internal/management/agent.py
+++ b/python/qpid_dispatch_internal/management/agent.py
@@ -803,7 +803,7 @@ class Agent(object):
"""Called when a management request is received."""
def error(e, trace):
"""Raise an error"""
- self.log(LOG_ERROR, "Error dispatching %s: %s\n%s"%(request, e, trace))
+ self.log(LOG_ERROR, "Error performing %s: %s"%(request.properties.get('operation'), e.message))
self.respond(request, e.status, e.description)
# If there's no reply_to, don't bother to process the request.
@@ -917,7 +917,7 @@ class Agent(object):
if not requested_type or self.management.entity_type.is_a(requested_type):
return self.management
else:
- raise BadRequestStatus("No name or identity provided")
+ raise BadRequestStatus("%s: No name or identity provided" % requested_type)
def attrvals():
"""String form of the id attribute values for error messages"""
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a2612ca4/src/router_core/agent_config_address.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent_config_address.c b/src/router_core/agent_config_address.c
index edb9ba5..753e79d 100644
--- a/src/router_core/agent_config_address.c
+++ b/src/router_core/agent_config_address.c
@@ -42,6 +42,7 @@ const char *qdr_config_address_columns[] =
"egressPhase",
0};
+const char *CONFIG_ADDRESS_TYPE = "org.apache.qpid.dispatch.router.config.address";
static void qdr_config_address_insert_column_CT(qdr_address_config_t *addr, int col, qd_composed_field_t *body, bool as_map)
{
@@ -67,7 +68,7 @@ static void qdr_config_address_insert_column_CT(qdr_address_config_t *addr, int
}
case QDR_CONFIG_ADDRESS_TYPE:
- qd_compose_insert_string(body, "org.apache.qpid.dispatch.router.config.address");
+ qd_compose_insert_string(body, CONFIG_ADDRESS_TYPE);
break;
case QDR_CONFIG_ADDRESS_PREFIX:
@@ -259,8 +260,11 @@ void qdra_config_address_delete_CT(qdr_core_t *core,
{
qdr_address_config_t *addr = 0;
- if (!name && !identity)
+ if (!name && !identity) {
query->status = QD_AMQP_BAD_REQUEST;
+ query->status.description = "No name or identity provided";
+ qd_log(core->agent_log, QD_LOG_ERROR, "Error performing DELETE of %s: %s", CONFIG_ADDRESS_TYPE, query->status.description);
+ }
else {
if (identity)
addr = qdr_address_config_find_by_identity_CT(core, identity);
@@ -311,11 +315,14 @@ void qdra_config_address_create_CT(qdr_core_t *core,
if (!!addr) {
query->status = QD_AMQP_BAD_REQUEST;
query->status.description = "Name conflicts with an existing entity";
+ qd_log(core->agent_log, QD_LOG_ERROR, "Error performing CREATE of %s: %s", CONFIG_ADDRESS_TYPE, query->status.description);
break;
}
if (!qd_parse_is_map(in_body)) {
query->status = QD_AMQP_BAD_REQUEST;
+ query->status.description = "Body of request must be a map";
+ qd_log(core->agent_log, QD_LOG_ERROR, "Error performing CREATE of %s: %s", CONFIG_ADDRESS_TYPE, query->status.description);
break;
}
@@ -333,6 +340,8 @@ void qdra_config_address_create_CT(qdr_core_t *core,
//
if (!prefix_field) {
query->status = QD_AMQP_BAD_REQUEST;
+ query->status.description = "prefix field is mandatory";
+ qd_log(core->agent_log, QD_LOG_ERROR, "Error performing CREATE of %s: %s", CONFIG_ADDRESS_TYPE, query->status.description);
break;
}
@@ -347,6 +356,7 @@ void qdra_config_address_create_CT(qdr_core_t *core,
if (!!addr) {
query->status = QD_AMQP_BAD_REQUEST;
query->status.description = "Address prefix conflicts with an existing entity";
+ qd_log(core->agent_log, QD_LOG_ERROR, "Error performing CREATE of %s: %s", CONFIG_ADDRESS_TYPE, query->status.description);
break;
}
@@ -369,6 +379,7 @@ void qdra_config_address_create_CT(qdr_core_t *core,
if (in_phase < 0 || in_phase > 9 || out_phase < 0 || out_phase > 9) {
query->status = QD_AMQP_BAD_REQUEST;
query->status.description = "Phase values must be between 0 and 9";
+ qd_log(core->agent_log, QD_LOG_ERROR, "Error performing CREATE of %s: %s", CONFIG_ADDRESS_TYPE, query->status.description);
break;
}
@@ -440,8 +451,11 @@ void qdra_config_address_get_CT(qdr_core_t *core,
{
qdr_address_config_t *addr = 0;
- if (!name && !identity)
+ if (!name && !identity) {
query->status = QD_AMQP_BAD_REQUEST;
+ query->status.description = "No name or identity provided";
+ qd_log(core->agent_log, QD_LOG_ERROR, "Error performing READ of %s: %s", CONFIG_ADDRESS_TYPE, query->status.description);
+ }
else {
if (identity) //If there is identity, ignore the name
addr = qdr_address_config_find_by_identity_CT(core, identity);
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a2612ca4/src/router_core/agent_config_auto_link.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent_config_auto_link.c b/src/router_core/agent_config_auto_link.c
index 4f77348..4397b81 100644
--- a/src/router_core/agent_config_auto_link.c
+++ b/src/router_core/agent_config_auto_link.c
@@ -49,6 +49,7 @@ const char *qdr_config_auto_link_columns[] =
"lastError",
0};
+const char *CONFIG_AUTOLINK_TYPE = "org.apache.qpid.dispatch.router.config.autoLink";
static void qdr_config_auto_link_insert_column_CT(qdr_auto_link_t *al, int col, qd_composed_field_t *body, bool as_map)
{
@@ -73,7 +74,7 @@ static void qdr_config_auto_link_insert_column_CT(qdr_auto_link_t *al, int col,
break;
case QDR_CONFIG_AUTO_LINK_TYPE:
- qd_compose_insert_string(body, "org.apache.qpid.dispatch.router.config.autoLink");
+ qd_compose_insert_string(body, CONFIG_AUTOLINK_TYPE);
break;
case QDR_CONFIG_AUTO_LINK_ADDR:
@@ -297,8 +298,11 @@ void qdra_config_auto_link_delete_CT(qdr_core_t *core,
{
qdr_auto_link_t *al = 0;
- if (!name && !identity)
+ if (!name && !identity) {
query->status = QD_AMQP_BAD_REQUEST;
+ query->status.description = "No name or identity provided";
+ qd_log(core->agent_log, QD_LOG_ERROR, "Error performing DELETE of %s: %s", CONFIG_AUTOLINK_TYPE, query->status.description);
+ }
else {
if (identity)
al = qdr_auto_link_config_find_by_identity_CT(core, identity);
@@ -337,11 +341,14 @@ void qdra_config_auto_link_create_CT(qdr_core_t *core,
if (!!al) {
query->status = QD_AMQP_BAD_REQUEST;
query->status.description = "Name conflicts with an existing entity";
+ qd_log(core->agent_log, QD_LOG_ERROR, "Error performing CREATE of %s: %s", CONFIG_AUTOLINK_TYPE, query->status.description);
break;
}
if (!qd_parse_is_map(in_body)) {
query->status = QD_AMQP_BAD_REQUEST;
+ query->status.description = "Body of request must be a map";
+ qd_log(core->agent_log, QD_LOG_ERROR, "Error performing CREATE of %s: %s", CONFIG_AUTOLINK_TYPE, query->status.description);
break;
}
@@ -359,6 +366,8 @@ void qdra_config_auto_link_create_CT(qdr_core_t *core,
//
if (!addr_field || !dir_field) {
query->status = QD_AMQP_BAD_REQUEST;
+ query->status.description = "addr and dir fields are mandatory";
+ qd_log(core->agent_log, QD_LOG_ERROR, "Error performing CREATE of %s: %s", CONFIG_AUTOLINK_TYPE, query->status.description);
break;
}
@@ -367,6 +376,7 @@ void qdra_config_auto_link_create_CT(qdr_core_t *core,
if (error) {
query->status = QD_AMQP_BAD_REQUEST;
query->status.description = error;
+ qd_log(core->agent_log, QD_LOG_ERROR, "Error performing CREATE of %s: %s", CONFIG_AUTOLINK_TYPE, query->status.description);
break;
}
@@ -382,6 +392,7 @@ void qdra_config_auto_link_create_CT(qdr_core_t *core,
if (phase < 0 || phase > 9) {
query->status = QD_AMQP_BAD_REQUEST;
query->status.description = "autoLink phase must be between 0 and 9";
+ qd_log(core->agent_log, QD_LOG_ERROR, "Error performing CREATE of %s: %s", CONFIG_AUTOLINK_TYPE, query->status.description);
break;
}
@@ -450,8 +461,11 @@ void qdra_config_auto_link_get_CT(qdr_core_t *core,
{
qdr_auto_link_t *al = 0;
- if (!name && !identity)
+ if (!name && !identity) {
query->status = QD_AMQP_BAD_REQUEST;
+ query->status.description = "No name or identity provided";
+ qd_log(core->agent_log, QD_LOG_ERROR, "Error performing READ of %s: %s", CONFIG_AUTOLINK_TYPE, query->status.description);
+ }
else {
if (identity) //If there is identity, ignore the name
al = qdr_auto_link_config_find_by_identity_CT(core, identity);
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a2612ca4/src/router_core/agent_config_link_route.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent_config_link_route.c b/src/router_core/agent_config_link_route.c
index e2a38bf..d7da761 100644
--- a/src/router_core/agent_config_link_route.c
+++ b/src/router_core/agent_config_link_route.c
@@ -45,6 +45,9 @@ const char *qdr_config_link_route_columns[] =
"operStatus",
0};
+const char *CONFIG_LINKROUTE_TYPE = "org.apache.qpid.dispatch.router.config.linkRoute";
+
+const qd_amqp_error_t QD_AMQP_NAME_IDENTITY_MISSING = { 400, "No name or identity provided" };
static void qdr_config_link_route_insert_column_CT(qdr_link_route_t *lr, int col, qd_composed_field_t *body, bool as_map)
{
@@ -70,7 +73,7 @@ static void qdr_config_link_route_insert_column_CT(qdr_link_route_t *lr, int col
}
case QDR_CONFIG_LINK_ROUTE_TYPE:
- qd_compose_insert_string(body, "org.apache.qpid.dispatch.router.config.linkRoute");
+ qd_compose_insert_string(body, CONFIG_LINKROUTE_TYPE);
break;
case QDR_CONFIG_LINK_ROUTE_PREFIX:
@@ -311,8 +314,11 @@ void qdra_config_link_route_delete_CT(qdr_core_t *core,
{
qdr_link_route_t *lr = 0;
- if (!name && !identity)
+ if (!name && !identity) {
query->status = QD_AMQP_BAD_REQUEST;
+ query->status.description = "No name or identity provided";
+ qd_log(core->agent_log, QD_LOG_ERROR, "Error performing DELETE of %s: %s", CONFIG_LINKROUTE_TYPE, query->status.description);
+ }
else {
if (identity)
lr = qdr_link_route_config_find_by_identity_CT(core, identity);
@@ -351,11 +357,14 @@ void qdra_config_link_route_create_CT(qdr_core_t *core,
if (!!lr) {
query->status = QD_AMQP_BAD_REQUEST;
query->status.description = "Name conflicts with an existing entity";
+ qd_log(core->agent_log, QD_LOG_ERROR, "Error performing CREATE of %s: %s", CONFIG_LINKROUTE_TYPE, query->status.description);
break;
}
if (!qd_parse_is_map(in_body)) {
query->status = QD_AMQP_BAD_REQUEST;
+ query->status.description = "Body of request must be a map";
+ qd_log(core->agent_log, QD_LOG_ERROR, "Error performing CREATE of %s: %s", CONFIG_LINKROUTE_TYPE, query->status.description);
break;
}
@@ -373,6 +382,8 @@ void qdra_config_link_route_create_CT(qdr_core_t *core,
//
if (!prefix_field || !dir_field) {
query->status = QD_AMQP_BAD_REQUEST;
+ query->status.description = "prefix and dir fields are mandatory";
+ qd_log(core->agent_log, QD_LOG_ERROR, "Error performing CREATE of %s: %s", CONFIG_LINKROUTE_TYPE, query->status.description);
break;
}
@@ -381,6 +392,7 @@ void qdra_config_link_route_create_CT(qdr_core_t *core,
if (error) {
query->status = QD_AMQP_BAD_REQUEST;
query->status.description = error;
+ qd_log(core->agent_log, QD_LOG_ERROR, "Error performing CREATE of %s: %s", CONFIG_LINKROUTE_TYPE, query->status.description);
break;
}
@@ -389,6 +401,7 @@ void qdra_config_link_route_create_CT(qdr_core_t *core,
if (error) {
query->status = QD_AMQP_BAD_REQUEST;
query->status.description = error;
+ qd_log(core->agent_log, QD_LOG_ERROR, "Error performing CREATE of %s: %s", CONFIG_LINKROUTE_TYPE, query->status.description);
break;
}
@@ -440,8 +453,11 @@ void qdra_config_link_route_get_CT(qdr_core_t *core,
{
qdr_link_route_t *lr = 0;
- if (!name && !identity)
+ if (!name && !identity) {
query->status = QD_AMQP_BAD_REQUEST;
+ query->status.description = "No name or identity provided";
+ qd_log(core->agent_log, QD_LOG_ERROR, "Error performing READ of %s: %s", CONFIG_LINKROUTE_TYPE, query->status.description);
+ }
else {
if (identity) //If there is identity, ignore the name
lr = qdr_link_route_config_find_by_identity_CT(core, identity);
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a2612ca4/src/router_core/router_core.c
----------------------------------------------------------------------
diff --git a/src/router_core/router_core.c b/src/router_core/router_core.c
index e8cc06b..937e112 100644
--- a/src/router_core/router_core.c
+++ b/src/router_core/router_core.c
@@ -44,9 +44,10 @@ qdr_core_t *qdr_core(qd_dispatch_t *qd, qd_router_mode_t mode, const char *area,
core->router_id = id;
//
- // Set up the logging source for the router core
+ // Set up the logging sources for the router core
//
- core->log = qd_log_source("ROUTER_CORE");
+ core->log = qd_log_source("ROUTER_CORE");
+ core->agent_log = qd_log_source("AGENT");
//
// Set up the threading support
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a2612ca4/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 a578810..2079435 100644
--- a/src/router_core/router_core_private.h
+++ b/src/router_core/router_core_private.h
@@ -503,6 +503,7 @@ ALLOC_DECLARE(qdr_conn_identifier_t);
struct qdr_core_t {
qd_dispatch_t *qd;
qd_log_source_t *log;
+ qd_log_source_t *agent_log;
sys_thread_t *thread;
bool running;
qdr_action_list_t action_list;
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/a2612ca4/tests/system_tests_link_routes.py
----------------------------------------------------------------------
diff --git a/tests/system_tests_link_routes.py b/tests/system_tests_link_routes.py
index 7f1d117..781eb93 100644
--- a/tests/system_tests_link_routes.py
+++ b/tests/system_tests_link_routes.py
@@ -184,7 +184,7 @@ class LinkRoutePatternTest(TestCase):
out = self.run_qdmanage(cmd=cmd, address=self.routers[1].addresses[0])
except Exception, e:
exception_occurred = True
- self.assertTrue("BadRequestStatus: Bad Request" in e.message)
+ self.assertTrue("BadRequestStatus: No name or identity provided" in e.message)
self.assertTrue(exception_occurred)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org