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/03/02 18:20:39 UTC
[1/4] qpid-dispatch git commit: DISPATCH-179 - Renamed "provisioned"
entity to "route".
Repository: qpid-dispatch
Updated Branches:
refs/heads/tross-DISPATCH-179-1 27cc4020f -> dc675a38f
DISPATCH-179 - Renamed "provisioned" entity to "route".
Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/43e3a49e
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/43e3a49e
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/43e3a49e
Branch: refs/heads/tross-DISPATCH-179-1
Commit: 43e3a49e1ea2aeeac99c0ec99e34a6dfe9717728
Parents: 27cc402
Author: Ted Ross <tr...@redhat.com>
Authored: Fri Feb 26 16:33:24 2016 -0500
Committer: Ted Ross <tr...@redhat.com>
Committed: Fri Feb 26 16:33:24 2016 -0500
----------------------------------------------------------------------
include/qpid/dispatch/router_core.h | 2 +-
src/CMakeLists.txt | 2 +-
src/router_config.c | 63 +++---
src/router_core/DESIGN | 2 +-
src/router_core/agent.c | 18 +-
src/router_core/agent_provisioned.c | 344 -----------------------------
src/router_core/agent_provisioned.h | 35 ---
src/router_core/agent_route.c | 344 +++++++++++++++++++++++++++++
src/router_core/agent_route.h | 35 +++
src/router_core/management_agent.c | 6 +-
src/router_core/router_core.c | 2 +-
src/router_core/router_core_private.h | 22 +-
12 files changed, 439 insertions(+), 436 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/43e3a49e/include/qpid/dispatch/router_core.h
----------------------------------------------------------------------
diff --git a/include/qpid/dispatch/router_core.h b/include/qpid/dispatch/router_core.h
index 89b5e6f..602e67c 100644
--- a/include/qpid/dispatch/router_core.h
+++ b/include/qpid/dispatch/router_core.h
@@ -542,7 +542,7 @@ qd_message_t *qdr_delivery_message(const qdr_delivery_t *delivery);
******************************************************************************
*/
typedef enum {
- QD_ROUTER_PROVISIONED,
+ QD_ROUTER_ROUTE,
QD_ROUTER_CONNECTION,
QD_ROUTER_LINK,
QD_ROUTER_ADDRESS,
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/43e3a49e/src/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index c85b08b..f74babe 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -68,7 +68,7 @@ set(qpid_dispatch_SOURCES
router_core/agent_address.c
router_core/agent_waypoint.c
router_core/agent_link.c
- router_core/agent_provisioned.c
+ router_core/agent_route.c
router_core/connections.c
router_core/error.c
router_core/forwarder.c
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/43e3a49e/src/router_config.c
----------------------------------------------------------------------
diff --git a/src/router_config.c b/src/router_config.c
index 9064c2e..40453fd 100644
--- a/src/router_config.c
+++ b/src/router_config.c
@@ -30,50 +30,48 @@
qd_error_t qd_router_configure_address(qd_router_t *router, qd_entity_t *entity)
{
qd_error_clear();
- int phase = qd_entity_opt_long(entity, "phase", 0); QD_ERROR_RET();
- qd_schema_fixedAddress_fanout_t fanout = qd_entity_get_long(entity, "fanout"); QD_ERROR_RET();
- qd_schema_fixedAddress_bias_t bias = qd_entity_get_long(entity, "bias"); QD_ERROR_RET();
- char *prefix = qd_entity_get_string(entity, "prefix"); QD_ERROR_RET();
-
- if (phase < 0 || phase > 9) {
- qd_error_t err = qd_error(QD_ERROR_CONFIG,
- "Invalid phase %d for prefix '%s' must be between 0 and 9. Ignoring", phase, prefix);
+ int phase = qd_entity_opt_long(entity, "phase", -1); QD_ERROR_RET();
+ qd_schema_fixedAddress_fanout_t fanout = qd_entity_get_long(entity, "fanout"); QD_ERROR_RET();
+ qd_schema_fixedAddress_bias_t bias = qd_entity_get_long(entity, "bias"); QD_ERROR_RET();
+ char *prefix = qd_entity_get_string(entity, "prefix"); QD_ERROR_RET();
+
+ if (phase != -1) {
+ qd_log(router->log_source, QD_LOG_WARNING,
+ "Address phases deprecated: Ignoring address configuration for '%s', phase %d", prefix, phase);
free(prefix);
- return err;
+ return qd_error_code();
}
if (prefix[0] == '/' && prefix[1] == '\0') {
qd_log(router->log_source, QD_LOG_WARNING, "Ignoring address configuration for '/'");
+ free(prefix);
return qd_error_code();
}
//
// Convert fanout + bias to semantics
//
- const char *sem;
+ const char *trt;
if (fanout == QD_SCHEMA_FIXEDADDRESS_FANOUT_MULTIPLE)
- sem = "multi";
+ trt = "multicast";
else {
if (bias == QD_SCHEMA_FIXEDADDRESS_BIAS_CLOSEST)
- sem = "anyClosest";
+ trt = "closest";
else
- sem = "anyBalanced";
+ trt = "balanced";
}
//
- // Formulate this configuration as a router.provisioned and create it through the core management API.
+ // Formulate this configuration as a router.route and create it through the core management API.
//
qd_composed_field_t *body = qd_compose_subfield(0);
qd_compose_start_map(body);
- qd_compose_insert_string(body, "objectType");
- qd_compose_insert_string(body, "address");
-
qd_compose_insert_string(body, "address");
qd_compose_insert_string(body, prefix);
- qd_compose_insert_string(body, "semantics");
- qd_compose_insert_string(body, sem);
+ qd_compose_insert_string(body, "treatment");
+ qd_compose_insert_string(body, trt);
qd_compose_end_map(body);
int length = 0;
@@ -91,7 +89,7 @@ qd_error_t qd_router_configure_address(qd_router_t *router, qd_entity_t *entity)
qd_field_iterator_t *iter = qd_field_iterator_buffer(DEQ_HEAD(buffers), 0, length);
qd_parsed_field_t *in_body = qd_parse(iter);
- qdr_manage_create(router->router_core, 0, QD_ROUTER_PROVISIONED, 0, in_body, 0);
+ qdr_manage_create(router->router_core, 0, QD_ROUTER_ROUTE, 0, in_body, 0);
free(prefix);
return qd_error_code();
@@ -132,23 +130,28 @@ qd_error_t qd_router_configure_waypoint(qd_router_t *router, qd_entity_t *entity
qd_error_t qd_router_configure_lrp(qd_router_t *router, qd_entity_t *entity)
{
- char *prefix = qd_entity_get_string(entity, "prefix"); QD_ERROR_RET();
+ char *prefix = qd_entity_get_string(entity, "prefix"); QD_ERROR_RET();
char *connector = qd_entity_get_string(entity, "connector"); QD_ERROR_RET();
- char *direction = qd_entity_get_string(entity, "dir"); QD_ERROR_RET();
+ char *direction = qd_entity_get_string(entity, "dir"); QD_ERROR_RET();
//
- // Formulate this configuration as a router.provisioned and create it through the core management API.
+ // Formulate this configuration as a router.route and create it through the core management API.
//
qd_composed_field_t *body = qd_compose_subfield(0);
qd_compose_start_map(body);
- qd_compose_insert_string(body, "objectType");
- qd_compose_insert_string(body, "linkDestination");
-
qd_compose_insert_string(body, "address");
qd_compose_insert_string(body, prefix);
- qd_compose_insert_string(body, "direction");
- qd_compose_insert_string(body, direction);
+ qd_compose_insert_string(body, "path");
+ if (strcmp("in", direction) == 0)
+ qd_compose_insert_string(body, "sink");
+ else if (strcmp("out", direction) == 0)
+ qd_compose_insert_string(body, "source");
+ else
+ qd_compose_insert_string(body, "waypoint");
+
+ qd_compose_insert_string(body, "treatment");
+ qd_compose_insert_string(body, "linkBalanced");
qd_compose_end_map(body);
int length = 0;
@@ -163,10 +166,10 @@ qd_error_t qd_router_configure_lrp(qd_router_t *router, qd_entity_t *entity)
buf = DEQ_NEXT(buf);
}
- qd_field_iterator_t *iter = qd_field_iterator_buffer(DEQ_HEAD(buffers), 0, length);
+ qd_field_iterator_t *iter = qd_field_iterator_buffer(DEQ_HEAD(buffers), 0, length);
qd_parsed_field_t *in_body = qd_parse(iter);
- qdr_manage_create(router->router_core, 0, QD_ROUTER_PROVISIONED, 0, in_body, 0);
+ qdr_manage_create(router->router_core, 0, QD_ROUTER_ROUTE, 0, in_body, 0);
free(prefix);
free(connector);
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/43e3a49e/src/router_core/DESIGN
----------------------------------------------------------------------
diff --git a/src/router_core/DESIGN b/src/router_core/DESIGN
index c320976..5197a2f 100644
--- a/src/router_core/DESIGN
+++ b/src/router_core/DESIGN
@@ -253,7 +253,7 @@ org
address
link
node
- provisioned (proposed)
+ route (proposed)
waypoint (proposed)
waypoint (deprecated)
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/43e3a49e/src/router_core/agent.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent.c b/src/router_core/agent.c
index b5b9fc6..b0c5381 100644
--- a/src/router_core/agent.c
+++ b/src/router_core/agent.c
@@ -18,7 +18,7 @@
*/
#include <qpid/dispatch/amqp.h>
-#include "agent_provisioned.h"
+#include "agent_route.h"
#include "agent_address.h"
#include "agent_waypoint.h"
#include "agent_link.h"
@@ -173,8 +173,8 @@ qdr_query_t *qdr_manage_query(qdr_core_t *core,
qdr_query_t* query = qdr_query(core, context, type, attribute_names, body);
switch (query->entity_type) {
- case QD_ROUTER_PROVISIONED:
- qdr_agent_set_columns(query, attribute_names, qdr_provisioned_columns, QDR_PROVISIONED_COLUMN_COUNT);
+ case QD_ROUTER_ROUTE:
+ qdr_agent_set_columns(query, attribute_names, qdr_route_columns, QDR_ROUTE_COLUMN_COUNT);
break;
case QD_ROUTER_CONNECTION:
@@ -205,7 +205,7 @@ qdr_query_t *qdr_manage_query(qdr_core_t *core,
void qdr_query_add_attribute_names(qdr_query_t *query)
{
switch (query->entity_type) {
- case QD_ROUTER_PROVISIONED: qdr_agent_emit_columns(query, qdr_provisioned_columns, QDR_PROVISIONED_COLUMN_COUNT); break;
+ case QD_ROUTER_ROUTE: qdr_agent_emit_columns(query, qdr_route_columns, QDR_ROUTE_COLUMN_COUNT); break;
case QD_ROUTER_CONNECTION: break;
case QD_ROUTER_LINK: qdr_agent_emit_columns(query, qdr_link_columns, QDR_LINK_COLUMN_COUNT); break;
case QD_ROUTER_ADDRESS: qdr_agent_emit_columns(query, qdr_address_columns, QDR_ADDRESS_COLUMN_COUNT); break;
@@ -318,7 +318,7 @@ static void qdr_manage_read_CT(qdr_core_t *core, qdr_action_t *action, bool disc
qdr_query_t *query = action->args.agent.query;
switch (query->entity_type) {
- case QD_ROUTER_PROVISIONED: break;
+ case QD_ROUTER_ROUTE: break;
case QD_ROUTER_CONNECTION: break;
case QD_ROUTER_LINK: break;
case QD_ROUTER_ADDRESS: qdra_address_get_CT(core, name, identity, query, qdr_address_columns); break;
@@ -336,7 +336,7 @@ static void qdr_manage_create_CT(qdr_core_t *core, qdr_action_t *action, bool di
qd_parsed_field_t *in_body = action->args.agent.in_body;
switch (query->entity_type) {
- case QD_ROUTER_PROVISIONED: qdra_provisioned_create_CT(core, name, query, in_body); break;
+ case QD_ROUTER_ROUTE: qdra_route_create_CT(core, name, query, in_body); break;
case QD_ROUTER_CONNECTION: break;
case QD_ROUTER_LINK: break;
case QD_ROUTER_ADDRESS: break;
@@ -354,7 +354,7 @@ static void qdr_manage_delete_CT(qdr_core_t *core, qdr_action_t *action, bool di
qdr_query_t *query = action->args.agent.query;
switch (query->entity_type) {
- case QD_ROUTER_PROVISIONED: break;
+ case QD_ROUTER_ROUTE: break;
case QD_ROUTER_CONNECTION: break;
case QD_ROUTER_LINK: break;
case QD_ROUTER_ADDRESS: qdra_address_delete_CT(core, name, identity, query); break;
@@ -374,7 +374,7 @@ static void qdrh_query_get_first_CT(qdr_core_t *core, qdr_action_t *action, bool
if (!discard) {
switch (query->entity_type) {
- case QD_ROUTER_PROVISIONED: qdra_provisioned_get_first_CT(core, query, offset); break;
+ case QD_ROUTER_ROUTE: qdra_route_get_first_CT(core, query, offset); break;
case QD_ROUTER_CONNECTION: break;
case QD_ROUTER_LINK: qdra_link_get_first_CT(core, query, offset); break;
case QD_ROUTER_ADDRESS: qdra_address_get_first_CT(core, query, offset); break;
@@ -392,7 +392,7 @@ static void qdrh_query_get_next_CT(qdr_core_t *core, qdr_action_t *action, bool
if (!discard) {
switch (query->entity_type) {
- case QD_ROUTER_PROVISIONED: qdra_provisioned_get_next_CT(core, query); break;
+ case QD_ROUTER_ROUTE: qdra_route_get_next_CT(core, query); break;
case QD_ROUTER_CONNECTION: break;
case QD_ROUTER_LINK: qdra_link_get_next_CT(core, query); break;
case QD_ROUTER_ADDRESS: qdra_address_get_next_CT(core, query); break;
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/43e3a49e/src/router_core/agent_provisioned.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent_provisioned.c b/src/router_core/agent_provisioned.c
deleted file mode 100644
index 5b58c7f..0000000
--- a/src/router_core/agent_provisioned.c
+++ /dev/null
@@ -1,344 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "agent_link.h"
-#include <stdio.h>
-
-#define QDR_PROV_NAME 0
-#define QDR_PROV_IDENTITY 1
-#define QDR_PROV_TYPE 2
-#define QDR_PROV_OBJECT_TYPE 3
-#define QDR_PROV_ADDRESS 4
-#define QDR_PROV_CONNECTOR 5
-#define QDR_PROV_DIRECTION 6
-#define QDR_PROV_SEMANTICS 7
-#define QDR_PROV_INGRESS_ADDRESS 8
-#define QDR_PROV_EGRESS_ADDRESS 9
-#define QDR_PROV_INGRESS_SEMANTICS 10
-#define QDR_PROV_EGRESS_SEMANTICS 11
-
-const char *qdr_provisioned_columns[] =
- {"name",
- "identity",
- "type",
- "objectType",
- "address",
- "connector",
- "direction",
- "semantics",
- "ingressAddress",
- "egressAddress",
- "ingressSemantics",
- "egressSemantics",
- 0};
-
-
-static void qdr_prov_insert_column_CT(qdr_provisioned_t *prov, int col, qd_composed_field_t *body, bool as_map)
-{
- if (as_map)
- qd_compose_insert_string(body, qdr_provisioned_columns[col]);
-
- switch(col) {
- case QDR_PROV_NAME:
- if (prov->name) {
- qd_compose_insert_string(body, prov->name);
- break;
- }
- // else fall into IDENTITY
-
- case QDR_PROV_IDENTITY:
-
- case QDR_PROV_TYPE:
- qd_compose_insert_string(body, "org.apache.qpid.dispatch.router.provisioned");
- break;
-
- case QDR_PROV_OBJECT_TYPE:
- case QDR_PROV_ADDRESS:
- case QDR_PROV_CONNECTOR:
- case QDR_PROV_DIRECTION:
- case QDR_PROV_SEMANTICS:
- case QDR_PROV_INGRESS_ADDRESS:
- case QDR_PROV_EGRESS_ADDRESS:
- case QDR_PROV_INGRESS_SEMANTICS:
- case QDR_PROV_EGRESS_SEMANTICS:
- default:
- qd_compose_insert_null(body);
- break;
- }
-}
-
-
-static void qdr_agent_write_prov_CT(qdr_query_t *query, qdr_provisioned_t *prov)
-{
- qd_composed_field_t *body = query->body;
-
- qd_compose_start_list(body);
- int i = 0;
- while (query->columns[i] >= 0) {
- qdr_prov_insert_column_CT(prov, query->columns[i], body, false);
- i++;
- }
- qd_compose_end_list(body);
-}
-
-static void qdr_manage_advance_prov_CT(qdr_query_t *query, qdr_provisioned_t *prov)
-{
- query->next_offset++;
- prov = DEQ_NEXT(prov);
- query->more = !!prov;
-}
-
-
-void qdra_provisioned_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset)
-{
- //
- // Queries that get this far will always succeed.
- //
- query->status = &QD_AMQP_OK;
-
- //
- // If the offset goes beyond the set of objects, end the query now.
- //
- if (offset >= DEQ_SIZE(core->provisioned)) {
- query->more = false;
- qdr_agent_enqueue_response_CT(core, query);
- return;
- }
-
- //
- // Run to the object at the offset.
- //
- qdr_provisioned_t *prov = DEQ_HEAD(core->provisioned);
- for (int i = 0; i < offset && prov; i++)
- prov = DEQ_NEXT(prov);
- assert(prov);
-
- //
- // Write the columns of the object into the response body.
- //
- qdr_agent_write_prov_CT(query, prov);
-
- //
- // Advance to the next address
- //
- query->next_offset = offset;
- qdr_manage_advance_prov_CT(query, prov);
-
- //
- // Enqueue the response.
- //
- qdr_agent_enqueue_response_CT(core, query);
-}
-
-
-void qdra_provisioned_get_next_CT(qdr_core_t *core, qdr_query_t *query)
-{
- qdr_provisioned_t *prov = 0;
-
- if (query->next_offset < DEQ_SIZE(core->provisioned)) {
- prov = DEQ_HEAD(core->provisioned);
- for (int i = 0; i < query->next_offset && prov; i++)
- prov = DEQ_NEXT(prov);
- }
-
- if (prov) {
- //
- // Write the columns of the provisioned entity into the response body.
- //
- qdr_agent_write_prov_CT(query, prov);
-
- //
- // Advance to the next object
- //
- qdr_manage_advance_prov_CT(query, prov);
- } else
- query->more = false;
-
- //
- // Enqueue the response.
- //
- qdr_agent_enqueue_response_CT(core, query);
-}
-
-
-static qd_address_semantics_t qdra_semantics(qd_parsed_field_t *field)
-{
- if (field) {
- qd_field_iterator_t *iter = qd_parse_raw(field);
- if (qd_field_iterator_equal(iter, (unsigned char*) "multi")) return QD_SEMANTICS_MULTICAST_ONCE;
- if (qd_field_iterator_equal(iter, (unsigned char*) "anyClosest")) return QD_SEMANTICS_ANYCAST_CLOSEST;
- if (qd_field_iterator_equal(iter, (unsigned char*) "anyBalanced")) return QD_SEMANTICS_ANYCAST_BALANCED;
- }
- return QD_SEMANTICS_ANYCAST_BALANCED;
-}
-
-
-static qdr_address_config_t *qdra_configure_address_prefix_CT(qdr_core_t *core, qd_parsed_field_t *addr_field, char cls,
- qd_address_semantics_t semantics)
-{
- if (!addr_field)
- return 0;
-
- qd_field_iterator_t *iter = qd_parse_raw(addr_field);
- qd_address_iterator_override_prefix(iter, cls);
- qd_address_iterator_reset_view(iter, ITER_VIEW_ADDRESS_HASH);
-
- qdr_address_config_t *addr = 0;
- qd_hash_retrieve(core->addr_hash, iter, (void**) &addr);
- if (addr) {
- // Log error TODO
- return 0;
- }
-
- addr = new_qdr_address_config_t();
- DEQ_ITEM_INIT(addr);
- addr->semantics = semantics;
-
- if (!!addr) {
- qd_field_iterator_reset(iter);
- qd_hash_insert(core->addr_hash, iter, addr, &addr->hash_handle);
- DEQ_INSERT_TAIL(core->addr_config, addr);
- }
-
- return addr;
-}
-
-
-static qdr_address_t *qdra_configure_address_CT(qdr_core_t *core, qd_parsed_field_t *addr_field, char cls,
- qd_address_semantics_t semantics)
-{
- if (!addr_field)
- return 0;
-
- qd_field_iterator_t *iter = qd_parse_raw(addr_field);
- qd_address_iterator_override_prefix(iter, cls);
- qd_address_iterator_reset_view(iter, ITER_VIEW_ADDRESS_HASH);
-
- qdr_address_t *addr = 0;
- qd_hash_retrieve(core->addr_hash, iter, (void**) &addr);
- if (addr) {
- // Log error TODO
- return 0;
- }
-
- addr = qdr_address_CT(core, semantics);
-
- if (!!addr) {
- qd_field_iterator_reset(iter);
- qd_hash_insert(core->addr_hash, iter, addr, &addr->hash_handle);
- DEQ_INSERT_TAIL(core->addrs, addr);
- }
-
- return addr;
-}
-
-
-void qdra_provisioned_create_CT(qdr_core_t *core, qd_field_iterator_t *name,
- qdr_query_t *query, qd_parsed_field_t *in_body)
-{
- // TODO - reject duplicate names
-
- if (qd_parse_is_map(in_body)) {
- qd_parsed_field_t *type_field = qd_parse_value_by_key(in_body, qdr_provisioned_columns[QDR_PROV_OBJECT_TYPE]);
- qd_parsed_field_t *addr_field = qd_parse_value_by_key(in_body, qdr_provisioned_columns[QDR_PROV_ADDRESS]);
- qd_parsed_field_t *conn_field = qd_parse_value_by_key(in_body, qdr_provisioned_columns[QDR_PROV_CONNECTOR]);
- qd_parsed_field_t *dir_field = qd_parse_value_by_key(in_body, qdr_provisioned_columns[QDR_PROV_DIRECTION]);
- qd_parsed_field_t *sem_field = qd_parse_value_by_key(in_body, qdr_provisioned_columns[QDR_PROV_SEMANTICS]);
- //qd_parsed_field_t *in_addr_field = qd_parse_value_by_key(in_body, qdr_provisioned_columns[QDR_PROV_INGRESS_ADDRESS]);
- //qd_parsed_field_t *out_addr_field = qd_parse_value_by_key(in_body, qdr_provisioned_columns[QDR_PROV_EGRESS_ADDRESS]);
- //qd_parsed_field_t *in_sem_field = qd_parse_value_by_key(in_body, qdr_provisioned_columns[QDR_PROV_INGRESS_SEMANTICS]);
- //qd_parsed_field_t *out_sem_field = qd_parse_value_by_key(in_body, qdr_provisioned_columns[QDR_PROV_EGRESS_SEMANTICS]);
-
- bool still_good = true;
- qdr_provisioned_t *prov = new_qdr_provisioned_t();
- ZERO(prov);
-
- prov->identity = qdr_identifier(core);
- if (name)
- prov->name = (char*) qd_field_iterator_copy(name);
-
- if (!type_field)
- prov->object_type = QDR_PROV_TYPE_ADDRESS;
- else {
- qd_field_iterator_t *type_iter = qd_parse_raw(type_field);
- if (qd_field_iterator_equal(type_iter, (unsigned char*) "address"))
- prov->object_type = QDR_PROV_TYPE_ADDRESS;
- else if (qd_field_iterator_equal(type_iter, (unsigned char*) "linkDestination"))
- prov->object_type = QDR_PROV_TYPE_LINK_DEST;
- else if (qd_field_iterator_equal(type_iter, (unsigned char*) "waypoint"))
- prov->object_type = QDR_PROV_TYPE_WAYPOINT;
- else
- still_good = false;
- }
-
- prov->semantics = qdra_semantics(sem_field);
-
- prov->direction_in = true;
- prov->direction_out = true;
- if (dir_field) {
- qd_field_iterator_t *dir_iter = qd_parse_raw(dir_field);
- if (qd_field_iterator_equal(dir_iter, (unsigned char*) "in"))
- prov->direction_out = false;
- if (qd_field_iterator_equal(dir_iter, (unsigned char*) "out"))
- prov->direction_in = false;
- }
-
- if (conn_field) {
- qd_field_iterator_t *conn_iter = qd_parse_raw(conn_field);
- prov->connector_label = (char*) qd_field_iterator_copy(conn_iter);
- }
-
- switch (prov->object_type) {
- case QDR_PROV_TYPE_ADDRESS:
- prov->addr_config = qdra_configure_address_prefix_CT(core, addr_field, 'Z', prov->semantics);
- break;
-
- case QDR_PROV_TYPE_LINK_DEST:
- if (prov->direction_in)
- prov->ingress_addr = qdra_configure_address_CT(core, addr_field, 'C', prov->semantics);
- if (prov->direction_out)
- prov->egress_addr = qdra_configure_address_CT(core, addr_field, 'D', prov->semantics);
- break;
-
- case QDR_PROV_TYPE_WAYPOINT:
- break;
- }
-
- if (still_good) {
- // TODO - write response map
- query->status = &QD_AMQP_CREATED;
- DEQ_INSERT_TAIL(core->provisioned, prov);
- } else {
- query->status = &QD_AMQP_BAD_REQUEST;
- if (prov->name)
- free(prov->name);
- free_qdr_provisioned_t(prov);
- }
- }
- else
- query->status = &QD_AMQP_BAD_REQUEST;
-
- //
- // Enqueue the response.
- //
- if (query->body)
- qdr_agent_enqueue_response_CT(core, query);
- else
- free_qdr_query_t(query);
-}
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/43e3a49e/src/router_core/agent_provisioned.h
----------------------------------------------------------------------
diff --git a/src/router_core/agent_provisioned.h b/src/router_core/agent_provisioned.h
deleted file mode 100644
index f97ec24..0000000
--- a/src/router_core/agent_provisioned.h
+++ /dev/null
@@ -1,35 +0,0 @@
-#ifndef qdr_agent_provisioned
-#define qdr_agent_provisioned 1
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "router_core_private.h"
-
-void qdra_provisioned_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset);
-void qdra_provisioned_get_next_CT(qdr_core_t *core, qdr_query_t *query);
-void qdra_provisioned_create_CT(qdr_core_t *core, qd_field_iterator_t *name, qdr_query_t *query, qd_parsed_field_t *in_body);
-void qdra_provisioned_update_CT(qdr_core_t *core, qdr_query_t *query, qd_parsed_field_t *in_body);
-void qdra_provisioned_delete_CT(qdr_core_t *core, qdr_query_t *query, qd_field_iterator_t *name,
- qd_field_iterator_t *identity);
-
-#define QDR_PROVISIONED_COLUMN_COUNT 12
-
-const char *qdr_provisioned_columns[QDR_PROVISIONED_COLUMN_COUNT + 1];
-
-#endif
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/43e3a49e/src/router_core/agent_route.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent_route.c b/src/router_core/agent_route.c
new file mode 100644
index 0000000..3cd9af5
--- /dev/null
+++ b/src/router_core/agent_route.c
@@ -0,0 +1,344 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include "agent_link.h"
+#include <stdio.h>
+
+#define QDR_ROUTE_NAME 0
+#define QDR_ROUTE_IDENTITY 1
+#define QDR_ROUTE_TYPE 2
+#define QDR_ROUTE_OBJECT_TYPE 3
+#define QDR_ROUTE_ADDRESS 4
+#define QDR_ROUTE_CONNECTOR 5
+#define QDR_ROUTE_DIRECTION 6
+#define QDR_ROUTE_SEMANTICS 7
+#define QDR_ROUTE_INGRESS_ADDRESS 8
+#define QDR_ROUTE_EGRESS_ADDRESS 9
+#define QDR_ROUTE_INGRESS_SEMANTICS 10
+#define QDR_ROUTE_EGRESS_SEMANTICS 11
+
+const char *qdr_route_columns[] =
+ {"name",
+ "identity",
+ "type",
+ "objectType",
+ "address",
+ "connector",
+ "direction",
+ "semantics",
+ "ingressAddress",
+ "egressAddress",
+ "ingressSemantics",
+ "egressSemantics",
+ 0};
+
+
+static void qdr_route_insert_column_CT(qdr_route_t *route, int col, qd_composed_field_t *body, bool as_map)
+{
+ if (as_map)
+ qd_compose_insert_string(body, qdr_route_columns[col]);
+
+ switch(col) {
+ case QDR_ROUTE_NAME:
+ if (route->name) {
+ qd_compose_insert_string(body, route->name);
+ break;
+ }
+ // else fall into IDENTITY
+
+ case QDR_ROUTE_IDENTITY:
+
+ case QDR_ROUTE_TYPE:
+ qd_compose_insert_string(body, "org.apache.qpid.dispatch.router.route");
+ break;
+
+ case QDR_ROUTE_OBJECT_TYPE:
+ case QDR_ROUTE_ADDRESS:
+ case QDR_ROUTE_CONNECTOR:
+ case QDR_ROUTE_DIRECTION:
+ case QDR_ROUTE_SEMANTICS:
+ case QDR_ROUTE_INGRESS_ADDRESS:
+ case QDR_ROUTE_EGRESS_ADDRESS:
+ case QDR_ROUTE_INGRESS_SEMANTICS:
+ case QDR_ROUTE_EGRESS_SEMANTICS:
+ default:
+ qd_compose_insert_null(body);
+ break;
+ }
+}
+
+
+static void qdr_agent_write_route_CT(qdr_query_t *query, qdr_route_t *route)
+{
+ qd_composed_field_t *body = query->body;
+
+ qd_compose_start_list(body);
+ int i = 0;
+ while (query->columns[i] >= 0) {
+ qdr_route_insert_column_CT(route, query->columns[i], body, false);
+ i++;
+ }
+ qd_compose_end_list(body);
+}
+
+static void qdr_manage_advance_route_CT(qdr_query_t *query, qdr_route_t *route)
+{
+ query->next_offset++;
+ route = DEQ_NEXT(route);
+ query->more = !!route;
+}
+
+
+void qdra_route_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset)
+{
+ //
+ // Queries that get this far will always succeed.
+ //
+ query->status = &QD_AMQP_OK;
+
+ //
+ // If the offset goes beyond the set of objects, end the query now.
+ //
+ if (offset >= DEQ_SIZE(core->routes)) {
+ query->more = false;
+ qdr_agent_enqueue_response_CT(core, query);
+ return;
+ }
+
+ //
+ // Run to the object at the offset.
+ //
+ qdr_route_t *route = DEQ_HEAD(core->routes);
+ for (int i = 0; i < offset && route; i++)
+ route = DEQ_NEXT(route);
+ assert(route);
+
+ //
+ // Write the columns of the object into the response body.
+ //
+ qdr_agent_write_route_CT(query, route);
+
+ //
+ // Advance to the next address
+ //
+ query->next_offset = offset;
+ qdr_manage_advance_route_CT(query, route);
+
+ //
+ // Enqueue the response.
+ //
+ qdr_agent_enqueue_response_CT(core, query);
+}
+
+
+void qdra_route_get_next_CT(qdr_core_t *core, qdr_query_t *query)
+{
+ qdr_route_t *route = 0;
+
+ if (query->next_offset < DEQ_SIZE(core->routes)) {
+ route = DEQ_HEAD(core->routes);
+ for (int i = 0; i < query->next_offset && route; i++)
+ route = DEQ_NEXT(route);
+ }
+
+ if (route) {
+ //
+ // Write the columns of the route entity into the response body.
+ //
+ qdr_agent_write_route_CT(query, route);
+
+ //
+ // Advance to the next object
+ //
+ qdr_manage_advance_route_CT(query, route);
+ } else
+ query->more = false;
+
+ //
+ // Enqueue the response.
+ //
+ qdr_agent_enqueue_response_CT(core, query);
+}
+
+
+static qd_address_semantics_t qdra_semantics(qd_parsed_field_t *field)
+{
+ if (field) {
+ qd_field_iterator_t *iter = qd_parse_raw(field);
+ if (qd_field_iterator_equal(iter, (unsigned char*) "multi")) return QD_SEMANTICS_MULTICAST_ONCE;
+ if (qd_field_iterator_equal(iter, (unsigned char*) "anyClosest")) return QD_SEMANTICS_ANYCAST_CLOSEST;
+ if (qd_field_iterator_equal(iter, (unsigned char*) "anyBalanced")) return QD_SEMANTICS_ANYCAST_BALANCED;
+ }
+ return QD_SEMANTICS_ANYCAST_BALANCED;
+}
+
+
+static qdr_address_config_t *qdra_configure_address_prefix_CT(qdr_core_t *core, qd_parsed_field_t *addr_field, char cls,
+ qd_address_semantics_t semantics)
+{
+ if (!addr_field)
+ return 0;
+
+ qd_field_iterator_t *iter = qd_parse_raw(addr_field);
+ qd_address_iterator_override_prefix(iter, cls);
+ qd_address_iterator_reset_view(iter, ITER_VIEW_ADDRESS_HASH);
+
+ qdr_address_config_t *addr = 0;
+ qd_hash_retrieve(core->addr_hash, iter, (void**) &addr);
+ if (addr) {
+ // Log error TODO
+ return 0;
+ }
+
+ addr = new_qdr_address_config_t();
+ DEQ_ITEM_INIT(addr);
+ addr->semantics = semantics;
+
+ if (!!addr) {
+ qd_field_iterator_reset(iter);
+ qd_hash_insert(core->addr_hash, iter, addr, &addr->hash_handle);
+ DEQ_INSERT_TAIL(core->addr_config, addr);
+ }
+
+ return addr;
+}
+
+
+static qdr_address_t *qdra_configure_address_CT(qdr_core_t *core, qd_parsed_field_t *addr_field, char cls,
+ qd_address_semantics_t semantics)
+{
+ if (!addr_field)
+ return 0;
+
+ qd_field_iterator_t *iter = qd_parse_raw(addr_field);
+ qd_address_iterator_override_prefix(iter, cls);
+ qd_address_iterator_reset_view(iter, ITER_VIEW_ADDRESS_HASH);
+
+ qdr_address_t *addr = 0;
+ qd_hash_retrieve(core->addr_hash, iter, (void**) &addr);
+ if (addr) {
+ // Log error TODO
+ return 0;
+ }
+
+ addr = qdr_address_CT(core, semantics);
+
+ if (!!addr) {
+ qd_field_iterator_reset(iter);
+ qd_hash_insert(core->addr_hash, iter, addr, &addr->hash_handle);
+ DEQ_INSERT_TAIL(core->addrs, addr);
+ }
+
+ return addr;
+}
+
+
+void qdra_route_create_CT(qdr_core_t *core, qd_field_iterator_t *name,
+ qdr_query_t *query, qd_parsed_field_t *in_body)
+{
+ // TODO - reject duplicate names
+
+ if (qd_parse_is_map(in_body)) {
+ qd_parsed_field_t *type_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_OBJECT_TYPE]);
+ qd_parsed_field_t *addr_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_ADDRESS]);
+ qd_parsed_field_t *conn_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_CONNECTOR]);
+ qd_parsed_field_t *dir_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_DIRECTION]);
+ qd_parsed_field_t *sem_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_SEMANTICS]);
+ //qd_parsed_field_t *in_addr_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_INGRESS_ADDRESS]);
+ //qd_parsed_field_t *out_addr_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_EGRESS_ADDRESS]);
+ //qd_parsed_field_t *in_sem_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_INGRESS_SEMANTICS]);
+ //qd_parsed_field_t *out_sem_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_EGRESS_SEMANTICS]);
+
+ bool still_good = true;
+ qdr_route_t *route = new_qdr_route_t();
+ ZERO(route);
+
+ route->identity = qdr_identifier(core);
+ if (name)
+ route->name = (char*) qd_field_iterator_copy(name);
+
+ if (!type_field)
+ route->object_type = QDR_ROUTE_TYPE_ADDRESS;
+ else {
+ qd_field_iterator_t *type_iter = qd_parse_raw(type_field);
+ if (qd_field_iterator_equal(type_iter, (unsigned char*) "address"))
+ route->object_type = QDR_ROUTE_TYPE_ADDRESS;
+ else if (qd_field_iterator_equal(type_iter, (unsigned char*) "linkDestination"))
+ route->object_type = QDR_ROUTE_TYPE_LINK_DEST;
+ else if (qd_field_iterator_equal(type_iter, (unsigned char*) "waypoint"))
+ route->object_type = QDR_ROUTE_TYPE_WAYPOINT;
+ else
+ still_good = false;
+ }
+
+ route->semantics = qdra_semantics(sem_field);
+
+ route->direction_in = true;
+ route->direction_out = true;
+ if (dir_field) {
+ qd_field_iterator_t *dir_iter = qd_parse_raw(dir_field);
+ if (qd_field_iterator_equal(dir_iter, (unsigned char*) "in"))
+ route->direction_out = false;
+ if (qd_field_iterator_equal(dir_iter, (unsigned char*) "out"))
+ route->direction_in = false;
+ }
+
+ if (conn_field) {
+ qd_field_iterator_t *conn_iter = qd_parse_raw(conn_field);
+ route->connector_label = (char*) qd_field_iterator_copy(conn_iter);
+ }
+
+ switch (route->object_type) {
+ case QDR_ROUTE_TYPE_ADDRESS:
+ route->addr_config = qdra_configure_address_prefix_CT(core, addr_field, 'Z', route->semantics);
+ break;
+
+ case QDR_ROUTE_TYPE_LINK_DEST:
+ if (route->direction_in)
+ route->ingress_addr = qdra_configure_address_CT(core, addr_field, 'C', route->semantics);
+ if (route->direction_out)
+ route->egress_addr = qdra_configure_address_CT(core, addr_field, 'D', route->semantics);
+ break;
+
+ case QDR_ROUTE_TYPE_WAYPOINT:
+ break;
+ }
+
+ if (still_good) {
+ // TODO - write response map
+ query->status = &QD_AMQP_CREATED;
+ DEQ_INSERT_TAIL(core->routes, route);
+ } else {
+ query->status = &QD_AMQP_BAD_REQUEST;
+ if (route->name)
+ free(route->name);
+ free_qdr_route_t(route);
+ }
+ }
+ else
+ query->status = &QD_AMQP_BAD_REQUEST;
+
+ //
+ // Enqueue the response.
+ //
+ if (query->body)
+ qdr_agent_enqueue_response_CT(core, query);
+ else
+ free_qdr_query_t(query);
+}
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/43e3a49e/src/router_core/agent_route.h
----------------------------------------------------------------------
diff --git a/src/router_core/agent_route.h b/src/router_core/agent_route.h
new file mode 100644
index 0000000..86ec69c
--- /dev/null
+++ b/src/router_core/agent_route.h
@@ -0,0 +1,35 @@
+#ifndef qdr_agent_route
+#define qdr_agent_route 1
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include "router_core_private.h"
+
+void qdra_route_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset);
+void qdra_route_get_next_CT(qdr_core_t *core, qdr_query_t *query);
+void qdra_route_create_CT(qdr_core_t *core, qd_field_iterator_t *name, qdr_query_t *query, qd_parsed_field_t *in_body);
+void qdra_route_update_CT(qdr_core_t *core, qdr_query_t *query, qd_parsed_field_t *in_body);
+void qdra_route_delete_CT(qdr_core_t *core, qdr_query_t *query, qd_field_iterator_t *name,
+ qd_field_iterator_t *identity);
+
+#define QDR_ROUTE_COLUMN_COUNT 12
+
+const char *qdr_route_columns[QDR_ROUTE_COLUMN_COUNT + 1];
+
+#endif
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/43e3a49e/src/router_core/management_agent.c
----------------------------------------------------------------------
diff --git a/src/router_core/management_agent.c b/src/router_core/management_agent.c
index 76d25bc..e8823b4 100644
--- a/src/router_core/management_agent.c
+++ b/src/router_core/management_agent.c
@@ -39,7 +39,7 @@ const char *identity_key = "identity";
const char *operation_type_key = "operation";
const char *attribute_names_key = "attributeNames";
-const unsigned char *provisioned_entity_type = (unsigned char*) "org.apache.qpid.dispatch.router.provisioned";
+const unsigned char *route_entity_type = (unsigned char*) "org.apache.qpid.dispatch.router.route";
const unsigned char *waypoint_entity_type = (unsigned char*) "org.apache.qpid.dispatch.waypoint";
const unsigned char *address_entity_type = (unsigned char*) "org.apache.qpid.dispatch.router.address";
const unsigned char *link_entity_type = (unsigned char*) "org.apache.qpid.dispatch.router.link";
@@ -358,8 +358,8 @@ static bool qd_can_handle_request(qd_field_iterator_t *props,
*entity_type = QD_ROUTER_LINK;
else if (qd_field_iterator_equal(qd_parse_raw(parsed_field), waypoint_entity_type))
*entity_type = QD_ROUTER_WAYPOINT;
- else if (qd_field_iterator_equal(qd_parse_raw(parsed_field), provisioned_entity_type))
- *entity_type = QD_ROUTER_PROVISIONED;
+ else if (qd_field_iterator_equal(qd_parse_raw(parsed_field), route_entity_type))
+ *entity_type = QD_ROUTER_ROUTE;
else
return false;
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/43e3a49e/src/router_core/router_core.c
----------------------------------------------------------------------
diff --git a/src/router_core/router_core.c b/src/router_core/router_core.c
index e6fe86c..82f3408 100644
--- a/src/router_core/router_core.c
+++ b/src/router_core/router_core.c
@@ -30,7 +30,7 @@ ALLOC_DEFINE(qdr_link_t);
ALLOC_DEFINE(qdr_router_ref_t);
ALLOC_DEFINE(qdr_link_ref_t);
ALLOC_DEFINE(qdr_general_work_t);
-ALLOC_DEFINE(qdr_provisioned_t);
+ALLOC_DEFINE(qdr_route_t);
static void qdr_general_handler(void *context);
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/43e3a49e/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 e8d1508..c6307d3 100644
--- a/src/router_core/router_core_private.h
+++ b/src/router_core/router_core_private.h
@@ -33,7 +33,7 @@ typedef struct qdr_link_ref_t qdr_link_ref_t;
typedef struct qdr_lrp_t qdr_lrp_t;
typedef struct qdr_lrp_ref_t qdr_lrp_ref_t;
typedef struct qdr_forwarder_t qdr_forwarder_t;
-typedef struct qdr_provisioned_t qdr_provisioned_t;
+typedef struct qdr_route_t qdr_route_t;
qdr_forwarder_t *qdr_forwarder_CT(qdr_core_t *core, qd_address_semantics_t semantics);
int qdr_forward_message_CT(qdr_core_t *core, qdr_address_t *addr, qd_message_t *msg, qdr_delivery_t *in_delivery,
@@ -398,16 +398,16 @@ ALLOC_DECLARE(qdr_connection_t);
DEQ_DECLARE(qdr_connection_t, qdr_connection_list_t);
typedef enum {
- QDR_PROV_TYPE_ADDRESS,
- QDR_PROV_TYPE_LINK_DEST,
- QDR_PROV_TYPE_WAYPOINT
-} qdr_provisioned_type_t;
+ QDR_ROUTE_TYPE_ADDRESS,
+ QDR_ROUTE_TYPE_LINK_DEST,
+ QDR_ROUTE_TYPE_WAYPOINT
+} qdr_route_type_t;
-struct qdr_provisioned_t {
- DEQ_LINKS(qdr_provisioned_t);
+struct qdr_route_t {
+ DEQ_LINKS(qdr_route_t);
char *name;
uint64_t identity;
- qdr_provisioned_type_t object_type;
+ qdr_route_type_t object_type;
qdr_address_config_t *addr_config;
qdr_address_t *addr;
qdr_address_t *ingress_addr;
@@ -420,8 +420,8 @@ struct qdr_provisioned_t {
char *connector_label;
};
-ALLOC_DECLARE(qdr_provisioned_t);
-DEQ_DECLARE(qdr_provisioned_t, qdr_provisioned_list_t);
+ALLOC_DECLARE(qdr_route_t);
+DEQ_DECLARE(qdr_route_t, qdr_route_list_t);
struct qdr_core_t {
@@ -437,7 +437,7 @@ struct qdr_core_t {
qdr_general_work_list_t work_list;
qd_timer_t *work_timer;
- qdr_provisioned_list_t provisioned;
+ qdr_route_list_t routes;
qdr_connection_list_t open_connections;
qdr_link_list_t open_links;
---------------------------------------------------------------------
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-228 - Added named DEQ macros
for multi-list membership.
Posted by tr...@apache.org.
DISPATCH-228 - Added named DEQ macros for multi-list membership.
Conflicts:
include/qpid/dispatch/ctools.h
Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/c72e179e
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/c72e179e
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/c72e179e
Branch: refs/heads/tross-DISPATCH-179-1
Commit: c72e179ef297d4b94ebda5c025d3eb2f87936bfe
Parents: 1dffeb6
Author: Ted Ross <tr...@redhat.com>
Authored: Mon Feb 29 15:54:22 2016 -0500
Committer: Ted Ross <tr...@redhat.com>
Committed: Mon Feb 29 15:58:34 2016 -0500
----------------------------------------------------------------------
include/qpid/dispatch/ctools.h | 128 ++++++++++++++++++++----------------
tests/tool_test.c | 56 ++++++++++++++++
2 files changed, 126 insertions(+), 58 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/c72e179e/include/qpid/dispatch/ctools.h
----------------------------------------------------------------------
diff --git a/include/qpid/dispatch/ctools.h b/include/qpid/dispatch/ctools.h
index 3ac5998..9ab1c70 100644
--- a/include/qpid/dispatch/ctools.h
+++ b/include/qpid/dispatch/ctools.h
@@ -41,134 +41,146 @@
size_t size; \
} d
-#define DEQ_LINKS(t) t *prev; t *next
+#define DEQ_LINKS_N(n,t) t *prev##n; t *next##n
+#define DEQ_LINKS(t) DEQ_LINKS_N(,t)
#define DEQ_EMPTY {0,0,0,0}
#define DEQ_INIT(d) do { (d).head = 0; (d).tail = 0; (d).scratch = 0; (d).size = 0; } while (0)
#define DEQ_IS_EMPTY(d) ((d).head == 0)
-#define DEQ_ITEM_INIT(i) do { (i)->next = 0; (i)->prev = 0; } while(0)
+#define DEQ_ITEM_INIT_N(n,i) do { (i)->next##n = 0; (i)->prev##n = 0; } while(0)
+#define DEQ_ITEM_INIT(i) DEQ_ITEM_INIT_N(,i)
#define DEQ_HEAD(d) ((d).head)
#define DEQ_TAIL(d) ((d).tail)
#define DEQ_SIZE(d) ((d).size)
-#define DEQ_NEXT(i) (i)->next
-#define DEQ_PREV(i) (i)->prev
+#define DEQ_NEXT_N(n,i) (i)->next##n
+#define DEQ_NEXT(i) DEQ_NEXT_N(,i)
+#define DEQ_PREV_N(n,i) (i)->prev##n
+#define DEQ_PREV(i) DEQ_PREV_N(,i)
#define DEQ_MOVE(d1,d2) do {d2 = d1; DEQ_INIT(d1);} while (0)
/**
*@pre ptr points to first element of deq
*@post ptr points to first element of deq that passes test, or 0. Test should involve ptr.
*/
-#define DEQ_FIND(ptr,test) while((ptr) && !(test)) ptr = DEQ_NEXT(ptr);
+#define DEQ_FIND_N(n,ptr,test) while((ptr) && !(test)) ptr = DEQ_NEXT_N(n,ptr);
+#define DEQ_FIND(ptr,test) DEQ_FIND_N(,ptr,test)
-#define DEQ_INSERT_HEAD(d,i) \
+#define DEQ_INSERT_HEAD_N(n,d,i) \
do { \
- CT_ASSERT((i)->next == 0); \
- CT_ASSERT((i)->prev == 0); \
+ CT_ASSERT((i)->next##n == 0); \
+ CT_ASSERT((i)->prev##n == 0); \
if ((d).head) { \
- (i)->next = (d).head; \
- (d).head->prev = i; \
+ (i)->next##n = (d).head; \
+ (d).head->prev##n = i; \
} else { \
(d).tail = i; \
- (i)->next = 0; \
+ (i)->next##n = 0; \
CT_ASSERT((d).size == 0); \
} \
- (i)->prev = 0; \
+ (i)->prev##n = 0; \
(d).head = i; \
(d).size++; \
} while (0)
+#define DEQ_INSERT_HEAD(d,i) DEQ_INSERT_HEAD_N(,d,i)
-#define DEQ_INSERT_TAIL(d,i) \
+#define DEQ_INSERT_TAIL_N(n,d,i) \
do { \
- CT_ASSERT((i)->next == 0); \
- CT_ASSERT((i)->prev == 0); \
+ CT_ASSERT((i)->next##n == 0); \
+ CT_ASSERT((i)->prev##n == 0); \
if ((d).tail) { \
- (i)->prev = (d).tail; \
- (d).tail->next = i; \
+ (i)->prev##n = (d).tail; \
+ (d).tail->next##n = i; \
} else { \
(d).head = i; \
- (i)->prev = 0; \
+ (i)->prev##n = 0; \
CT_ASSERT((d).size == 0); \
} \
- (i)->next = 0; \
+ (i)->next##n = 0; \
(d).tail = i; \
(d).size++; \
} while (0)
+#define DEQ_INSERT_TAIL(d,i) DEQ_INSERT_TAIL_N(,d,i)
-#define DEQ_REMOVE_HEAD(d) \
+#define DEQ_REMOVE_HEAD_N(n,d) \
do { \
CT_ASSERT((d).head); \
if ((d).head) { \
(d).scratch = (d).head; \
- (d).head = (d).head->next; \
+ (d).head = (d).head->next##n; \
if ((d).head == 0) { \
(d).tail = 0; \
CT_ASSERT((d).size == 1); \
- } else \
- (d).head->prev = 0; \
- (d).size--; \
- (d).scratch->next = 0; \
- (d).scratch->prev = 0; \
- } \
+ } else \
+ (d).head->prev##n = 0; \
+ (d).size--; \
+ (d).scratch->next##n = 0; \
+ (d).scratch->prev##n = 0; \
+ } \
} while (0)
+#define DEQ_REMOVE_HEAD(d) DEQ_REMOVE_HEAD_N(,d)
-#define DEQ_REMOVE_TAIL(d) \
+#define DEQ_REMOVE_TAIL_N(n,d) \
do { \
CT_ASSERT((d).tail); \
if ((d).tail) { \
(d).scratch = (d).tail; \
- (d).tail = (d).tail->prev; \
+ (d).tail = (d).tail->prev##n; \
if ((d).tail == 0) { \
(d).head = 0; \
CT_ASSERT((d).size == 1); \
} else \
- (d).tail->next = 0; \
+ (d).tail->next##n = 0; \
(d).size--; \
- (d).scratch->next = 0; \
- (d).scratch->prev = 0; \
+ (d).scratch->next##n = 0; \
+ (d).scratch->prev##n = 0; \
} \
} while (0)
-
-#define DEQ_INSERT_AFTER(d,i,a) \
-do { \
- CT_ASSERT((i)->next == 0); \
- CT_ASSERT((i)->prev == 0); \
- CT_ASSERT(a); \
- if ((a)->next) \
- (a)->next->prev = (i); \
- else \
- (d).tail = (i); \
- (i)->next = (a)->next; \
- (i)->prev = (a); \
- (a)->next = (i); \
- (d).size++; \
+#define DEQ_REMOVE_TAIL(d) DEQ_REMOVE_TAIL_N(,d)
+
+#define DEQ_INSERT_AFTER_N(n,d,i,a) \
+do { \
+ CT_ASSERT((i)->next##n == 0); \
+ CT_ASSERT((i)->prev##n == 0); \
+ CT_ASSERT(a); \
+ if ((a)->next##n) \
+ (a)->next##n->prev##n = (i); \
+ else \
+ (d).tail = (i); \
+ (i)->next##n = (a)->next##n; \
+ (i)->prev##n = (a); \
+ (a)->next##n = (i); \
+ (d).size++; \
} while (0)
+#define DEQ_INSERT_AFTER(d,i,a) DEQ_INSERT_AFTER_N(,d,i,a)
-#define DEQ_REMOVE(d,i) \
+#define DEQ_REMOVE_N(n,d,i) \
do { \
- if ((i)->next) \
- (i)->next->prev = (i)->prev; \
+ if ((i)->next##n) \
+ (i)->next##n->prev##n = (i)->prev##n; \
else \
- (d).tail = (i)->prev; \
- if ((i)->prev) \
- (i)->prev->next = (i)->next; \
+ (d).tail = (i)->prev##n; \
+ if ((i)->prev##n) \
+ (i)->prev##n->next##n = (i)->next##n; \
else \
- (d).head = (i)->next; \
+ (d).head = (i)->next##n; \
(d).size--; \
- (i)->next = 0; \
- (i)->prev = 0; \
+ (i)->next##n = 0; \
+ (i)->prev##n = 0; \
CT_ASSERT((d).size || (!(d).head && !(d).tail)); \
} while (0)
+#define DEQ_REMOVE(d,i) DEQ_REMOVE_N(,d,i)
-#define DEQ_APPEND(d1,d2) \
+#define DEQ_APPEND_N(n,d1,d2) \
do { \
if (!(d1).head) \
(d1) = (d2); \
else if ((d2).head) { \
- (d1).tail->next = (d2).head; \
- (d2).head->prev = (d1).tail; \
+ (d1).tail->next##n = (d2).head; \
+ (d2).head->prev##n = (d1).tail; \
(d1).tail = (d2).tail; \
(d1).size += (d2).size; \
} \
DEQ_INIT(d2); \
} while (0)
+#define DEQ_APPEND(d1,d2) DEQ_APPEND_N(,d1,d2)
#endif
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/c72e179e/tests/tool_test.c
----------------------------------------------------------------------
diff --git a/tests/tool_test.c b/tests/tool_test.c
index a4ce830..4b68edc 100644
--- a/tests/tool_test.c
+++ b/tests/tool_test.c
@@ -32,6 +32,15 @@ typedef struct item_t {
DEQ_DECLARE(item_t, item_list_t);
+typedef struct multi_item_t {
+ DEQ_LINKS(struct multi_item_t);
+ DEQ_LINKS_N(second, struct multi_item_t);
+ char letter;
+} multi_item_t;
+
+DEQ_DECLARE(multi_item_t, multi_item_list_t);
+
+
static char* list_well_formed(item_list_t list, char *key)
{
item_t *ptr;
@@ -190,6 +199,52 @@ static char* test_deq_basic2(void *context)
}
+static char* test_deq_multi(void *context)
+{
+ multi_item_list_t list1;
+ multi_item_list_t list2;
+ multi_item_t item[10];
+ multi_item_t *ptr;
+ int idx;
+
+ DEQ_INIT(list1);
+ DEQ_INIT(list2);
+ if (DEQ_SIZE(list1) != 0) return "Expected zero initial size 1";
+ if (DEQ_SIZE(list2) != 0) return "Expected zero initial size 2";
+
+ for (idx = 0; idx < 10; idx++) {
+ DEQ_ITEM_INIT(&item[idx]);
+ DEQ_ITEM_INIT_N(second, &item[idx]);
+ item[idx].letter = '0' + idx;
+
+ DEQ_INSERT_TAIL(list1, &item[idx]);
+ if ((idx & 1) == 0) // even index
+ DEQ_INSERT_TAIL_N(second, list2, &item[idx]);
+ }
+
+ if (DEQ_SIZE(list1) != 10) return "Expected list 1 size to be 10";
+ if (DEQ_SIZE(list2) != 5) return "Expected list 2 size to be 5";
+
+ idx = 0;
+ while (DEQ_HEAD(list1)) {
+ ptr = DEQ_HEAD(list1);
+ DEQ_REMOVE_HEAD(list1);
+ if (ptr->letter != '0' + idx) return "Incorrect value in list 1";
+ idx++;
+ }
+
+ idx = 0;
+ while (DEQ_HEAD(list2)) {
+ ptr = DEQ_HEAD(list2);
+ DEQ_REMOVE_HEAD_N(second, list2);
+ if (ptr->letter != '0' + idx) return "Incorrect value in list 2";
+ idx += 2;
+ }
+
+ return 0;
+}
+
+
static char* test_bitmask(void *context)
{
qd_bitmask_t *bm;
@@ -257,6 +312,7 @@ int tool_tests(void)
TEST_CASE(test_deq_basic, 0);
TEST_CASE(test_deq_basic2, 0);
+ TEST_CASE(test_deq_multi, 0);
TEST_CASE(test_bitmask, 0);
return result;
---------------------------------------------------------------------
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-179 - Updated agent to
handle updated router.route entity definition.
Posted by tr...@apache.org.
DISPATCH-179 - Updated agent to handle updated router.route entity definition.
Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/dc675a38
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/dc675a38
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/dc675a38
Branch: refs/heads/tross-DISPATCH-179-1
Commit: dc675a38f24907566e9c575756e6be56ec82e0ef
Parents: c72e179
Author: Ted Ross <tr...@redhat.com>
Authored: Wed Mar 2 12:19:08 2016 -0500
Committer: Ted Ross <tr...@redhat.com>
Committed: Wed Mar 2 12:19:08 2016 -0500
----------------------------------------------------------------------
include/qpid/dispatch/router_core.h | 1 -
src/CMakeLists.txt | 2 +-
src/router_core/DESIGN | 7 +-
src/router_core/agent.c | 17 +-
src/router_core/agent_address.c | 10 +-
src/router_core/agent_link.c | 2 +-
src/router_core/agent_route.c | 315 ++++++++++++++---------------
src/router_core/agent_route.h | 2 +-
src/router_core/agent_waypoint.c | 165 ---------------
src/router_core/agent_waypoint.h | 39 ----
src/router_core/connections.c | 4 +-
src/router_core/management_agent.c | 62 +++---
src/router_core/route_control.c | 168 +++++++++++++++
src/router_core/route_control.h | 50 +++++
src/router_core/route_tables.c | 3 +-
src/router_core/router_core.c | 1 -
src/router_core/router_core_private.h | 82 +++++---
17 files changed, 488 insertions(+), 442 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dc675a38/include/qpid/dispatch/router_core.h
----------------------------------------------------------------------
diff --git a/include/qpid/dispatch/router_core.h b/include/qpid/dispatch/router_core.h
index b38022f..338c88e 100644
--- a/include/qpid/dispatch/router_core.h
+++ b/include/qpid/dispatch/router_core.h
@@ -546,7 +546,6 @@ typedef enum {
QD_ROUTER_CONNECTION,
QD_ROUTER_LINK,
QD_ROUTER_ADDRESS,
- QD_ROUTER_WAYPOINT,
QD_ROUTER_EXCHANGE,
QD_ROUTER_BINDING
} qd_router_entity_type_t;
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dc675a38/src/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index f74babe..472090d 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -66,12 +66,12 @@ set(qpid_dispatch_SOURCES
router_config.c
router_core/agent.c
router_core/agent_address.c
- router_core/agent_waypoint.c
router_core/agent_link.c
router_core/agent_route.c
router_core/connections.c
router_core/error.c
router_core/forwarder.c
+ router_core/route_control.c
router_core/router_core.c
router_core/router_core_thread.c
router_core/route_tables.c
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dc675a38/src/router_core/DESIGN
----------------------------------------------------------------------
diff --git a/src/router_core/DESIGN b/src/router_core/DESIGN
index dde7cb4..8114370 100644
--- a/src/router_core/DESIGN
+++ b/src/router_core/DESIGN
@@ -184,7 +184,7 @@ Forwarding Treatment
Transition from fanout/bias to a one-dimensional list of treatment:
- MULTICAST_FLOOD
+ MULTICAST_FLOOD (not available to users)
Messages are delivered to all subscribers via all unique paths. If there is
redundancy in the router topology, multiple copies of each message will be
@@ -257,3 +257,8 @@ org
waypoint (proposed)
waypoint (deprecated)
+
+============================
+Route Control Data Structure
+============================
+
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dc675a38/src/router_core/agent.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent.c b/src/router_core/agent.c
index b0c5381..40db041 100644
--- a/src/router_core/agent.c
+++ b/src/router_core/agent.c
@@ -20,7 +20,6 @@
#include <qpid/dispatch/amqp.h>
#include "agent_route.h"
#include "agent_address.h"
-#include "agent_waypoint.h"
#include "agent_link.h"
#include "router_core_private.h"
#include <stdio.h>
@@ -48,7 +47,7 @@ static void qdr_agent_response_handler(void *context)
sys_mutex_unlock(core->query_lock);
if (query) {
- core->agent_response_handler(query->context, query->status, query->more);
+ core->agent_response_handler(query->context, &query->status, query->more);
if (!query->more) {
if (query->next_key)
qdr_field_free(query->next_key);
@@ -70,6 +69,7 @@ void qdr_agent_enqueue_response_CT(qdr_core_t *core, qdr_query_t *query)
qd_timer_schedule(core->agent_timer, 0);
}
+
qdr_query_t *qdr_query(qdr_core_t *core,
void *context,
qd_router_entity_type_t type,
@@ -79,14 +79,12 @@ qdr_query_t *qdr_query(qdr_core_t *core,
qdr_query_t *query = new_qdr_query_t();
DEQ_ITEM_INIT(query);
+ ZERO(query);
query->core = core;
query->entity_type = type;
query->context = context;
query->body = body;
- query->next_key = 0;
- query->next_offset = 0;
query->more = false;
- query->status = 0;
return query;
}
@@ -188,9 +186,6 @@ qdr_query_t *qdr_manage_query(qdr_core_t *core,
qdr_agent_set_columns(query, attribute_names, qdr_address_columns, QDR_ADDRESS_COLUMN_COUNT);
break;
- case QD_ROUTER_WAYPOINT:
- break;
-
case QD_ROUTER_EXCHANGE:
break;
@@ -209,7 +204,6 @@ void qdr_query_add_attribute_names(qdr_query_t *query)
case QD_ROUTER_CONNECTION: break;
case QD_ROUTER_LINK: qdr_agent_emit_columns(query, qdr_link_columns, QDR_LINK_COLUMN_COUNT); break;
case QD_ROUTER_ADDRESS: qdr_agent_emit_columns(query, qdr_address_columns, QDR_ADDRESS_COLUMN_COUNT); break;
- case QD_ROUTER_WAYPOINT: break;
case QD_ROUTER_EXCHANGE: break;
case QD_ROUTER_BINDING: break;
}
@@ -322,7 +316,6 @@ static void qdr_manage_read_CT(qdr_core_t *core, qdr_action_t *action, bool disc
case QD_ROUTER_CONNECTION: break;
case QD_ROUTER_LINK: break;
case QD_ROUTER_ADDRESS: qdra_address_get_CT(core, name, identity, query, qdr_address_columns); break;
- case QD_ROUTER_WAYPOINT: break;
case QD_ROUTER_EXCHANGE: break;
case QD_ROUTER_BINDING: break;
}
@@ -340,7 +333,6 @@ static void qdr_manage_create_CT(qdr_core_t *core, qdr_action_t *action, bool di
case QD_ROUTER_CONNECTION: break;
case QD_ROUTER_LINK: break;
case QD_ROUTER_ADDRESS: break;
- case QD_ROUTER_WAYPOINT: qdra_waypoint_create_CT(core, name, query, in_body); break;
case QD_ROUTER_EXCHANGE: break;
case QD_ROUTER_BINDING: break;
}
@@ -358,7 +350,6 @@ static void qdr_manage_delete_CT(qdr_core_t *core, qdr_action_t *action, bool di
case QD_ROUTER_CONNECTION: break;
case QD_ROUTER_LINK: break;
case QD_ROUTER_ADDRESS: qdra_address_delete_CT(core, name, identity, query); break;
- case QD_ROUTER_WAYPOINT: qdra_waypoint_delete_CT(core, name, identity, query); break;
case QD_ROUTER_EXCHANGE: break;
case QD_ROUTER_BINDING: break;
}
@@ -378,7 +369,6 @@ static void qdrh_query_get_first_CT(qdr_core_t *core, qdr_action_t *action, bool
case QD_ROUTER_CONNECTION: break;
case QD_ROUTER_LINK: qdra_link_get_first_CT(core, query, offset); break;
case QD_ROUTER_ADDRESS: qdra_address_get_first_CT(core, query, offset); break;
- case QD_ROUTER_WAYPOINT: break;
case QD_ROUTER_EXCHANGE: break;
case QD_ROUTER_BINDING: break;
}
@@ -396,7 +386,6 @@ static void qdrh_query_get_next_CT(qdr_core_t *core, qdr_action_t *action, bool
case QD_ROUTER_CONNECTION: break;
case QD_ROUTER_LINK: qdra_link_get_next_CT(core, query); break;
case QD_ROUTER_ADDRESS: qdra_address_get_next_CT(core, query); break;
- case QD_ROUTER_WAYPOINT: break;
case QD_ROUTER_EXCHANGE: break;
case QD_ROUTER_BINDING: break;
}
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dc675a38/src/router_core/agent_address.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent_address.c b/src/router_core/agent_address.c
index bc008ff..1ed1614 100644
--- a/src/router_core/agent_address.c
+++ b/src/router_core/agent_address.c
@@ -185,14 +185,14 @@ void qdra_address_get_CT(qdr_core_t *core,
if (addr == 0) {
// Send back a 404
- query->status = &QD_AMQP_NOT_FOUND;
+ query->status = QD_AMQP_NOT_FOUND;
}
else {
//
// Write the columns of the address entity into the response body.
//
qdr_manage_write_address_map_CT(addr, query->body, qdr_address_columns);
- query->status = &QD_AMQP_OK;
+ query->status = QD_AMQP_OK;
}
//
@@ -208,7 +208,7 @@ void qdra_address_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset)
//
// Queries that get this far will always succeed.
//
- query->status = &QD_AMQP_OK;
+ query->status = QD_AMQP_OK;
//
// If the offset goes beyond the set of addresses, end the query now.
@@ -302,7 +302,7 @@ void qdra_address_delete_CT(qdr_core_t *core,
//TOOD - do something here
}
else {
- query->status = &QD_AMQP_BAD_REQUEST;
+ query->status = QD_AMQP_BAD_REQUEST;
success = false;
}
@@ -310,7 +310,7 @@ void qdra_address_delete_CT(qdr_core_t *core,
// TODO - Add more logic here.
if (success) {
// If the request was successful then the statusCode MUST be 204 (No Content).
- query->status = &QD_AMQP_NO_CONTENT;
+ query->status = QD_AMQP_NO_CONTENT;
}
//
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dc675a38/src/router_core/agent_link.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent_link.c b/src/router_core/agent_link.c
index 997b9e6..9eee88f 100644
--- a/src/router_core/agent_link.c
+++ b/src/router_core/agent_link.c
@@ -153,7 +153,7 @@ void qdra_link_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset)
//
// Queries that get this far will always succeed.
//
- query->status = &QD_AMQP_OK;
+ query->status = QD_AMQP_OK;
//
// If the offset goes beyond the set of links, end the query now.
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dc675a38/src/router_core/agent_route.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent_route.c b/src/router_core/agent_route.c
index af042cd..a1586c0 100644
--- a/src/router_core/agent_route.c
+++ b/src/router_core/agent_route.c
@@ -17,40 +17,37 @@
* under the License.
*/
-#include "agent_link.h"
+#include "agent_route.h"
+#include "route_control.h"
#include <stdio.h>
-#define QDR_ROUTE_NAME 0
-#define QDR_ROUTE_IDENTITY 1
-#define QDR_ROUTE_TYPE 2
-#define QDR_ROUTE_OBJECT_TYPE 3
-#define QDR_ROUTE_ADDRESS 4
-#define QDR_ROUTE_CONNECTOR 5
-#define QDR_ROUTE_DIRECTION 6
-#define QDR_ROUTE_TREATMENT 7
-#define QDR_ROUTE_INGRESS_ADDRESS 8
-#define QDR_ROUTE_EGRESS_ADDRESS 9
-#define QDR_ROUTE_INGRESS_TREATMENT 10
-#define QDR_ROUTE_EGRESS_TREATMENT 11
+#define QDR_ROUTE_NAME 0
+#define QDR_ROUTE_IDENTITY 1
+#define QDR_ROUTE_TYPE 2
+#define QDR_ROUTE_ADDRESS 3
+#define QDR_ROUTE_PATH 4
+#define QDR_ROUTE_TREATMENT 5
+#define QDR_ROUTE_CONNECTORS 6
+#define QDR_ROUTE_CONTAINERS 7
+#define QDR_ROUTE_ROUTE_ADDRESS 8
const char *qdr_route_columns[] =
{"name",
"identity",
"type",
- "objectType",
"address",
- "connector",
- "direction",
+ "path",
"treatment",
- "ingressAddress",
- "egressAddress",
- "ingressTreatment",
- "egressTreatment",
+ "connectors",
+ "containers",
+ "routeAddress",
0};
-static void qdr_route_insert_column_CT(qdr_route_t *route, int col, qd_composed_field_t *body, bool as_map)
+static void qdr_route_insert_column_CT(qdr_route_config_t *route, int col, qd_composed_field_t *body, bool as_map)
{
+ const char *text = 0;
+
if (as_map)
qd_compose_insert_string(body, qdr_route_columns[col]);
@@ -62,29 +59,55 @@ static void qdr_route_insert_column_CT(qdr_route_t *route, int col, qd_composed_
}
// else fall into IDENTITY
- case QDR_ROUTE_IDENTITY:
+ case QDR_ROUTE_IDENTITY: {
+ char id_str[100];
+ snprintf(id_str, 100, "%ld", route->identity);
+ qd_compose_insert_string(body, id_str);
+ break;
+ }
case QDR_ROUTE_TYPE:
qd_compose_insert_string(body, "org.apache.qpid.dispatch.router.route");
break;
- case QDR_ROUTE_OBJECT_TYPE:
case QDR_ROUTE_ADDRESS:
- case QDR_ROUTE_CONNECTOR:
- case QDR_ROUTE_DIRECTION:
+ if (route->addr_config)
+ qd_compose_insert_string(body, (const char*) qd_hash_key_by_handle(route->addr_config->hash_handle));
+ else
+ qd_compose_insert_null(body);
+ break;
+
+ case QDR_ROUTE_PATH:
+ switch (route->path) {
+ case QDR_ROUTE_PATH_DIRECT: text = "direct"; break;
+ case QDR_ROUTE_PATH_SOURCE: text = "source"; break;
+ case QDR_ROUTE_PATH_SINK: text = "sink"; break;
+ case QDR_ROUTE_PATH_WAYPOINT: text = "waypoint"; break;
+ }
+ qd_compose_insert_string(body, text);
+ break;
+
case QDR_ROUTE_TREATMENT:
- case QDR_ROUTE_INGRESS_ADDRESS:
- case QDR_ROUTE_EGRESS_ADDRESS:
- case QDR_ROUTE_INGRESS_TREATMENT:
- case QDR_ROUTE_EGRESS_TREATMENT:
- default:
+ switch (route->treatment) {
+ case QD_TREATMENT_MULTICAST_FLOOD:
+ case QD_TREATMENT_MULTICAST_ONCE: text = "multicast"; break;
+ case QD_TREATMENT_ANYCAST_CLOSEST: text = "closest"; break;
+ case QD_TREATMENT_ANYCAST_BALANCED: text = "balanced"; break;
+ case QD_TREATMENT_LINK_BALANCED: text = "linkBalanced"; break;
+ }
+ qd_compose_insert_string(body, text);
+ break;
+
+ case QDR_ROUTE_CONNECTORS:
+ case QDR_ROUTE_CONTAINERS:
+ case QDR_ROUTE_ROUTE_ADDRESS:
qd_compose_insert_null(body);
break;
}
}
-static void qdr_agent_write_route_CT(qdr_query_t *query, qdr_route_t *route)
+static void qdr_agent_write_route_CT(qdr_query_t *query, qdr_route_config_t *route)
{
qd_composed_field_t *body = query->body;
@@ -97,7 +120,7 @@ static void qdr_agent_write_route_CT(qdr_query_t *query, qdr_route_t *route)
qd_compose_end_list(body);
}
-static void qdr_manage_advance_route_CT(qdr_query_t *query, qdr_route_t *route)
+static void qdr_manage_advance_route_CT(qdr_query_t *query, qdr_route_config_t *route)
{
query->next_offset++;
route = DEQ_NEXT(route);
@@ -110,12 +133,12 @@ void qdra_route_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset)
//
// Queries that get this far will always succeed.
//
- query->status = &QD_AMQP_OK;
+ query->status = QD_AMQP_OK;
//
// If the offset goes beyond the set of objects, end the query now.
//
- if (offset >= DEQ_SIZE(core->routes)) {
+ if (offset >= DEQ_SIZE(core->route_config)) {
query->more = false;
qdr_agent_enqueue_response_CT(core, query);
return;
@@ -124,7 +147,7 @@ void qdra_route_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset)
//
// Run to the object at the offset.
//
- qdr_route_t *route = DEQ_HEAD(core->routes);
+ qdr_route_config_t *route = DEQ_HEAD(core->route_config);
for (int i = 0; i < offset && route; i++)
route = DEQ_NEXT(route);
assert(route);
@@ -149,13 +172,13 @@ void qdra_route_get_first_CT(qdr_core_t *core, qdr_query_t *query, int offset)
void qdra_route_get_next_CT(qdr_core_t *core, qdr_query_t *query)
{
- qdr_route_t *route = 0;
+ qdr_route_config_t *route = 0;
- if (query->next_offset < DEQ_SIZE(core->routes)) {
- route = DEQ_HEAD(core->routes);
- for (int i = 0; i < query->next_offset && route; i++)
- route = DEQ_NEXT(route);
- }
+ if (query->next_offset < DEQ_SIZE(core->route_config)) {
+ route = DEQ_HEAD(core->route_config);
+ for (int i = 0; i < query->next_offset && route; i++)
+ route = DEQ_NEXT(route);
+ }
if (route) {
//
@@ -181,129 +204,97 @@ static qd_address_treatment_t qdra_treatment(qd_parsed_field_t *field)
{
if (field) {
qd_field_iterator_t *iter = qd_parse_raw(field);
- if (qd_field_iterator_equal(iter, (unsigned char*) "multi")) return QD_TREATMENT_MULTICAST_ONCE;
- if (qd_field_iterator_equal(iter, (unsigned char*) "anyClosest")) return QD_TREATMENT_ANYCAST_CLOSEST;
- if (qd_field_iterator_equal(iter, (unsigned char*) "anyBalanced")) return QD_TREATMENT_ANYCAST_BALANCED;
+ if (qd_field_iterator_equal(iter, (unsigned char*) "multicast")) return QD_TREATMENT_MULTICAST_ONCE;
+ if (qd_field_iterator_equal(iter, (unsigned char*) "closest")) return QD_TREATMENT_ANYCAST_CLOSEST;
+ if (qd_field_iterator_equal(iter, (unsigned char*) "balanced")) return QD_TREATMENT_ANYCAST_BALANCED;
+ if (qd_field_iterator_equal(iter, (unsigned char*) "linkBalanced")) return QD_TREATMENT_LINK_BALANCED;
}
return QD_TREATMENT_ANYCAST_BALANCED;
}
-static qdr_address_config_t *qdra_configure_address_prefix_CT(qdr_core_t *core, qd_parsed_field_t *addr_field, char cls,
- qd_address_treatment_t treatment)
-{
- if (!addr_field)
- return 0;
-
- qd_field_iterator_t *iter = qd_parse_raw(addr_field);
- qd_address_iterator_override_prefix(iter, cls);
- qd_address_iterator_reset_view(iter, ITER_VIEW_ADDRESS_HASH);
-
- qdr_address_config_t *addr = 0;
- qd_hash_retrieve(core->addr_hash, iter, (void**) &addr);
- if (addr) {
- // Log error TODO
- return 0;
- }
-
- addr = new_qdr_address_config_t();
- DEQ_ITEM_INIT(addr);
- addr->treatment = treatment;
-
- if (!!addr) {
- qd_field_iterator_reset(iter);
- qd_hash_insert(core->addr_hash, iter, addr, &addr->hash_handle);
- DEQ_INSERT_TAIL(core->addr_config, addr);
- }
-
- return addr;
-}
-
-
-static qdr_address_t *qdra_configure_address_CT(qdr_core_t *core, qd_parsed_field_t *addr_field, char cls,
- qd_address_treatment_t treatment)
+void qdra_route_create_CT(qdr_core_t *core, qd_field_iterator_t *name,
+ qdr_query_t *query, qd_parsed_field_t *in_body)
{
- if (!addr_field)
- return 0;
-
- qd_field_iterator_t *iter = qd_parse_raw(addr_field);
- qd_address_iterator_override_prefix(iter, cls);
- qd_address_iterator_reset_view(iter, ITER_VIEW_ADDRESS_HASH);
-
- qdr_address_t *addr = 0;
- qd_hash_retrieve(core->addr_hash, iter, (void**) &addr);
- if (addr) {
- // Log error TODO
- return 0;
- }
+ // TODO - reject duplicate names
- addr = qdr_address_CT(core, treatment);
+ while (true) {
+ //
+ // Validation of the request occurs here. Make sure the body is a map.
+ //
+ if (!qd_parse_is_map(in_body)) {
+ query->status = QD_AMQP_BAD_REQUEST;
+ break;
+ }
- if (!!addr) {
- qd_field_iterator_reset(iter);
- qd_hash_insert(core->addr_hash, iter, addr, &addr->hash_handle);
- DEQ_INSERT_TAIL(core->addrs, addr);
- }
+ //
+ // Extract the fields from the request
+ //
+ qd_parsed_field_t *addr_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_ADDRESS]);
+ qd_parsed_field_t *path_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_PATH]);
+ qd_parsed_field_t *conn_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_CONNECTORS]);
+ qd_parsed_field_t *cont_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_CONTAINERS]);
+ qd_parsed_field_t *treatment_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_TREATMENT]);
+ qd_parsed_field_t *route_addr_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_ROUTE_ADDRESS]);
- return addr;
-}
+ //
+ // Determine the path, which defaults to Direct
+ //
+ qdr_route_path_t path = QDR_ROUTE_PATH_DIRECT;
+ if (path_field) {
+ qd_field_iterator_t *path_iter = qd_parse_raw(path_field);
+ if (qd_field_iterator_equal(path_iter, (unsigned char*) "direct"))
+ path = QDR_ROUTE_PATH_DIRECT;
+ else if (qd_field_iterator_equal(path_iter, (unsigned char*) "source"))
+ path = QDR_ROUTE_PATH_SOURCE;
+ else if (qd_field_iterator_equal(path_iter, (unsigned char*) "sink"))
+ path = QDR_ROUTE_PATH_SINK;
+ else if (qd_field_iterator_equal(path_iter, (unsigned char*) "waypoint"))
+ path = QDR_ROUTE_PATH_WAYPOINT;
+ else {
+ query->status = QD_AMQP_BAD_REQUEST;
+ break;
+ }
+ }
+ qd_address_treatment_t treatment = qdra_treatment(treatment_field);
-void qdra_route_create_CT(qdr_core_t *core, qd_field_iterator_t *name,
- qdr_query_t *query, qd_parsed_field_t *in_body)
-{
- // TODO - reject duplicate names
+ //
+ // Ask the route_control module to create the route object and put into effect any needed
+ // side effects.
+ //
+ qdr_route_config_t *route;
+ const char *error = qdr_route_create_CT(core, name, path, treatment, addr_field, route_addr_field, &route);
- if (qd_parse_is_map(in_body)) {
- qd_parsed_field_t *type_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_OBJECT_TYPE]);
- qd_parsed_field_t *addr_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_ADDRESS]);
- qd_parsed_field_t *conn_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_CONNECTOR]);
- qd_parsed_field_t *dir_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_DIRECTION]);
- qd_parsed_field_t *sem_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_TREATMENT]);
- //qd_parsed_field_t *in_addr_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_INGRESS_ADDRESS]);
- //qd_parsed_field_t *out_addr_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_EGRESS_ADDRESS]);
- //qd_parsed_field_t *in_sem_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_INGRESS_TREATMENT]);
- //qd_parsed_field_t *out_sem_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_EGRESS_TREATMENT]);
-
- bool still_good = true;
- qdr_route_t *route = new_qdr_route_t();
- ZERO(route);
-
- route->identity = qdr_identifier(core);
- if (name)
- route->name = (char*) qd_field_iterator_copy(name);
-
- if (!type_field)
- route->object_type = QDR_ROUTE_TYPE_ADDRESS;
- else {
- qd_field_iterator_t *type_iter = qd_parse_raw(type_field);
- if (qd_field_iterator_equal(type_iter, (unsigned char*) "address"))
- route->object_type = QDR_ROUTE_TYPE_ADDRESS;
- else if (qd_field_iterator_equal(type_iter, (unsigned char*) "linkDestination"))
- route->object_type = QDR_ROUTE_TYPE_LINK_DEST;
- else if (qd_field_iterator_equal(type_iter, (unsigned char*) "waypoint"))
- route->object_type = QDR_ROUTE_TYPE_WAYPOINT;
- else
- still_good = false;
+ if (error) {
+ query->status.status = 400;
+ query->status.description = error;
+ break;
}
- route->treatment = qdra_treatment(sem_field);
-
- route->direction_in = true;
- route->direction_out = true;
- if (dir_field) {
- qd_field_iterator_t *dir_iter = qd_parse_raw(dir_field);
- if (qd_field_iterator_equal(dir_iter, (unsigned char*) "in"))
- route->direction_out = false;
- if (qd_field_iterator_equal(dir_iter, (unsigned char*) "out"))
- route->direction_in = false;
+ //
+ // Add the initial list of connection labels to the route
+ //
+ if (conn_field && qd_parse_is_list(conn_field)) {
+ uint32_t count = qd_parse_sub_count(conn_field);
+ for (uint32_t i = 0; i < count; i++) {
+ qd_parsed_field_t *conn_label = qd_parse_sub_value(conn_field, i);
+ qdr_route_connection_add_CT(route, conn_label, false);
+ }
}
- if (conn_field) {
- qd_field_iterator_t *conn_iter = qd_parse_raw(conn_field);
- route->connector_label = (char*) qd_field_iterator_copy(conn_iter);
+ //
+ // Add the initial list of container IDs to the route
+ //
+ if (cont_field && qd_parse_is_list(cont_field)) {
+ uint32_t count = qd_parse_sub_count(cont_field);
+ for (uint32_t i = 0; i < count; i++) {
+ qd_parsed_field_t *cont_id = qd_parse_sub_value(cont_field, i);
+ qdr_route_connection_add_CT(route, cont_id, true);
+ }
}
+ /*
switch (route->object_type) {
case QDR_ROUTE_TYPE_ADDRESS:
route->addr_config = qdra_configure_address_prefix_CT(core, addr_field, 'Z', route->treatment);
@@ -319,26 +310,30 @@ void qdra_route_create_CT(qdr_core_t *core, qd_field_iterator_t *name,
case QDR_ROUTE_TYPE_WAYPOINT:
break;
}
+ */
- if (still_good) {
- // TODO - write response map
- query->status = &QD_AMQP_CREATED;
- DEQ_INSERT_TAIL(core->routes, route);
- } else {
- query->status = &QD_AMQP_BAD_REQUEST;
- if (route->name)
- free(route->name);
- free_qdr_route_t(route);
+ //
+ // Compose the result map for the response.
+ //
+ if (query->body) {
+ qd_compose_start_map(query->body);
+ for (int col = 0; col < QDR_ROUTE_COLUMN_COUNT; col++)
+ qdr_route_insert_column_CT(route, col, query->body, true);
+ qd_compose_end_map(query->body);
}
+
+ query->status = QD_AMQP_CREATED;
+ break;
}
- else
- query->status = &QD_AMQP_BAD_REQUEST;
//
- // Enqueue the response.
+ // Enqueue the response if there is a body. If there is no body, this is a management
+ // operation created internally by the configuration file parser.
//
- if (query->body)
+ if (query->body) {
+ if (query->status.status / 100 > 2)
+ qd_compose_insert_null(query->body);
qdr_agent_enqueue_response_CT(core, query);
- else
+ } else
free_qdr_query_t(query);
}
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dc675a38/src/router_core/agent_route.h
----------------------------------------------------------------------
diff --git a/src/router_core/agent_route.h b/src/router_core/agent_route.h
index 86ec69c..ec8d6ba 100644
--- a/src/router_core/agent_route.h
+++ b/src/router_core/agent_route.h
@@ -28,7 +28,7 @@ void qdra_route_update_CT(qdr_core_t *core, qdr_query_t *query, qd_parsed_field_
void qdra_route_delete_CT(qdr_core_t *core, qdr_query_t *query, qd_field_iterator_t *name,
qd_field_iterator_t *identity);
-#define QDR_ROUTE_COLUMN_COUNT 12
+#define QDR_ROUTE_COLUMN_COUNT 9
const char *qdr_route_columns[QDR_ROUTE_COLUMN_COUNT + 1];
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dc675a38/src/router_core/agent_waypoint.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent_waypoint.c b/src/router_core/agent_waypoint.c
deleted file mode 100644
index aa5ec37..0000000
--- a/src/router_core/agent_waypoint.c
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "agent_waypoint.h"
-
-#define QDR_WAYPOINT_NAME 0
-#define QDR_WAYPOINT_ADDRESS 1
-#define QDR_WAYPOINT_CONNECTOR 2
-#define QDR_WAYPOINT_INPHASE 3
-#define QDR_WAYPOINT_OUTPHASE 4
-#define QDR_WAYPOINT_MODE 5
-
-#define QDR_WAYPOINT_COLUMN_COUNT 6
-
-static const char *qdr_waypoint_columns[] =
- {"name",
- "address",
- "connector",
- "inPhase",
- "outPhase",
- "mode",
- 0};
-
-static void qdr_insert_waypoint_columns_CT(qd_composed_field_t *body,
- int column_index)
-{
- // TODO replace nulls with actual values.
- switch(column_index) {
- case QDR_WAYPOINT_NAME:
- qd_compose_insert_null(body);
- break;
-
- case QDR_WAYPOINT_ADDRESS:
- qd_compose_insert_null(body);
- break;
-
- case QDR_WAYPOINT_CONNECTOR:
- qd_compose_insert_null(body);
- break;
-
- case QDR_WAYPOINT_INPHASE:
- qd_compose_insert_null(body);
- break;
-
- case QDR_WAYPOINT_OUTPHASE:
- qd_compose_insert_null(body);
- break;
-
- case QDR_WAYPOINT_MODE:
- qd_compose_insert_null(body); // TEMP
- break;
-
- default:
- qd_compose_insert_null(body);
- break;
- }
-
-}
-
-static void qdr_manage_write_response_map_CT(qd_composed_field_t *body)
-{
- qd_compose_start_map(body);
-
- for(int i = 0; i < QDR_WAYPOINT_COLUMN_COUNT; i++) {
- qd_compose_insert_string(body, qdr_waypoint_columns[i]);
- qdr_insert_waypoint_columns_CT(body, i);
- }
-
- qd_compose_end_map(body);
-}
-
-void qdra_waypoint_create_CT(qdr_core_t *core,
- qd_field_iterator_t *name,
- qdr_query_t *query,
- qd_parsed_field_t *in_body)
-{
- // Get the map fields from the body
- if (qd_parse_is_map(in_body)) {
- qd_parsed_field_t *address_field = qd_parse_value_by_key(in_body, qdr_waypoint_columns[1]);
- qd_parsed_field_t *connector_field = qd_parse_value_by_key(in_body, qdr_waypoint_columns[2]);
- qd_parsed_field_t *inPhase_field = qd_parse_value_by_key(in_body, qdr_waypoint_columns[3]);
- qd_parsed_field_t *outPhase_field = qd_parse_value_by_key(in_body, qdr_waypoint_columns[4]);
- qd_parsed_field_t *mode_field = qd_parse_value_by_key(in_body, qdr_waypoint_columns[5]);
-
- if ( address_field &&
- connector_field &&
- inPhase_field &&
- outPhase_field &&
- mode_field) {
- // TODO - Add code here that would actually create a waypoint.
- // If the request was successful then the statusCode MUST be 201 (Created) and the body of the message
- // MUST consist an amqp-value section that contains a Map containing the actual attributes of the entity created
- qdr_manage_write_response_map_CT(query->body);
- query->status = &QD_AMQP_CREATED;
- }
- else {
- query->status = &QD_AMQP_BAD_REQUEST;
- }
- }
- else {
- query->status = &QD_AMQP_BAD_REQUEST;
- }
-
- //
- // Enqueue the response.
- //
- qdr_agent_enqueue_response_CT(core, query);
-
-
-}
-
-void qdra_waypoint_delete_CT(qdr_core_t *core,
- qd_field_iterator_t *name,
- qd_field_iterator_t *identity,
- qdr_query_t *query)
-{
- bool success = true;
-
- if (identity) {//If there is identity, ignore the name
- //TOOD - do something here
- }
- else if (name) {
- //TOOD - do something here
- }
- else {
- query->status = &QD_AMQP_BAD_REQUEST;
- success = false;
- }
-
-
- // TODO - Add more logic here.
- if (success) {
- // If the request was successful then the statusCode MUST be 204 (No Content).
- query->status = &QD_AMQP_NO_CONTENT;
- }
-
- //
- // Enqueue the response.
- //
- qdr_agent_enqueue_response_CT(core, query);
-}
-
-
-void qdra_waypoint_update_CT(qdr_core_t *core, qd_field_iterator_t *name, qdr_query_t *query)
-{
-
-}
-
-
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dc675a38/src/router_core/agent_waypoint.h
----------------------------------------------------------------------
diff --git a/src/router_core/agent_waypoint.h b/src/router_core/agent_waypoint.h
deleted file mode 100644
index 7abc38f..0000000
--- a/src/router_core/agent_waypoint.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef qdr_agent_waypoint
-#define qdr_agent_waypoint 1
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-#include "router_core_private.h"
-
-void qdra_waypoint_create_CT(qdr_core_t *core,
- qd_field_iterator_t *name,
- qdr_query_t *query,
- qd_parsed_field_t *in_body);
-
-void qdra_waypoint_delete_CT(qdr_core_t *core,
- qd_field_iterator_t *name,
- qd_field_iterator_t *identity,
- qdr_query_t *query);
-
-
-void qdra_waypoint_update_CT(qdr_core_t *core,
- qd_field_iterator_t *name,
- qdr_query_t *query);
-
-#endif
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dc675a38/src/router_core/connections.c
----------------------------------------------------------------------
diff --git a/src/router_core/connections.c b/src/router_core/connections.c
index 40e2aaf..37876d4 100644
--- a/src/router_core/connections.c
+++ b/src/router_core/connections.c
@@ -76,7 +76,6 @@ qdr_connection_t *qdr_connection_opened(qdr_core_t *core,
conn->user_context = 0;
conn->incoming = incoming;
conn->role = role;
- conn->label = label;
conn->strip_annotations_in = strip_annotations_in;
conn->strip_annotations_out = strip_annotations_out;
conn->mask_bit = -1;
@@ -84,7 +83,8 @@ qdr_connection_t *qdr_connection_opened(qdr_core_t *core,
DEQ_INIT(conn->work_list);
conn->work_lock = sys_mutex();
- action->args.connection.conn = conn;
+ action->args.connection.conn = conn;
+ action->args.connection.label = label;
qdr_action_enqueue(core, action);
return conn;
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dc675a38/src/router_core/management_agent.c
----------------------------------------------------------------------
diff --git a/src/router_core/management_agent.c b/src/router_core/management_agent.c
index e8823b4..2ad0249 100644
--- a/src/router_core/management_agent.c
+++ b/src/router_core/management_agent.c
@@ -52,11 +52,14 @@ const char * const status_code = "statusCode";
const char * MANAGEMENT_INTERNAL = "_local/$_management_internal";
//TODO - Move these to amqp.h
-const unsigned char *MANAGEMENT_QUERY = (unsigned char*) "QUERY";
-const unsigned char *MANAGEMENT_CREATE = (unsigned char*) "CREATE";
-const unsigned char *MANAGEMENT_READ = (unsigned char*) "READ";
-const unsigned char *MANAGEMENT_UPDATE = (unsigned char*) "UPDATE";
-const unsigned char *MANAGEMENT_DELETE = (unsigned char*) "DELETE";
+const unsigned char *MANAGEMENT_QUERY = (unsigned char*) "QUERY";
+const unsigned char *MANAGEMENT_CREATE = (unsigned char*) "CREATE";
+const unsigned char *MANAGEMENT_READ = (unsigned char*) "READ";
+const unsigned char *MANAGEMENT_UPDATE = (unsigned char*) "UPDATE";
+const unsigned char *MANAGEMENT_DELETE = (unsigned char*) "DELETE";
+const unsigned char *MANAGEMENT_ADD_CONTAINER = (unsigned char*) "ADD-CONTAINER";
+const unsigned char *MANAGEMENT_REMOVE_CONTAINER_CLEAN = (unsigned char*) "REMOVE-CONTAINER-CLEAN";
+const unsigned char *MANAGEMENT_REMOVE_CONTAINER_HARD = (unsigned char*) "REMOVE-CONTAINER-HARD";
typedef enum {
@@ -65,6 +68,9 @@ typedef enum {
QD_ROUTER_OPERATION_READ,
QD_ROUTER_OPERATION_UPDATE,
QD_ROUTER_OPERATION_DELETE,
+ QD_ROUTER_OPERATION_ADD_CONTAINER,
+ QD_ROUTER_OPERATION_REMOVE_CONTAINER_CLEAN,
+ QD_ROUTER_OPERATION_REMOVE_CONTAINER_HARD
} qd_router_operation_type_t;
@@ -153,7 +159,7 @@ static void qd_manage_response_handler(void *context, const qd_amqp_error_t *sta
qd_management_context_t *ctx = (qd_management_context_t*) context;
if (ctx->operation_type == QD_ROUTER_OPERATION_QUERY) {
- if (status == &QD_AMQP_OK) { // There is no error, proceed to conditionally call get_next
+ if (status->status / 100 == 2) { // There is no error, proceed to conditionally call get_next
if (more) {
//If there are no more rows to process or the status returned is something other than
// QD_AMQP_OK, we will close the list, send the message and
@@ -356,8 +362,6 @@ static bool qd_can_handle_request(qd_field_iterator_t *props,
*entity_type = QD_ROUTER_ADDRESS;
else if (qd_field_iterator_equal(qd_parse_raw(parsed_field), link_entity_type))
*entity_type = QD_ROUTER_LINK;
- else if (qd_field_iterator_equal(qd_parse_raw(parsed_field), waypoint_entity_type))
- *entity_type = QD_ROUTER_WAYPOINT;
else if (qd_field_iterator_equal(qd_parse_raw(parsed_field), route_entity_type))
*entity_type = QD_ROUTER_ROUTE;
else
@@ -379,6 +383,12 @@ static bool qd_can_handle_request(qd_field_iterator_t *props,
(*operation_type) = QD_ROUTER_OPERATION_UPDATE;
else if (qd_field_iterator_equal(qd_parse_raw(parsed_field), MANAGEMENT_DELETE))
(*operation_type) = QD_ROUTER_OPERATION_DELETE;
+ else if (qd_field_iterator_equal(qd_parse_raw(parsed_field), MANAGEMENT_ADD_CONTAINER) && *entity_type == QD_ROUTER_ROUTE)
+ (*operation_type) = QD_ROUTER_OPERATION_ADD_CONTAINER;
+ else if (qd_field_iterator_equal(qd_parse_raw(parsed_field), MANAGEMENT_REMOVE_CONTAINER_CLEAN) && *entity_type == QD_ROUTER_ROUTE)
+ (*operation_type) = QD_ROUTER_OPERATION_REMOVE_CONTAINER_CLEAN;
+ else if (qd_field_iterator_equal(qd_parse_raw(parsed_field), MANAGEMENT_REMOVE_CONTAINER_HARD) && *entity_type == QD_ROUTER_ROUTE)
+ (*operation_type) = QD_ROUTER_OPERATION_REMOVE_CONTAINER_HARD;
else
// This is an unknown operation type. cannot be handled, return false.
return false;
@@ -423,22 +433,26 @@ void qdr_management_agent_on_message(void *context, qd_message_t *msg, int unuse
if (qd_can_handle_request(app_properties_iter, &entity_type, &operation_type, &identity_iter, &name_iter, &count, &offset)) {
switch (operation_type) {
- case QD_ROUTER_OPERATION_QUERY:
- qd_core_agent_query_handler(core, entity_type, operation_type, msg, &count, &offset);
- break;
- case QD_ROUTER_OPERATION_CREATE:
- qd_core_agent_create_handler(core, msg, entity_type, operation_type, name_iter);
- break;
- case QD_ROUTER_OPERATION_READ:
- qd_core_agent_read_handler(core, msg, entity_type, operation_type, identity_iter, name_iter);
- break;
- case QD_ROUTER_OPERATION_UPDATE:
- qd_core_agent_update_handler();
- break;
- case QD_ROUTER_OPERATION_DELETE:
- qd_core_agent_delete_handler(core, msg, entity_type, operation_type, identity_iter, name_iter);
- break;
- }
+ case QD_ROUTER_OPERATION_QUERY:
+ qd_core_agent_query_handler(core, entity_type, operation_type, msg, &count, &offset);
+ break;
+ case QD_ROUTER_OPERATION_CREATE:
+ qd_core_agent_create_handler(core, msg, entity_type, operation_type, name_iter);
+ break;
+ case QD_ROUTER_OPERATION_READ:
+ qd_core_agent_read_handler(core, msg, entity_type, operation_type, identity_iter, name_iter);
+ break;
+ case QD_ROUTER_OPERATION_UPDATE:
+ qd_core_agent_update_handler();
+ break;
+ case QD_ROUTER_OPERATION_DELETE:
+ qd_core_agent_delete_handler(core, msg, entity_type, operation_type, identity_iter, name_iter);
+ break;
+ case QD_ROUTER_OPERATION_ADD_CONTAINER:
+ case QD_ROUTER_OPERATION_REMOVE_CONTAINER_CLEAN:
+ case QD_ROUTER_OPERATION_REMOVE_CONTAINER_HARD:
+ break;
+ }
} else {
//
// The C management agent is not going to handle this request. Forward it off to Python.
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dc675a38/src/router_core/route_control.c
----------------------------------------------------------------------
diff --git a/src/router_core/route_control.c b/src/router_core/route_control.c
new file mode 100644
index 0000000..634c1d2
--- /dev/null
+++ b/src/router_core/route_control.c
@@ -0,0 +1,168 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include "route_control.h"
+
+ALLOC_DEFINE(qdr_route_active_t);
+ALLOC_DEFINE(qdr_route_config_t);
+ALLOC_DEFINE(qdr_conn_identifier_t);
+
+
+
+static const char *qdr_configure_address_prefix_CT(qdr_core_t *core,
+ qd_parsed_field_t *addr_field,
+ char cls,
+ qd_address_treatment_t treatment,
+ qdr_address_config_t **_addr)
+{
+ if (!addr_field)
+ return "Missing address field";
+
+ qd_field_iterator_t *iter = qd_parse_raw(addr_field);
+ qd_address_iterator_override_prefix(iter, cls);
+ qd_address_iterator_reset_view(iter, ITER_VIEW_ADDRESS_HASH);
+
+ qdr_address_config_t *addr = 0;
+ qd_hash_retrieve(core->addr_hash, iter, (void**) &addr);
+ if (addr)
+ return "Address prefix conflicts with existing prefix";
+
+ addr = new_qdr_address_config_t();
+ DEQ_ITEM_INIT(addr);
+ addr->treatment = treatment;
+
+ if (!!addr) {
+ qd_field_iterator_reset(iter);
+ qd_hash_insert(core->addr_hash, iter, addr, &addr->hash_handle);
+ DEQ_INSERT_TAIL(core->addr_config, addr);
+ }
+
+ *_addr = addr;
+ return 0;
+}
+
+/*
+static const char *qdr_configure_address_CT(qdr_core_t *core,
+ qd_parsed_field_t *addr_field,
+ char cls,
+ qd_address_treatment_t treatment,
+ qdr_address_t **_addr)
+{
+ if (!addr_field)
+ return "Missing address field";
+
+ qd_field_iterator_t *iter = qd_parse_raw(addr_field);
+ qd_address_iterator_override_prefix(iter, cls);
+ qd_address_iterator_reset_view(iter, ITER_VIEW_ADDRESS_HASH);
+
+ qdr_address_t *addr = 0;
+ qd_hash_retrieve(core->addr_hash, iter, (void**) &addr);
+ if (addr)
+ return "Address conflicts with existing address";
+
+ addr = qdr_address_CT(core, treatment);
+
+ if (!!addr) {
+ qd_field_iterator_reset(iter);
+ qd_hash_insert(core->addr_hash, iter, addr, &addr->hash_handle);
+ DEQ_INSERT_TAIL(core->addrs, addr);
+ }
+
+ *_addr = addr;
+ return 0;
+}
+*/
+
+const char *qdr_route_create_CT(qdr_core_t *core,
+ qd_field_iterator_t *name,
+ qdr_route_path_t path,
+ qd_address_treatment_t treatment,
+ qd_parsed_field_t *addr_field,
+ qd_parsed_field_t *route_addr_field,
+ qdr_route_config_t **_route)
+{
+ const char *error = 0;
+
+ qdr_route_config_t *route = new_qdr_route_config_t();
+ ZERO(route);
+
+ if (name)
+ route->name = (char*) qd_field_iterator_copy(name);
+ route->identity = qdr_identifier(core);
+ route->path = path;
+ route->treatment = treatment;
+
+ switch (path) {
+ case QDR_ROUTE_PATH_DIRECT:
+ error = qdr_configure_address_prefix_CT(core, addr_field, 'Z', treatment, &route->addr_config);
+ break;
+
+ case QDR_ROUTE_PATH_SOURCE:
+ case QDR_ROUTE_PATH_SINK:
+ case QDR_ROUTE_PATH_WAYPOINT:
+ break;
+ }
+
+ if (error) {
+ if (route->name) free(route->name);
+ free_qdr_route_config_t(route);
+ } else {
+ DEQ_INSERT_TAIL(core->route_config, route);
+ *_route = route;
+ }
+
+ return error;
+}
+
+
+void qdr_route_delete_CT(qdr_route_config_t *route)
+{
+}
+
+
+void qdr_route_connection_add_CT(qdr_route_config_t *route,
+ qd_parsed_field_t *conn_id,
+ bool is_container)
+{
+}
+
+
+void qdr_route_connection_delete_CT(qdr_route_config_t *route,
+ qd_parsed_field_t *conn_id,
+ bool is_container)
+{
+}
+
+
+void qdr_route_connection_kill_CT(qdr_route_config_t *route,
+ qd_parsed_field_t *conn_id,
+ bool is_container)
+{
+}
+
+
+void qdr_route_connection_opened_CT(qdr_core_t *core, qdr_connection_t *conn)
+{
+}
+
+
+void qdr_route_connection_closed_CT(qdr_core_t *core, qdr_connection_t *conn)
+{
+}
+
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dc675a38/src/router_core/route_control.h
----------------------------------------------------------------------
diff --git a/src/router_core/route_control.h b/src/router_core/route_control.h
new file mode 100644
index 0000000..7e86721
--- /dev/null
+++ b/src/router_core/route_control.h
@@ -0,0 +1,50 @@
+#ifndef qd_router_core_route_control
+#define qd_router_core_route_control 1
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include "router_core_private.h"
+
+const char *qdr_route_create_CT(qdr_core_t *core,
+ qd_field_iterator_t *name,
+ qdr_route_path_t path,
+ qd_address_treatment_t treatment,
+ qd_parsed_field_t *addr_field,
+ qd_parsed_field_t *route_addr_field,
+ qdr_route_config_t **route);
+
+void qdr_route_delete_CT(qdr_route_config_t *route);
+
+void qdr_route_connection_add_CT(qdr_route_config_t *route,
+ qd_parsed_field_t *conn_id,
+ bool is_container);
+
+void qdr_route_connection_delete_CT(qdr_route_config_t *route,
+ qd_parsed_field_t *conn_id,
+ bool is_container);
+
+void qdr_route_connection_kill_CT(qdr_route_config_t *route,
+ qd_parsed_field_t *conn_id,
+ bool is_container);
+
+void qdr_route_connection_opened_CT(qdr_core_t *core, qdr_connection_t *conn);
+
+void qdr_route_connection_closed_CT(qdr_core_t *core, qdr_connection_t *conn);
+
+#endif
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dc675a38/src/router_core/route_tables.c
----------------------------------------------------------------------
diff --git a/src/router_core/route_tables.c b/src/router_core/route_tables.c
index db139a9..0529a84 100644
--- a/src/router_core/route_tables.c
+++ b/src/router_core/route_tables.c
@@ -171,7 +171,8 @@ void qdr_route_table_setup_CT(qdr_core_t *core)
{
DEQ_INIT(core->addrs);
DEQ_INIT(core->routers);
- core->addr_hash = qd_hash(10, 32, 0);
+ core->addr_hash = qd_hash(12, 32, 0);
+ core->conn_id_hash = qd_hash(6, 4, 0);
if (core->router_mode == QD_ROUTER_MODE_INTERIOR) {
core->hello_addr = qdr_add_local_address_CT(core, 'L', "qdhello", QD_TREATMENT_MULTICAST_FLOOD);
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dc675a38/src/router_core/router_core.c
----------------------------------------------------------------------
diff --git a/src/router_core/router_core.c b/src/router_core/router_core.c
index d4a937d..4603555 100644
--- a/src/router_core/router_core.c
+++ b/src/router_core/router_core.c
@@ -30,7 +30,6 @@ ALLOC_DEFINE(qdr_link_t);
ALLOC_DEFINE(qdr_router_ref_t);
ALLOC_DEFINE(qdr_link_ref_t);
ALLOC_DEFINE(qdr_general_work_t);
-ALLOC_DEFINE(qdr_route_t);
static void qdr_general_handler(void *context);
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/dc675a38/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 8dc2fac..e58e31d 100644
--- a/src/router_core/router_core_private.h
+++ b/src/router_core/router_core_private.h
@@ -33,7 +33,9 @@ typedef struct qdr_link_ref_t qdr_link_ref_t;
typedef struct qdr_lrp_t qdr_lrp_t;
typedef struct qdr_lrp_ref_t qdr_lrp_ref_t;
typedef struct qdr_forwarder_t qdr_forwarder_t;
-typedef struct qdr_route_t qdr_route_t;
+typedef struct qdr_route_config_t qdr_route_config_t;
+typedef struct qdr_route_active_t qdr_route_active_t;
+typedef struct qdr_conn_identifier_t qdr_conn_identifier_t;
qdr_forwarder_t *qdr_forwarder_CT(qdr_core_t *core, qd_address_treatment_t treatment);
int qdr_forward_message_CT(qdr_core_t *core, qdr_address_t *addr, qd_message_t *msg, qdr_delivery_t *in_delivery,
@@ -81,6 +83,7 @@ struct qdr_action_t {
//
struct {
qdr_connection_t *conn;
+ const char *label;
qdr_link_t *link;
qdr_delivery_t *delivery;
qd_message_t *msg;
@@ -147,7 +150,7 @@ struct qdr_query_t {
qdr_field_t *next_key;
int next_offset;
bool more;
- const qd_amqp_error_t *status;
+ qd_amqp_error_t status;
};
ALLOC_DECLARE(qdr_query_t);
@@ -383,7 +386,7 @@ struct qdr_connection_t {
void *user_context;
bool incoming;
qdr_connection_role_t role;
- const char *label;
+ qdr_conn_identifier_t *conn_id;
bool strip_annotations_in;
bool strip_annotations_out;
int mask_bit;
@@ -398,30 +401,55 @@ ALLOC_DECLARE(qdr_connection_t);
DEQ_DECLARE(qdr_connection_t, qdr_connection_list_t);
typedef enum {
- QDR_ROUTE_TYPE_ADDRESS,
- QDR_ROUTE_TYPE_LINK_DEST,
- QDR_ROUTE_TYPE_WAYPOINT
-} qdr_route_type_t;
-
-struct qdr_route_t {
- DEQ_LINKS(qdr_route_t);
- char *name;
- uint64_t identity;
- qdr_route_type_t object_type;
- qdr_address_config_t *addr_config;
- qdr_address_t *addr;
- qdr_address_t *ingress_addr;
- qdr_address_t *egress_addr;
- bool direction_in;
- bool direction_out;
- qd_address_treatment_t treatment;
- qd_address_treatment_t ingress_treatment;
- qd_address_treatment_t egress_treatment;
- char *connector_label;
+ QDR_ROUTE_PATH_DIRECT,
+ QDR_ROUTE_PATH_SOURCE,
+ QDR_ROUTE_PATH_SINK,
+ QDR_ROUTE_PATH_WAYPOINT
+} qdr_route_path_t;
+
+typedef enum {
+ QDR_ROUTE_STATE_DOWN,
+ QDR_ROUTE_STATE_UP,
+ QDR_ROUTE_STATE_QUIESCING
+} qdr_route_state_t;
+
+struct qdr_route_active_t {
+ DEQ_LINKS(qdr_route_active_t);
+ DEQ_LINKS_N(REF, qdr_route_active_t);
+ qdr_route_config_t *config;
+ qdr_conn_identifier_t *conn_id;
+ qd_direction_t dir;
+ qdr_route_state_t state;
+ qdr_link_t *link;
};
-ALLOC_DECLARE(qdr_route_t);
-DEQ_DECLARE(qdr_route_t, qdr_route_list_t);
+ALLOC_DECLARE(qdr_route_active_t);
+DEQ_DECLARE(qdr_route_active_t, qdr_route_active_list_t);
+
+struct qdr_route_config_t {
+ DEQ_LINKS(qdr_route_config_t);
+ char *name;
+ uint64_t identity;
+ qdr_route_path_t path;
+ qdr_address_config_t *addr_config;
+ qdr_address_t *addr;
+ qdr_address_t *ingress_addr;
+ qdr_address_t *egress_addr;
+ qd_address_treatment_t treatment;
+
+ qdr_route_active_list_t active_list;
+};
+
+ALLOC_DECLARE(qdr_route_config_t);
+DEQ_DECLARE(qdr_route_config_t, qdr_route_config_list_t);
+
+struct qdr_conn_identifier_t {
+ qd_hash_handle_t *hash_handle;
+ qdr_connection_t *open_connection;
+ qdr_route_active_list_t active_refs;
+};
+
+ALLOC_DECLARE(qdr_conn_identifier_t);
struct qdr_core_t {
@@ -437,7 +465,7 @@ struct qdr_core_t {
qdr_general_work_list_t work_list;
qd_timer_t *work_timer;
- qdr_route_list_t routes;
+ qdr_route_config_list_t route_config;
qdr_connection_list_t open_connections;
qdr_link_list_t open_links;
@@ -498,6 +526,8 @@ struct qdr_core_t {
uint64_t next_identifier;
sys_mutex_t *id_lock;
+ qd_hash_t *conn_id_hash;
+
qdr_forwarder_t *forwarders[QD_TREATMENT_LINK_BALANCED + 1];
};
---------------------------------------------------------------------
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-179 - Bulk rename of
"semantics" -> "treatment"
Posted by tr...@apache.org.
DISPATCH-179 - Bulk rename of "semantics" -> "treatment"
Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/1dffeb6a
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/1dffeb6a
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/1dffeb6a
Branch: refs/heads/tross-DISPATCH-179-1
Commit: 1dffeb6a7e3e6139d56fb88f7c34abfbff9c7635
Parents: 43e3a49
Author: Ted Ross <tr...@redhat.com>
Authored: Mon Feb 29 11:45:44 2016 -0500
Committer: Ted Ross <tr...@redhat.com>
Committed: Mon Feb 29 11:45:44 2016 -0500
----------------------------------------------------------------------
include/qpid/dispatch/router.h | 20 ++++----
include/qpid/dispatch/router_core.h | 2 +-
python/qpid_dispatch/management/qdrouter.json | 6 +--
.../qpid_dispatch_internal/management/agent.py | 4 +-
python/qpid_dispatch_internal/router/engine.py | 12 ++---
src/python_embedded.c | 14 +++---
src/router_config.c | 2 +-
src/router_core/DESIGN | 4 +-
src/router_core/agent_address.c | 18 +++----
src/router_core/agent_route.c | 50 ++++++++++----------
src/router_core/connections.c | 8 ++--
src/router_core/forwarder.c | 16 +++----
src/router_core/route_tables.c | 20 ++++----
src/router_core/router_core.c | 14 +++---
src/router_core/router_core_private.h | 20 ++++----
src/router_forwarders.c | 16 +++----
tools/qdstat | 12 ++---
17 files changed, 119 insertions(+), 119 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/1dffeb6a/include/qpid/dispatch/router.h
----------------------------------------------------------------------
diff --git a/include/qpid/dispatch/router.h b/include/qpid/dispatch/router.h
index 499e808..f050775 100644
--- a/include/qpid/dispatch/router.h
+++ b/include/qpid/dispatch/router.h
@@ -37,12 +37,12 @@ typedef struct qd_address_t qd_address_t;
typedef struct qd_router_delivery_t qd_router_delivery_t;
typedef enum {
- QD_SEMANTICS_MULTICAST_FLOOD = 0,
- QD_SEMANTICS_MULTICAST_ONCE = 1,
- QD_SEMANTICS_ANYCAST_CLOSEST = 2,
- QD_SEMANTICS_ANYCAST_BALANCED = 3,
- QD_SEMANTICS_LINK_BALANCED = 4
-} qd_address_semantics_t;
+ QD_TREATMENT_MULTICAST_FLOOD = 0,
+ QD_TREATMENT_MULTICAST_ONCE = 1,
+ QD_TREATMENT_ANYCAST_CLOSEST = 2,
+ QD_TREATMENT_ANYCAST_BALANCED = 3,
+ QD_TREATMENT_LINK_BALANCED = 4
+} qd_address_treatment_t;
#include <qpid/dispatch/router_core.h>
@@ -96,17 +96,17 @@ qdr_core_t *qd_router_core(qd_dispatch_t *qd);
* @param on_message Optional callback to be called when a message is received
* for the address.
* @param context Context to be passed to the on_message handler.
- * @param semantics Semantics for the address.
+ * @param treatment Treatment for the address.
* @param global True if the address is global.
* @param forwarder Optional custom forwarder to use when a message is received
- * for the address. If null, a default forwarder based on the semantics will
+ * for the address. If null, a default forwarder based on the treatment will
* be used.
*/
qd_address_t *qd_router_register_address(qd_dispatch_t *qd,
const char *address,
qd_router_message_cb_t on_message,
void *context,
- qd_address_semantics_t semantics,
+ qd_address_treatment_t treatment,
bool global,
qd_router_forwarder_t *forwarder);
@@ -134,7 +134,7 @@ void qd_router_build_node_list(qd_dispatch_t *qd, qd_composed_field_t *field);
const char* qd_address_logstr(qd_address_t* address);
/** Retrieve the proper forwarder for a given semantic */
-qd_router_forwarder_t *qd_router_get_forwarder(qd_address_semantics_t s);
+qd_router_forwarder_t *qd_router_get_forwarder(qd_address_treatment_t t);
///@}
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/1dffeb6a/include/qpid/dispatch/router_core.h
----------------------------------------------------------------------
diff --git a/include/qpid/dispatch/router_core.h b/include/qpid/dispatch/router_core.h
index 602e67c..b38022f 100644
--- a/include/qpid/dispatch/router_core.h
+++ b/include/qpid/dispatch/router_core.h
@@ -94,7 +94,7 @@ qdr_subscription_t *qdr_core_subscribe(qdr_core_t *core,
const char *address,
char aclass,
char phase,
- qd_address_semantics_t semantics,
+ qd_address_treatment_t treatment,
qdr_receive_t on_message,
void *context);
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/1dffeb6a/python/qpid_dispatch/management/qdrouter.json
----------------------------------------------------------------------
diff --git a/python/qpid_dispatch/management/qdrouter.json b/python/qpid_dispatch/management/qdrouter.json
index dec2d82..e1ee1b7 100644
--- a/python/qpid_dispatch/management/qdrouter.json
+++ b/python/qpid_dispatch/management/qdrouter.json
@@ -732,7 +732,7 @@
},
"fixedAddress": {
- "description":"(DEPRECATED) Establishes semantics for addresses starting with a prefix.",
+ "description":"(DEPRECATED) Establishes treatment for addresses starting with a prefix.",
"extends": "configurationEntity",
"operations": ["CREATE"],
"attributes": {
@@ -928,9 +928,9 @@
"description": "AMQP address managed by the router.",
"extends": "operationalEntity",
"attributes": {
- "semantics": {
+ "treatment": {
"type": ["flood", "multi", "anyClosest", "anyBalanced", "linkBalanced"],
- "description": "Forwarding semantics for the address: flood - messages delivered to all subscribers along all available paths (this will cause duplicate deliveries if there are redundant paths); multi - one copy of each message delivered to all subscribers; anyClosest - messages delivered to only the closest subscriber; anyBalanced - messages delivered to one subscriber with load balanced across subscribers; linkBalanced - for link-routing, link attaches balanced across destinations."
+ "description": "Forwarding treatment for the address: flood - messages delivered to all subscribers along all available paths (this will cause duplicate deliveries if there are redundant paths); multi - one copy of each message delivered to all subscribers; anyClosest - messages delivered to only the closest subscriber; anyBalanced - messages delivered to one subscriber with load balanced across subscribers; linkBalanced - for link-routing, link attaches balanced across destinations."
},
"inProcess": {
"type": "integer",
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/1dffeb6a/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 4d75f8b..886157d 100644
--- a/python/qpid_dispatch_internal/management/agent.py
+++ b/python/qpid_dispatch_internal/management/agent.py
@@ -73,7 +73,7 @@ from cProfile import Profile
from cStringIO import StringIO
from ctypes import c_void_p, py_object, c_long
from subprocess import Popen
-from ..dispatch import IoAdapter, LogAdapter, LOG_INFO, LOG_DEBUG, LOG_ERROR, SEMANTICS_ANYCAST_CLOSEST
+from ..dispatch import IoAdapter, LogAdapter, LOG_INFO, LOG_DEBUG, LOG_ERROR, TREATMENT_ANYCAST_CLOSEST
from qpid_dispatch.management.error import ManagementError, OK, CREATED, NO_CONTENT, STATUS_TEXT, \
BadRequestStatus, InternalServerErrorStatus, NotImplementedStatus, NotFoundStatus
from qpid_dispatch.management.entity import camelcase
@@ -603,7 +603,7 @@ class Agent(object):
"""Register the management address to receive management requests"""
self.entities.refresh_from_c()
self.log(LOG_INFO, "Activating management agent on %s" % address)
- self.io = IoAdapter(self.receive, address, 'L', '0', SEMANTICS_ANYCAST_CLOSEST)
+ self.io = IoAdapter(self.receive, address, 'L', '0', TREATMENT_ANYCAST_CLOSEST)
def entity_class(self, entity_type):
"""Return the class that implements entity_type"""
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/1dffeb6a/python/qpid_dispatch_internal/router/engine.py
----------------------------------------------------------------------
diff --git a/python/qpid_dispatch_internal/router/engine.py b/python/qpid_dispatch_internal/router/engine.py
index b3fa1a1..8905bac 100644
--- a/python/qpid_dispatch_internal/router/engine.py
+++ b/python/qpid_dispatch_internal/router/engine.py
@@ -33,7 +33,7 @@ import time
## (i.e. we are in a test bench, etc.), load the stub versions.
##
from ..dispatch import IoAdapter, LogAdapter, LOG_TRACE, LOG_INFO, LOG_ERROR, LOG_STACK_LIMIT
-from ..dispatch import SEMANTICS_MULTICAST_FLOOD, SEMANTICS_MULTICAST_ONCE
+from ..dispatch import TREATMENT_MULTICAST_FLOOD, TREATMENT_MULTICAST_ONCE
class RouterEngine:
"""
@@ -53,11 +53,11 @@ class RouterEngine:
self._log_ls = LogAdapter("ROUTER_LS")
self._log_ma = LogAdapter("ROUTER_MA")
self._log_general = LogAdapter("ROUTER")
- self.io_adapter = [IoAdapter(self.receive, "qdrouter", 'L', '0', SEMANTICS_MULTICAST_FLOOD),
- IoAdapter(self.receive, "qdrouter.ma", 'L', '0', SEMANTICS_MULTICAST_ONCE),
- IoAdapter(self.receive, "qdrouter", 'T', '0', SEMANTICS_MULTICAST_FLOOD),
- IoAdapter(self.receive, "qdrouter.ma", 'T', '0', SEMANTICS_MULTICAST_ONCE),
- IoAdapter(self.receive, "qdhello", 'L', '0', SEMANTICS_MULTICAST_FLOOD)]
+ self.io_adapter = [IoAdapter(self.receive, "qdrouter", 'L', '0', TREATMENT_MULTICAST_FLOOD),
+ IoAdapter(self.receive, "qdrouter.ma", 'L', '0', TREATMENT_MULTICAST_ONCE),
+ IoAdapter(self.receive, "qdrouter", 'T', '0', TREATMENT_MULTICAST_FLOOD),
+ IoAdapter(self.receive, "qdrouter.ma", 'T', '0', TREATMENT_MULTICAST_ONCE),
+ IoAdapter(self.receive, "qdhello", 'L', '0', TREATMENT_MULTICAST_FLOOD)]
self.max_routers = max_routers
self.id = router_id
self.instance = long(time.time())
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/1dffeb6a/src/python_embedded.c
----------------------------------------------------------------------
diff --git a/src/python_embedded.c b/src/python_embedded.c
index 669288a..d9b8069 100644
--- a/src/python_embedded.c
+++ b/src/python_embedded.c
@@ -527,8 +527,8 @@ static int IoAdapter_init(IoAdapter *self, PyObject *args, PyObject *kwds)
PyObject *addr;
char aclass = 'L';
char phase = '0';
- int semantics = QD_SEMANTICS_ANYCAST_BALANCED;
- if (!PyArg_ParseTuple(args, "OO|cci", &self->handler, &addr, &aclass, &phase, &semantics))
+ int treatment = QD_TREATMENT_ANYCAST_BALANCED;
+ if (!PyArg_ParseTuple(args, "OO|cci", &self->handler, &addr, &aclass, &phase, &treatment))
return -1;
if (!PyCallable_Check(self->handler)) {
PyErr_SetString(PyExc_TypeError, "IoAdapter.__init__ handler is not callable");
@@ -540,7 +540,7 @@ static int IoAdapter_init(IoAdapter *self, PyObject *args, PyObject *kwds)
const char *address = PyString_AsString(addr);
if (!address) return -1;
qd_error_clear();
- self->sub = qdr_core_subscribe(self->core, address, aclass, phase, semantics, qd_io_rx_handler, self);
+ self->sub = qdr_core_subscribe(self->core, address, aclass, phase, treatment, qd_io_rx_handler, self);
if (qd_error_code()) {
PyErr_SetString(PyExc_RuntimeError, qd_error_message());
return -1;
@@ -732,10 +732,10 @@ static void qd_python_setup(void)
Py_INCREF(ioaType);
PyModule_AddObject(m, "IoAdapter", (PyObject*) &IoAdapterType);
- qd_register_constant(m, "SEMANTICS_MULTICAST_FLOOD", QD_SEMANTICS_MULTICAST_FLOOD);
- qd_register_constant(m, "SEMANTICS_MULTICAST_ONCE", QD_SEMANTICS_MULTICAST_ONCE);
- qd_register_constant(m, "SEMANTICS_ANYCAST_CLOSEST", QD_SEMANTICS_ANYCAST_CLOSEST);
- qd_register_constant(m, "SEMANTICS_ANYCAST_BALANCED", QD_SEMANTICS_ANYCAST_BALANCED);
+ qd_register_constant(m, "TREATMENT_MULTICAST_FLOOD", QD_TREATMENT_MULTICAST_FLOOD);
+ qd_register_constant(m, "TREATMENT_MULTICAST_ONCE", QD_TREATMENT_MULTICAST_ONCE);
+ qd_register_constant(m, "TREATMENT_ANYCAST_CLOSEST", QD_TREATMENT_ANYCAST_CLOSEST);
+ qd_register_constant(m, "TREATMENT_ANYCAST_BALANCED", QD_TREATMENT_ANYCAST_BALANCED);
Py_INCREF(m);
dispatch_module = m;
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/1dffeb6a/src/router_config.c
----------------------------------------------------------------------
diff --git a/src/router_config.c b/src/router_config.c
index 40453fd..8039efe 100644
--- a/src/router_config.c
+++ b/src/router_config.c
@@ -49,7 +49,7 @@ qd_error_t qd_router_configure_address(qd_router_t *router, qd_entity_t *entity)
}
//
- // Convert fanout + bias to semantics
+ // Convert fanout + bias to treatment
//
const char *trt;
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/1dffeb6a/src/router_core/DESIGN
----------------------------------------------------------------------
diff --git a/src/router_core/DESIGN b/src/router_core/DESIGN
index 5197a2f..dde7cb4 100644
--- a/src/router_core/DESIGN
+++ b/src/router_core/DESIGN
@@ -179,10 +179,10 @@ Core APIs
====================
-Forwarding Semantics
+Forwarding Treatment
====================
- Transition from fanout/bias to a one-dimensional list of semantics:
+ Transition from fanout/bias to a one-dimensional list of treatment:
MULTICAST_FLOOD
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/1dffeb6a/src/router_core/agent_address.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent_address.c b/src/router_core/agent_address.c
index 0256593..bc008ff 100644
--- a/src/router_core/agent_address.c
+++ b/src/router_core/agent_address.c
@@ -24,7 +24,7 @@
#define QDR_ADDRESS_IDENTITY 1
#define QDR_ADDRESS_TYPE 2
#define QDR_ADDRESS_KEY 3
-#define QDR_ADDRESS_SEMANTICS 4
+#define QDR_ADDRESS_TREATMENT 4
#define QDR_ADDRESS_IN_PROCESS 5
#define QDR_ADDRESS_SUBSCRIBER_COUNT 6
#define QDR_ADDRESS_REMOTE_COUNT 7
@@ -40,7 +40,7 @@ const char *qdr_address_columns[] =
"identity",
"type",
"key",
- "semantics",
+ "treatment",
"inProcess",
"subscriberCount",
"remoteCount",
@@ -71,13 +71,13 @@ static void qdr_insert_address_columns_CT(qdr_address_t *addr,
qd_compose_insert_string(body, "org.apache.qpid.dispatch.router.address");
break;
- case QDR_ADDRESS_SEMANTICS: {
- switch (addr->semantics) {
- case QD_SEMANTICS_MULTICAST_FLOOD: qd_compose_insert_string(body, "flood"); break;
- case QD_SEMANTICS_MULTICAST_ONCE: qd_compose_insert_string(body, "multi"); break;
- case QD_SEMANTICS_ANYCAST_CLOSEST: qd_compose_insert_string(body, "anyClosest"); break;
- case QD_SEMANTICS_ANYCAST_BALANCED: qd_compose_insert_string(body, "anyBalanced"); break;
- case QD_SEMANTICS_LINK_BALANCED: qd_compose_insert_string(body, "linkBalanced"); break;
+ case QDR_ADDRESS_TREATMENT: {
+ switch (addr->treatment) {
+ case QD_TREATMENT_MULTICAST_FLOOD: qd_compose_insert_string(body, "flood"); break;
+ case QD_TREATMENT_MULTICAST_ONCE: qd_compose_insert_string(body, "multi"); break;
+ case QD_TREATMENT_ANYCAST_CLOSEST: qd_compose_insert_string(body, "anyClosest"); break;
+ case QD_TREATMENT_ANYCAST_BALANCED: qd_compose_insert_string(body, "anyBalanced"); break;
+ case QD_TREATMENT_LINK_BALANCED: qd_compose_insert_string(body, "linkBalanced"); break;
}
break;
}
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/1dffeb6a/src/router_core/agent_route.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent_route.c b/src/router_core/agent_route.c
index 3cd9af5..af042cd 100644
--- a/src/router_core/agent_route.c
+++ b/src/router_core/agent_route.c
@@ -27,11 +27,11 @@
#define QDR_ROUTE_ADDRESS 4
#define QDR_ROUTE_CONNECTOR 5
#define QDR_ROUTE_DIRECTION 6
-#define QDR_ROUTE_SEMANTICS 7
+#define QDR_ROUTE_TREATMENT 7
#define QDR_ROUTE_INGRESS_ADDRESS 8
#define QDR_ROUTE_EGRESS_ADDRESS 9
-#define QDR_ROUTE_INGRESS_SEMANTICS 10
-#define QDR_ROUTE_EGRESS_SEMANTICS 11
+#define QDR_ROUTE_INGRESS_TREATMENT 10
+#define QDR_ROUTE_EGRESS_TREATMENT 11
const char *qdr_route_columns[] =
{"name",
@@ -41,11 +41,11 @@ const char *qdr_route_columns[] =
"address",
"connector",
"direction",
- "semantics",
+ "treatment",
"ingressAddress",
"egressAddress",
- "ingressSemantics",
- "egressSemantics",
+ "ingressTreatment",
+ "egressTreatment",
0};
@@ -72,11 +72,11 @@ static void qdr_route_insert_column_CT(qdr_route_t *route, int col, qd_composed_
case QDR_ROUTE_ADDRESS:
case QDR_ROUTE_CONNECTOR:
case QDR_ROUTE_DIRECTION:
- case QDR_ROUTE_SEMANTICS:
+ case QDR_ROUTE_TREATMENT:
case QDR_ROUTE_INGRESS_ADDRESS:
case QDR_ROUTE_EGRESS_ADDRESS:
- case QDR_ROUTE_INGRESS_SEMANTICS:
- case QDR_ROUTE_EGRESS_SEMANTICS:
+ case QDR_ROUTE_INGRESS_TREATMENT:
+ case QDR_ROUTE_EGRESS_TREATMENT:
default:
qd_compose_insert_null(body);
break;
@@ -177,20 +177,20 @@ void qdra_route_get_next_CT(qdr_core_t *core, qdr_query_t *query)
}
-static qd_address_semantics_t qdra_semantics(qd_parsed_field_t *field)
+static qd_address_treatment_t qdra_treatment(qd_parsed_field_t *field)
{
if (field) {
qd_field_iterator_t *iter = qd_parse_raw(field);
- if (qd_field_iterator_equal(iter, (unsigned char*) "multi")) return QD_SEMANTICS_MULTICAST_ONCE;
- if (qd_field_iterator_equal(iter, (unsigned char*) "anyClosest")) return QD_SEMANTICS_ANYCAST_CLOSEST;
- if (qd_field_iterator_equal(iter, (unsigned char*) "anyBalanced")) return QD_SEMANTICS_ANYCAST_BALANCED;
+ if (qd_field_iterator_equal(iter, (unsigned char*) "multi")) return QD_TREATMENT_MULTICAST_ONCE;
+ if (qd_field_iterator_equal(iter, (unsigned char*) "anyClosest")) return QD_TREATMENT_ANYCAST_CLOSEST;
+ if (qd_field_iterator_equal(iter, (unsigned char*) "anyBalanced")) return QD_TREATMENT_ANYCAST_BALANCED;
}
- return QD_SEMANTICS_ANYCAST_BALANCED;
+ return QD_TREATMENT_ANYCAST_BALANCED;
}
static qdr_address_config_t *qdra_configure_address_prefix_CT(qdr_core_t *core, qd_parsed_field_t *addr_field, char cls,
- qd_address_semantics_t semantics)
+ qd_address_treatment_t treatment)
{
if (!addr_field)
return 0;
@@ -208,7 +208,7 @@ static qdr_address_config_t *qdra_configure_address_prefix_CT(qdr_core_t *core,
addr = new_qdr_address_config_t();
DEQ_ITEM_INIT(addr);
- addr->semantics = semantics;
+ addr->treatment = treatment;
if (!!addr) {
qd_field_iterator_reset(iter);
@@ -221,7 +221,7 @@ static qdr_address_config_t *qdra_configure_address_prefix_CT(qdr_core_t *core,
static qdr_address_t *qdra_configure_address_CT(qdr_core_t *core, qd_parsed_field_t *addr_field, char cls,
- qd_address_semantics_t semantics)
+ qd_address_treatment_t treatment)
{
if (!addr_field)
return 0;
@@ -237,7 +237,7 @@ static qdr_address_t *qdra_configure_address_CT(qdr_core_t *core, qd_parsed_fiel
return 0;
}
- addr = qdr_address_CT(core, semantics);
+ addr = qdr_address_CT(core, treatment);
if (!!addr) {
qd_field_iterator_reset(iter);
@@ -259,11 +259,11 @@ void qdra_route_create_CT(qdr_core_t *core, qd_field_iterator_t *name,
qd_parsed_field_t *addr_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_ADDRESS]);
qd_parsed_field_t *conn_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_CONNECTOR]);
qd_parsed_field_t *dir_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_DIRECTION]);
- qd_parsed_field_t *sem_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_SEMANTICS]);
+ qd_parsed_field_t *sem_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_TREATMENT]);
//qd_parsed_field_t *in_addr_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_INGRESS_ADDRESS]);
//qd_parsed_field_t *out_addr_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_EGRESS_ADDRESS]);
- //qd_parsed_field_t *in_sem_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_INGRESS_SEMANTICS]);
- //qd_parsed_field_t *out_sem_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_EGRESS_SEMANTICS]);
+ //qd_parsed_field_t *in_sem_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_INGRESS_TREATMENT]);
+ //qd_parsed_field_t *out_sem_field = qd_parse_value_by_key(in_body, qdr_route_columns[QDR_ROUTE_EGRESS_TREATMENT]);
bool still_good = true;
qdr_route_t *route = new_qdr_route_t();
@@ -287,7 +287,7 @@ void qdra_route_create_CT(qdr_core_t *core, qd_field_iterator_t *name,
still_good = false;
}
- route->semantics = qdra_semantics(sem_field);
+ route->treatment = qdra_treatment(sem_field);
route->direction_in = true;
route->direction_out = true;
@@ -306,14 +306,14 @@ void qdra_route_create_CT(qdr_core_t *core, qd_field_iterator_t *name,
switch (route->object_type) {
case QDR_ROUTE_TYPE_ADDRESS:
- route->addr_config = qdra_configure_address_prefix_CT(core, addr_field, 'Z', route->semantics);
+ route->addr_config = qdra_configure_address_prefix_CT(core, addr_field, 'Z', route->treatment);
break;
case QDR_ROUTE_TYPE_LINK_DEST:
if (route->direction_in)
- route->ingress_addr = qdra_configure_address_CT(core, addr_field, 'C', route->semantics);
+ route->ingress_addr = qdra_configure_address_CT(core, addr_field, 'C', route->treatment);
if (route->direction_out)
- route->egress_addr = qdra_configure_address_CT(core, addr_field, 'D', route->semantics);
+ route->egress_addr = qdra_configure_address_CT(core, addr_field, 'D', route->treatment);
break;
case QDR_ROUTE_TYPE_WAYPOINT:
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/1dffeb6a/src/router_core/connections.c
----------------------------------------------------------------------
diff --git a/src/router_core/connections.c b/src/router_core/connections.c
index ab9f545..40e2aaf 100644
--- a/src/router_core/connections.c
+++ b/src/router_core/connections.c
@@ -525,7 +525,7 @@ static char qdr_prefix_for_dir(qd_direction_t dir)
}
-static qd_address_semantics_t qdr_semantics_for_address(qdr_core_t *core, qd_field_iterator_t *iter)
+static qd_address_treatment_t qdr_treatment_for_address(qdr_core_t *core, qd_field_iterator_t *iter)
{
qdr_address_config_t *addr = 0;
@@ -536,7 +536,7 @@ static qd_address_semantics_t qdr_semantics_for_address(qdr_core_t *core, qd_fie
qd_address_iterator_override_prefix(iter, 'Z');
qd_hash_retrieve_prefix(core->addr_hash, iter, (void**) &addr);
qd_address_iterator_override_prefix(iter, '\0');
- return addr ? addr->semantics : QD_SEMANTICS_ANYCAST_CLOSEST;
+ return addr ? addr->treatment : QD_TREATMENT_ANYCAST_CLOSEST;
}
@@ -639,7 +639,7 @@ static qdr_address_t *qdr_lookup_terminus_address_CT(qdr_core_t *core,
qd_field_iterator_t *temp_iter = qd_address_iterator_string(temp_addr, ITER_VIEW_ADDRESS_HASH);
qd_hash_retrieve(core->addr_hash, temp_iter, (void**) &addr);
if (!addr) {
- addr = qdr_address_CT(core, QD_SEMANTICS_ANYCAST_CLOSEST);
+ addr = qdr_address_CT(core, QD_TREATMENT_ANYCAST_CLOSEST);
qd_hash_insert(core->addr_hash, temp_iter, addr, &addr->hash_handle);
DEQ_INSERT_TAIL(core->addrs, addr);
qdr_terminus_set_address(terminus, temp_addr);
@@ -675,7 +675,7 @@ static qdr_address_t *qdr_lookup_terminus_address_CT(qdr_core_t *core,
qd_address_iterator_override_prefix(iter, '\0'); // Cancel previous override
qd_hash_retrieve(core->addr_hash, iter, (void**) &addr);
if (!addr && create_if_not_found) {
- qd_address_semantics_t sem = qdr_semantics_for_address(core, iter);
+ qd_address_treatment_t sem = qdr_treatment_for_address(core, iter);
addr = qdr_address_CT(core, sem);
qd_hash_insert(core->addr_hash, iter, addr, &addr->hash_handle);
DEQ_INSERT_TAIL(core->addrs, addr);
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/1dffeb6a/src/router_core/forwarder.c
----------------------------------------------------------------------
diff --git a/src/router_core/forwarder.c b/src/router_core/forwarder.c
index fc3f4c1..678fc5d 100644
--- a/src/router_core/forwarder.c
+++ b/src/router_core/forwarder.c
@@ -367,22 +367,22 @@ void qdr_forwarder_setup_CT(qdr_core_t *core)
//
// Create message forwarders
//
- core->forwarders[QD_SEMANTICS_MULTICAST_FLOOD] = qdr_new_forwarder(qdr_forward_multicast_CT, 0, true);
- core->forwarders[QD_SEMANTICS_MULTICAST_ONCE] = qdr_new_forwarder(qdr_forward_multicast_CT, 0, false);
- core->forwarders[QD_SEMANTICS_ANYCAST_CLOSEST] = qdr_new_forwarder(qdr_forward_closest_CT, 0, false);
- core->forwarders[QD_SEMANTICS_ANYCAST_BALANCED] = qdr_new_forwarder(qdr_forward_balanced_CT, 0, false);
+ core->forwarders[QD_TREATMENT_MULTICAST_FLOOD] = qdr_new_forwarder(qdr_forward_multicast_CT, 0, true);
+ core->forwarders[QD_TREATMENT_MULTICAST_ONCE] = qdr_new_forwarder(qdr_forward_multicast_CT, 0, false);
+ core->forwarders[QD_TREATMENT_ANYCAST_CLOSEST] = qdr_new_forwarder(qdr_forward_closest_CT, 0, false);
+ core->forwarders[QD_TREATMENT_ANYCAST_BALANCED] = qdr_new_forwarder(qdr_forward_balanced_CT, 0, false);
//
// Create link forwarders
//
- core->forwarders[QD_SEMANTICS_LINK_BALANCED] = qdr_new_forwarder(0, qdr_forward_link_balanced_CT, false);
+ core->forwarders[QD_TREATMENT_LINK_BALANCED] = qdr_new_forwarder(0, qdr_forward_link_balanced_CT, false);
}
-qdr_forwarder_t *qdr_forwarder_CT(qdr_core_t *core, qd_address_semantics_t semantics)
+qdr_forwarder_t *qdr_forwarder_CT(qdr_core_t *core, qd_address_treatment_t treatment)
{
- if (semantics <= QD_SEMANTICS_LINK_BALANCED)
- return core->forwarders[semantics];
+ if (treatment <= QD_TREATMENT_LINK_BALANCED)
+ return core->forwarders[treatment];
return 0;
}
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/1dffeb6a/src/router_core/route_tables.c
----------------------------------------------------------------------
diff --git a/src/router_core/route_tables.c b/src/router_core/route_tables.c
index cbd0a11..db139a9 100644
--- a/src/router_core/route_tables.c
+++ b/src/router_core/route_tables.c
@@ -131,7 +131,7 @@ qdr_subscription_t *qdr_core_subscribe(qdr_core_t *core,
const char *address,
char aclass,
char phase,
- qd_address_semantics_t semantics,
+ qd_address_treatment_t treatment,
qdr_receive_t on_message,
void *context)
{
@@ -146,7 +146,7 @@ qdr_subscription_t *qdr_core_subscribe(qdr_core_t *core,
action->args.io.address_class = aclass;
action->args.io.address_phase = phase;
action->args.io.subscription = sub;
- action->args.io.semantics = semantics;
+ action->args.io.treatment = treatment;
qdr_action_enqueue(core, action);
return sub;
@@ -174,11 +174,11 @@ void qdr_route_table_setup_CT(qdr_core_t *core)
core->addr_hash = qd_hash(10, 32, 0);
if (core->router_mode == QD_ROUTER_MODE_INTERIOR) {
- core->hello_addr = qdr_add_local_address_CT(core, 'L', "qdhello", QD_SEMANTICS_MULTICAST_FLOOD);
- core->router_addr_L = qdr_add_local_address_CT(core, 'L', "qdrouter", QD_SEMANTICS_MULTICAST_FLOOD);
- core->routerma_addr_L = qdr_add_local_address_CT(core, 'L', "qdrouter.ma", QD_SEMANTICS_MULTICAST_ONCE);
- core->router_addr_T = qdr_add_local_address_CT(core, 'T', "qdrouter", QD_SEMANTICS_MULTICAST_FLOOD);
- core->routerma_addr_T = qdr_add_local_address_CT(core, 'T', "qdrouter.ma", QD_SEMANTICS_MULTICAST_ONCE);
+ core->hello_addr = qdr_add_local_address_CT(core, 'L', "qdhello", QD_TREATMENT_MULTICAST_FLOOD);
+ core->router_addr_L = qdr_add_local_address_CT(core, 'L', "qdrouter", QD_TREATMENT_MULTICAST_FLOOD);
+ core->routerma_addr_L = qdr_add_local_address_CT(core, 'L', "qdrouter.ma", QD_TREATMENT_MULTICAST_ONCE);
+ core->router_addr_T = qdr_add_local_address_CT(core, 'T', "qdrouter", QD_TREATMENT_MULTICAST_FLOOD);
+ core->routerma_addr_T = qdr_add_local_address_CT(core, 'T', "qdrouter.ma", QD_TREATMENT_MULTICAST_ONCE);
core->neighbor_free_mask = qd_bitmask(1);
@@ -235,7 +235,7 @@ static void qdr_add_router_CT(qdr_core_t *core, qdr_action_t *action, bool disca
// This record will be found whenever a "foreign" topological address to this
// remote router is looked up.
//
- addr = qdr_address_CT(core, QD_SEMANTICS_ANYCAST_CLOSEST);
+ addr = qdr_address_CT(core, QD_TREATMENT_ANYCAST_CLOSEST);
qd_hash_insert(core->addr_hash, iter, addr, &addr->hash_handle);
DEQ_INSERT_TAIL(core->addrs, addr);
@@ -500,7 +500,7 @@ static void qdr_map_destination_CT(qdr_core_t *core, qdr_action_t *action, bool
qd_hash_retrieve(core->addr_hash, iter, (void**) &addr);
if (!addr) {
- addr = qdr_address_CT(core, 0); // FIXME - Semantics
+ addr = qdr_address_CT(core, 0); // FIXME - Treatment
qd_hash_insert(core->addr_hash, iter, addr, &addr->hash_handle);
DEQ_ITEM_INIT(addr);
DEQ_INSERT_TAIL(core->addrs, addr);
@@ -586,7 +586,7 @@ static void qdr_subscribe_CT(qdr_core_t *core, qdr_action_t *action, bool discar
qd_hash_retrieve(core->addr_hash, address->iterator, (void**) &addr);
if (!addr) {
- addr = qdr_address_CT(core, action->args.io.semantics);
+ addr = qdr_address_CT(core, action->args.io.treatment);
qd_hash_insert(core->addr_hash, address->iterator, addr, &addr->hash_handle);
DEQ_ITEM_INIT(addr);
DEQ_INSERT_TAIL(core->addrs, addr);
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/1dffeb6a/src/router_core/router_core.c
----------------------------------------------------------------------
diff --git a/src/router_core/router_core.c b/src/router_core/router_core.c
index 82f3408..d4a937d 100644
--- a/src/router_core/router_core.c
+++ b/src/router_core/router_core.c
@@ -76,10 +76,10 @@ qdr_core_t *qdr_core(qd_dispatch_t *qd, qd_router_mode_t mode, const char *area,
// Perform outside-of-thread setup for the management agent
//
core->agent_subscription_mobile = qdr_core_subscribe(core, "$management", 'M', '0',
- QD_SEMANTICS_ANYCAST_CLOSEST,
+ QD_TREATMENT_ANYCAST_CLOSEST,
qdr_management_agent_on_message, core);
core->agent_subscription_local = qdr_core_subscribe(core, "$management", 'L', '0',
- QD_SEMANTICS_ANYCAST_CLOSEST,
+ QD_TREATMENT_ANYCAST_CLOSEST,
qdr_management_agent_on_message, core);
return core;
@@ -206,18 +206,18 @@ void qdr_action_enqueue(qdr_core_t *core, qdr_action_t *action)
}
-qdr_address_t *qdr_address_CT(qdr_core_t *core, qd_address_semantics_t semantics)
+qdr_address_t *qdr_address_CT(qdr_core_t *core, qd_address_treatment_t treatment)
{
qdr_address_t *addr = new_qdr_address_t();
ZERO(addr);
- addr->semantics = semantics;
- addr->forwarder = qdr_forwarder_CT(core, semantics);
+ addr->treatment = treatment;
+ addr->forwarder = qdr_forwarder_CT(core, treatment);
addr->rnodes = qd_bitmask(0);
return addr;
}
-qdr_address_t *qdr_add_local_address_CT(qdr_core_t *core, char aclass, const char *address, qd_address_semantics_t semantics)
+qdr_address_t *qdr_add_local_address_CT(qdr_core_t *core, char aclass, const char *address, qd_address_treatment_t treatment)
{
char addr_string[1000];
qdr_address_t *addr = 0;
@@ -228,7 +228,7 @@ qdr_address_t *qdr_add_local_address_CT(qdr_core_t *core, char aclass, const cha
qd_hash_retrieve(core->addr_hash, iter, (void**) &addr);
if (!addr) {
- addr = qdr_address_CT(core, semantics);
+ addr = qdr_address_CT(core, treatment);
qd_hash_insert(core->addr_hash, iter, addr, &addr->hash_handle);
DEQ_ITEM_INIT(addr);
DEQ_INSERT_TAIL(core->addrs, addr);
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/1dffeb6a/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 c6307d3..8dc2fac 100644
--- a/src/router_core/router_core_private.h
+++ b/src/router_core/router_core_private.h
@@ -35,7 +35,7 @@ typedef struct qdr_lrp_ref_t qdr_lrp_ref_t;
typedef struct qdr_forwarder_t qdr_forwarder_t;
typedef struct qdr_route_t qdr_route_t;
-qdr_forwarder_t *qdr_forwarder_CT(qdr_core_t *core, qd_address_semantics_t semantics);
+qdr_forwarder_t *qdr_forwarder_CT(qdr_core_t *core, qd_address_treatment_t treatment);
int qdr_forward_message_CT(qdr_core_t *core, qdr_address_t *addr, qd_message_t *msg, qdr_delivery_t *in_delivery,
bool exclude_inprocess, bool control, qd_bitmask_t *link_exclusion);
void qdr_forward_attach_CT(qdr_core_t *core, qdr_forwarder_t *forwarder, qdr_link_t *in_link);
@@ -110,7 +110,7 @@ struct qdr_action_t {
qdr_field_t *address;
char address_class;
char address_phase;
- qd_address_semantics_t semantics;
+ qd_address_treatment_t treatment;
qdr_subscription_t *subscription;
qd_message_t *message;
bool exclude_inprocess;
@@ -287,7 +287,7 @@ struct qdr_address_t {
qdr_link_ref_list_t inlinks; ///< Locally-Connected Producers
qd_bitmask_t *rnodes; ///< Bitmask of remote routers with connected consumers
qd_hash_handle_t *hash_handle; ///< Linkage back to the hash table entry
- qd_address_semantics_t semantics;
+ qd_address_treatment_t treatment;
qdr_forwarder_t *forwarder;
bool toggle;
bool waypoint;
@@ -307,8 +307,8 @@ struct qdr_address_t {
ALLOC_DECLARE(qdr_address_t);
DEQ_DECLARE(qdr_address_t, qdr_address_list_t);
-qdr_address_t *qdr_address_CT(qdr_core_t *core, qd_address_semantics_t semantics);
-qdr_address_t *qdr_add_local_address_CT(qdr_core_t *core, char aclass, const char *addr, qd_address_semantics_t semantics);
+qdr_address_t *qdr_address_CT(qdr_core_t *core, qd_address_treatment_t treatment);
+qdr_address_t *qdr_add_local_address_CT(qdr_core_t *core, char aclass, const char *addr, qd_address_treatment_t treatment);
void qdr_add_node_ref(qdr_router_ref_list_t *ref_list, qdr_node_t *rnode);
void qdr_del_node_ref(qdr_router_ref_list_t *ref_list, qdr_node_t *rnode);
@@ -316,7 +316,7 @@ void qdr_del_node_ref(qdr_router_ref_list_t *ref_list, qdr_node_t *rnode);
struct qdr_address_config_t {
DEQ_LINKS(qdr_address_config_t);
qd_hash_handle_t *hash_handle;
- qd_address_semantics_t semantics;
+ qd_address_treatment_t treatment;
};
ALLOC_DECLARE(qdr_address_config_t);
@@ -414,9 +414,9 @@ struct qdr_route_t {
qdr_address_t *egress_addr;
bool direction_in;
bool direction_out;
- qd_address_semantics_t semantics;
- qd_address_semantics_t ingress_semantics;
- qd_address_semantics_t egress_semantics;
+ qd_address_treatment_t treatment;
+ qd_address_treatment_t ingress_treatment;
+ qd_address_treatment_t egress_treatment;
char *connector_label;
};
@@ -498,7 +498,7 @@ struct qdr_core_t {
uint64_t next_identifier;
sys_mutex_t *id_lock;
- qdr_forwarder_t *forwarders[QD_SEMANTICS_LINK_BALANCED + 1];
+ qdr_forwarder_t *forwarders[QD_TREATMENT_LINK_BALANCED + 1];
};
typedef enum {
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/1dffeb6a/src/router_forwarders.c
----------------------------------------------------------------------
diff --git a/src/router_forwarders.c b/src/router_forwarders.c
index 5c6fe37..db686fe 100644
--- a/src/router_forwarders.c
+++ b/src/router_forwarders.c
@@ -19,7 +19,7 @@
#include "dispatch_private.h"
-/** defines a default set of forwarding behaviors based on the semantics of an
+/** defines a default set of forwarding behaviors based on the treatment of an
* address.
*/
@@ -51,7 +51,7 @@ static void forward_to_direct_subscribers_LH(qd_address_t *addr,
//
// If the fanout is single, exit the loop here. We only want to send one message copy.
//
- if (QD_FANOUT(addr->semantics) == QD_FANOUT_SINGLE)
+ if (QD_FANOUT(addr->treatment) == QD_FANOUT_SINGLE)
break;
dest_link_ref = DEQ_NEXT(dest_link_ref);
@@ -83,7 +83,7 @@ static void forward_to_remote_subscribers_LH(qd_router_t *router,
// candidate destination router.
//
int origin = -1;
- if (ingress_iter && !(addr->semantics & QD_BYPASS_VALID_ORIGINS)) {
+ if (ingress_iter && !(addr->treatment & QD_BYPASS_VALID_ORIGINS)) {
qd_address_iterator_reset_view(ingress_iter, ITER_VIEW_NODE_HASH);
qd_address_t *origin_addr;
qd_hash_retrieve(router->addr_hash, ingress_iter, (void*) &origin_addr);
@@ -257,22 +257,22 @@ static qd_router_forwarder_t anycast_balanced_forwarder = {
};
-/** Get the proper default forwarder for an address of the given semantics:
+/** Get the proper default forwarder for an address of the given treatment:
*/
-qd_router_forwarder_t *qd_router_get_forwarder(qd_address_semantics_t semantics)
+qd_router_forwarder_t *qd_router_get_forwarder(qd_address_treatment_t treatment)
{
- switch (QD_FANOUT(semantics)) {
+ switch (QD_FANOUT(treatment)) {
case QD_FANOUT_MULTIPLE:
return &multicast_forwarder;
case QD_FANOUT_SINGLE:
- switch (QD_BIAS(semantics)) {
+ switch (QD_BIAS(treatment)) {
case QD_BIAS_CLOSEST:
return &anycast_closest_forwarder;
case QD_BIAS_SPREAD:
return &anycast_balanced_forwarder;
}
}
- assert(false); // invalid semantics? need new forwarder?
+ assert(false); // invalid treatment? need new forwarder?
return 0;
}
http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/1dffeb6a/tools/qdstat
----------------------------------------------------------------------
diff --git a/tools/qdstat b/tools/qdstat
index fc8b32c..fd941cf 100755
--- a/tools/qdstat
+++ b/tools/qdstat
@@ -187,14 +187,14 @@ class BusManager(Node):
outlist.append(str(i))
return outlist
- def _sem_text(self, sem):
- sem_map = {'flood' : 'flood',
+ def _trt_text(self, trt):
+ trt_map = {'flood' : 'flood',
'multi' : 'multi',
'anyClosest' : 'closest',
'anyBalanced' : 'balanced',
'linkBalanced' : 'linkBalanced'}
- if sem in sem_map:
- return sem_map[sem]
+ if trt in trt_map:
+ return trt_map[trt]
return '-'
def displayGeneral(self):
@@ -289,7 +289,7 @@ class BusManager(Node):
disp = Display(prefix=" ")
heads = []
heads.append(Header("addr"))
- heads.append(Header("sem"))
+ heads.append(Header("treatment"))
heads.append(Header("in-proc", Header.COMMAS))
heads.append(Header("local", Header.COMMAS))
heads.append(Header("remote", Header.COMMAS))
@@ -305,7 +305,7 @@ class BusManager(Node):
for addr in objects:
row = []
row.append(self._addr_summary(addr.name))
- row.append(self._sem_text(addr.semantics))
+ row.append(self._trt_text(addr.treatment))
row.append(addr.inProcess)
row.append(addr.subscriberCount)
row.append(addr.remoteCount)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org