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/19 00:06:43 UTC

[25/50] [abbrv] qpid-dispatch git commit: DISPATCH-179 - Implemented plumbing for management delete of route objects

DISPATCH-179 - Implemented plumbing for management delete of route objects


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

Branch: refs/heads/master
Commit: 0a98b3a17522149392708e30805ed2eeee578ea8
Parents: bd0f558
Author: Ganesh Murthy <gm...@redhat.com>
Authored: Fri Mar 11 12:06:01 2016 -0500
Committer: Ganesh Murthy <gm...@redhat.com>
Committed: Fri Mar 11 12:06:01 2016 -0500

----------------------------------------------------------------------
 src/router_core/agent.c         |  4 +-
 src/router_core/agent_address.c | 31 ---------------
 src/router_core/agent_address.h |  5 ---
 src/router_core/agent_route.c   | 75 +++++++++++++++++++++++++++++++++++-
 4 files changed, 76 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/0a98b3a1/src/router_core/agent.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent.c b/src/router_core/agent.c
index 2150b43..1833880 100644
--- a/src/router_core/agent.c
+++ b/src/router_core/agent.c
@@ -360,10 +360,10 @@ 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_ROUTE:       break;
+    case QD_ROUTER_ROUTE:       qdra_route_delete_CT(core, query, name, identity); break;
     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_ADDRESS:     break;
     case QD_ROUTER_EXCHANGE:    break;
     case QD_ROUTER_BINDING:     break;
    }

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/0a98b3a1/src/router_core/agent_address.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent_address.c b/src/router_core/agent_address.c
index 1a9a44c..c8a1b5d 100644
--- a/src/router_core/agent_address.c
+++ b/src/router_core/agent_address.c
@@ -293,34 +293,3 @@ void qdra_address_get_next_CT(qdr_core_t *core, qdr_query_t *query)
     //
     qdr_agent_enqueue_response_CT(core, query);
 }
-
-void qdra_address_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);
-}

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/0a98b3a1/src/router_core/agent_address.h
----------------------------------------------------------------------
diff --git a/src/router_core/agent_address.h b/src/router_core/agent_address.h
index abe6d89..b47433e 100644
--- a/src/router_core/agent_address.h
+++ b/src/router_core/agent_address.h
@@ -30,11 +30,6 @@ void qdra_address_get_CT(qdr_core_t *core,
                       qdr_query_t          *query,
                       const char *qdr_address_columns[]);
 
-void qdra_address_delete_CT(qdr_core_t          *core,
-                            qd_field_iterator_t *name,
-                            qd_field_iterator_t *identity,
-                            qdr_query_t          *query);
-
 
 #define QDR_ADDRESS_COLUMN_COUNT 15
 

http://git-wip-us.apache.org/repos/asf/qpid-dispatch/blob/0a98b3a1/src/router_core/agent_route.c
----------------------------------------------------------------------
diff --git a/src/router_core/agent_route.c b/src/router_core/agent_route.c
index 2373624..383d1bc 100644
--- a/src/router_core/agent_route.c
+++ b/src/router_core/agent_route.c
@@ -17,6 +17,7 @@
  * under the License.
  */
 
+#include <qpid/dispatch/ctools.h>
 #include "agent_route.h"
 #include "route_control.h"
 #include <stdio.h>
@@ -236,6 +237,78 @@ static qd_address_treatment_t qdra_treatment(qd_parsed_field_t *field)
     return QD_TREATMENT_ANYCAST_BALANCED;
 }
 
+static qdr_route_config_t *qdr_route_config_find_by_identity(qdr_core_t *core, qd_field_iterator_t *identity) {
+    if (!identity)
+        return 0;
+
+    qdr_route_config_list_t  route_config = core->route_config;
+
+    qdr_route_config_t *rc = DEQ_HEAD(route_config);
+
+    while (rc) {
+        // Convert the passed in identity to a char*
+        char id[100];
+        snprintf(id, 100, "%ld", rc->identity);
+        if (qd_field_iterator_equal(identity, (const unsigned char *)id))
+            break;
+        rc = DEQ_NEXT(rc);
+    }
+
+    return rc;
+
+}
+
+static qdr_route_config_t *qdr_route_config_find_by_name(qdr_core_t *core, qd_field_iterator_t *name) {
+    if (!name)
+        return 0;
+
+    qdr_route_config_list_t  route_config = core->route_config;
+
+    qdr_route_config_t *rc = DEQ_HEAD(route_config);
+
+    while (rc) {// Sometimes the name can be null
+        if (rc->name && qd_field_iterator_equal(name, (const unsigned char *)rc->name))
+            break;
+        rc = DEQ_NEXT(rc);
+    }
+
+    return rc;
+
+}
+
+static void qdra_route_delete_route_set_status(qdr_core_t *core, qdr_query_t *query, qdr_route_config_t *route)
+{
+    if (route) {
+        qdr_route_delete_CT(core, route);
+        query->status = QD_AMQP_NO_CONTENT;
+    }
+    else {
+        query->status = QD_AMQP_NOT_FOUND;
+    }
+}
+
+void qdra_route_delete_CT(qdr_core_t          *core,
+                          qdr_query_t          *query,
+                          qd_field_iterator_t *name,
+                          qd_field_iterator_t *identity)
+{
+    if (identity) {
+         qdr_route_config_t *route = qdr_route_config_find_by_identity(core, identity);
+         qdra_route_delete_route_set_status(core, query, route);
+    }
+    else if (name) {
+        qdr_route_config_t *route = qdr_route_config_find_by_name(core, name);
+        qdra_route_delete_route_set_status(core, query, route);
+    }
+    else { // No name and no identity
+        query->status = QD_AMQP_BAD_REQUEST;
+    }
+
+    //
+    // Enqueue the response.
+    //
+    qdr_agent_enqueue_response_CT(core, 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)
@@ -270,7 +343,7 @@ void qdra_route_create_CT(qdr_core_t *core, qd_field_iterator_t *name,
         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"))
+            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;


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