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/04 23:19:56 UTC

[1/2] qpid-dispatch git commit: DISPATCH-179 - Added connectors and containers lists to the agent for "route".

Repository: qpid-dispatch
Updated Branches:
  refs/heads/tross-DISPATCH-179-1 0d603e1bc -> 3c84c0be4


DISPATCH-179 - Added connectors and containers lists to the agent for "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/f9708279
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/f9708279
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/f9708279

Branch: refs/heads/tross-DISPATCH-179-1
Commit: f970827921fd3a367d6358f3bb2d2387df0d08c1
Parents: 0d603e1
Author: Ted Ross <tr...@redhat.com>
Authored: Fri Mar 4 15:23:48 2016 -0500
Committer: Ted Ross <tr...@redhat.com>
Committed: Fri Mar 4 15:23:48 2016 -0500

----------------------------------------------------------------------
 src/router_core/agent_route.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/f9708279/src/router_core/agent_route.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent_route.c b/src/router_core/agent_route.c
index 97e70cf..2373624 100644
--- a/src/router_core/agent_route.c
+++ b/src/router_core/agent_route.c
@@ -47,6 +47,8 @@ const char *qdr_route_columns[] =
 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;
+    qdr_route_active_t *active;
+    const char         *key;
 
     if (as_map)
         qd_compose_insert_string(body, qdr_route_columns[col]);
@@ -99,7 +101,29 @@ static void qdr_route_insert_column_CT(qdr_route_config_t *route, int col, qd_co
         break;
 
     case QDR_ROUTE_CONNECTORS:
+        qd_compose_start_list(body);
+        active = DEQ_HEAD(route->active_list);
+        while(active) {
+            key = (const char*) qd_hash_key_by_handle(active->conn_id->hash_handle);
+            if (key && key[0] == 'L')
+                qd_compose_insert_string(body, &key[1]);
+            active = DEQ_NEXT(active);
+        }
+        qd_compose_end_list(body);
+        break;
+
     case QDR_ROUTE_CONTAINERS:
+        qd_compose_start_list(body);
+        active = DEQ_HEAD(route->active_list);
+        while(active) {
+            key = (const char*) qd_hash_key_by_handle(active->conn_id->hash_handle);
+            if (key && key[0] == 'C')
+                qd_compose_insert_string(body, &key[1]);
+            active = DEQ_NEXT(active);
+        }
+        qd_compose_end_list(body);
+        break;
+
     case QDR_ROUTE_ROUTE_ADDRESS:
         qd_compose_insert_null(body);
         break;


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org


[2/2] qpid-dispatch git commit: DISPATCH-179 - WIP for routed attaches.

Posted by tr...@apache.org.
DISPATCH-179 - WIP for routed attaches.


Project: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/commit/3c84c0be
Tree: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/tree/3c84c0be
Diff: http://git-wip-us.apache.org/repos/asf/qpid-dispatch/diff/3c84c0be

Branch: refs/heads/tross-DISPATCH-179-1
Commit: 3c84c0be46cd3dda34b1aa904c4149afdcd06ca9
Parents: f970827
Author: Ted Ross <tr...@redhat.com>
Authored: Fri Mar 4 17:19:19 2016 -0500
Committer: Ted Ross <tr...@redhat.com>
Committed: Fri Mar 4 17:19:19 2016 -0500

----------------------------------------------------------------------
 src/router_core/connections.c         | 16 ++-----
 src/router_core/forwarder.c           | 74 +++++++++++++++++++++++++++---
 src/router_core/router_core_private.h |  7 ++-
 3 files changed, 78 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/3c84c0be/src/router_core/connections.c
----------------------------------------------------------------------
diff --git a/src/router_core/connections.c b/src/router_core/connections.c
index 923114f..1aca79f 100644
--- a/src/router_core/connections.c
+++ b/src/router_core/connections.c
@@ -352,9 +352,9 @@ void qdr_connection_activate_CT(qdr_core_t *core, qdr_connection_t *conn)
 }
 
 
-static void qdr_connection_enqueue_work_CT(qdr_core_t            *core,
-                                           qdr_connection_t      *conn,
-                                           qdr_connection_work_t *work)
+void qdr_connection_enqueue_work_CT(qdr_core_t            *core,
+                                    qdr_connection_t      *conn,
+                                    qdr_connection_work_t *work)
 {
     sys_mutex_lock(conn->work_lock);
     DEQ_INSERT_TAIL(conn->work_list, work);
@@ -516,12 +516,6 @@ static void qdr_link_outbound_second_attach_CT(qdr_core_t *core, qdr_link_t *lin
 }
 
 
-static void qdr_forward_first_attach_CT(qdr_core_t *core, qdr_link_t *link, qdr_address_t *addr,
-                                        qdr_terminus_t *source, qdr_terminus_t *target)
-{
-}
-
-
 static char qdr_prefix_for_dir(qd_direction_t dir)
 {
     return (dir == QD_INCOMING) ? 'C' : 'D';
@@ -847,7 +841,7 @@ static void qdr_link_inbound_first_attach_CT(qdr_core_t *core, qdr_action_t *act
                     //
                     // This is a link-routed destination, forward the attach to the next hop
                     //
-                    qdr_forward_first_attach_CT(core, link, addr, source, target);
+                    qdr_forward_attach_CT(core, addr, link, source, target);
 
                 else {
                     //
@@ -898,7 +892,7 @@ static void qdr_link_inbound_first_attach_CT(qdr_core_t *core, qdr_action_t *act
                 //
                 // This is a link-routed destination, forward the attach to the next hop
                 //
-                qdr_forward_first_attach_CT(core, link, addr, source, target);
+                qdr_forward_attach_CT(core, addr, link, source, target);
 
             else {
                 //

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/3c84c0be/src/router_core/forwarder.c
----------------------------------------------------------------------
diff --git a/src/router_core/forwarder.c b/src/router_core/forwarder.c
index 4628e02..1c0f7ec 100644
--- a/src/router_core/forwarder.c
+++ b/src/router_core/forwarder.c
@@ -33,9 +33,11 @@ typedef int (*qdr_forward_message_t) (qdr_core_t      *core,
                                       bool             control,
                                       qd_bitmask_t    *link_exclusion);
 
-typedef void (*qdr_forward_attach_t) (qdr_core_t      *core,
-                                      qdr_forwarder_t *forw,
-                                      qdr_link_t      *link);
+typedef bool (*qdr_forward_attach_t) (qdr_core_t     *core,
+                                      qdr_address_t  *addr,
+                                      qdr_link_t     *link,
+                                      qdr_terminus_t *source,
+                                      qdr_terminus_t *target);
 
 struct qdr_forwarder_t {
     qdr_forward_message_t forward_message;
@@ -342,10 +344,64 @@ int qdr_forward_balanced_CT(qdr_core_t      *core,
 }
 
 
-void qdr_forward_link_balanced_CT(qdr_core_t      *core,
-                                  qdr_forwarder_t *forw,
-                                  qdr_link_t      *link)
+bool qdr_forward_link_balanced_CT(qdr_core_t     *core,
+                                  qdr_address_t  *addr,
+                                  qdr_link_t     *in_link,
+                                  qdr_terminus_t *source,
+                                  qdr_terminus_t *target)
 {
+    qdr_connection_ref_t *conn_ref = DEQ_HEAD(addr->conns);
+    qdr_connection_t     *conn;
+
+    //
+    // Check for locally connected containers that can handle this link attach.
+    //
+    if (conn_ref) {
+        conn = conn_ref->conn;
+
+        //
+        // If there are more than one local connections available for handling this link,
+        // rotate the list so the attaches are balanced across the containers.
+        //
+        if (DEQ_SIZE(addr->conns) > 1) {
+            DEQ_REMOVE_HEAD(addr->conns);
+            DEQ_INSERT_TAIL(addr->conns, conn_ref);
+        }
+    }
+
+    //
+    // TODO - Use the next-hop connection if there are no local containers.
+    //
+
+    if (conn) {
+        qdr_link_t *out_link = new_qdr_link_t();
+        ZERO(out_link);
+        out_link->core           = core;
+        out_link->identifier     = qdr_identifier(core);
+        out_link->conn           = conn;
+        out_link->link_type      = QD_LINK_ENDPOINT;
+        out_link->link_direction = qdr_link_direction(in_link) == QD_OUTGOING ? QD_INCOMING : QD_OUTGOING;
+        out_link->name           = in_link->name;
+
+        out_link->connected_link = in_link;
+        in_link->connected_link  = out_link;
+
+        DEQ_INSERT_TAIL(core->open_links, out_link);
+        qdr_add_link_ref(&conn->links, out_link, QDR_LINK_LIST_CLASS_CONNECTION);
+
+        qdr_connection_work_t *work = new_qdr_connection_work_t();
+        ZERO(work);
+        work->work_type = QDR_CONNECTION_WORK_FIRST_ATTACH;
+        work->link      = out_link;
+        work->source    = source;
+        work->target    = target;
+
+        qdr_connection_enqueue_work_CT(core, conn, work);
+
+        return true;
+    }
+
+    return false;
 }
 
 
@@ -401,7 +457,11 @@ int qdr_forward_message_CT(qdr_core_t *core, qdr_address_t *addr, qd_message_t *
 }
 
 
-void qdr_forward_attach_CT(qdr_core_t *core, qdr_forwarder_t *forwarder, qdr_link_t *in_link)
+bool qdr_forward_attach_CT(qdr_core_t *core, qdr_address_t *addr, qdr_link_t *in_link,
+                           qdr_terminus_t *source, qdr_terminus_t *target)
 {
+    if (addr->forwarder)
+        return addr->forwarder->forward_attach(core, addr, in_link, source, target);
+    return false;
 }
 

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/3c84c0be/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 0988ffa..2877677 100644
--- a/src/router_core/router_core_private.h
+++ b/src/router_core/router_core_private.h
@@ -39,7 +39,8 @@ typedef struct qdr_connection_ref_t  qdr_connection_ref_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,
                            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);
+bool qdr_forward_attach_CT(qdr_core_t *core, qdr_address_t *addr, qdr_link_t *in_link, qdr_terminus_t *source,
+                           qdr_terminus_t *target);
 
 /**
  * qdr_field_t - This type is used to pass variable-length fields (strings, etc.) into
@@ -553,6 +554,10 @@ void qdr_check_addr_CT(qdr_core_t *core, qdr_address_t *addr, bool was_local);
 
 void qdr_connection_activate_CT(qdr_core_t *core, qdr_connection_t *conn);
 
+void qdr_connection_enqueue_work_CT(qdr_core_t            *core,
+                                    qdr_connection_t      *conn,
+                                    qdr_connection_work_t *work);
+
 qdr_query_t *qdr_query(qdr_core_t              *core,
                        void                    *context,
                        qd_router_entity_type_t  type,


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org