You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gm...@apache.org on 2021/10/27 19:22:37 UTC

[qpid-dispatch] branch main updated: DISPATCH-2230: Check the discard flag and don't perform the action if it has been discarded

This is an automated email from the ASF dual-hosted git repository.

gmurthy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/qpid-dispatch.git


The following commit(s) were added to refs/heads/main by this push:
     new 21a3a82  DISPATCH-2230: Check the discard flag and don't perform the action if it has been discarded
21a3a82 is described below

commit 21a3a8216e53d32fc48a989e903d619712f42404
Author: Ganesh Murthy <gm...@apache.org>
AuthorDate: Mon Oct 18 13:05:43 2021 -0400

    DISPATCH-2230: Check the discard flag and don't perform the action if it has been discarded
---
 src/router_core/agent.c        | 134 ++++++++++++++++++++++-------------------
 src/router_core/route_tables.c |  18 ++++++
 2 files changed, 89 insertions(+), 63 deletions(-)

diff --git a/src/router_core/agent.c b/src/router_core/agent.c
index 42f6d34..68a96bf 100644
--- a/src/router_core/agent.c
+++ b/src/router_core/agent.c
@@ -417,21 +417,23 @@ static void qdr_manage_read_CT(qdr_core_t *core, qdr_action_t *action, bool disc
     qd_iterator_t *name       = qdr_field_iterator(action->args.agent.name);
     qdr_query_t   *query      = action->args.agent.query;
 
-    switch (query->entity_type) {
-    case QD_ROUTER_CONFIG_ADDRESS:    qdra_config_address_get_CT(core, name, identity, query, qdr_config_address_columns); break;
-    case QD_ROUTER_CONFIG_LINK_ROUTE: qdra_config_link_route_get_CT(core, name, identity, query, qdr_config_link_route_columns); break;
-    case QD_ROUTER_CONFIG_AUTO_LINK:  qdra_config_auto_link_get_CT(core, name, identity, query, qdr_config_auto_link_columns); break;
-    case QD_ROUTER_ROUTER:      qdr_agent_forbidden(core, query, false); break;
-    case QD_ROUTER_CONNECTION:        qdra_connection_get_CT(core, name, identity, query, qdr_connection_columns); break;
-    case QD_ROUTER_TCP_CONNECTION:    qdra_tcp_connection_get_CT(core, name, identity, query, qdr_tcp_connection_columns); break;
-    case QD_ROUTER_HTTP_REQUEST_INFO:    qdra_http_request_info_get_CT(core, name, identity, query, qdr_http_request_info_columns); 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_FORBIDDEN:         qdr_agent_forbidden(core, query, false); break;
-    case QD_ROUTER_EXCHANGE:          qdra_config_exchange_get_CT(core, name, identity, query, qdr_config_exchange_columns); break;
-    case QD_ROUTER_BINDING:           qdra_config_binding_get_CT(core, name, identity, query, qdr_config_binding_columns); break;
-    case QD_ROUTER_CONN_LINK_ROUTE:   qdra_conn_link_route_get_CT(core, name, identity, query, qdr_conn_link_route_columns); break;
-   }
+    if (!discard) {
+        switch (query->entity_type) {
+        case QD_ROUTER_CONFIG_ADDRESS:    qdra_config_address_get_CT(core, name, identity, query, qdr_config_address_columns); break;
+        case QD_ROUTER_CONFIG_LINK_ROUTE: qdra_config_link_route_get_CT(core, name, identity, query, qdr_config_link_route_columns); break;
+        case QD_ROUTER_CONFIG_AUTO_LINK:  qdra_config_auto_link_get_CT(core, name, identity, query, qdr_config_auto_link_columns); break;
+        case QD_ROUTER_ROUTER:            qdr_agent_forbidden(core, query, false); break;
+        case QD_ROUTER_CONNECTION:        qdra_connection_get_CT(core, name, identity, query, qdr_connection_columns); break;
+        case QD_ROUTER_TCP_CONNECTION:    qdra_tcp_connection_get_CT(core, name, identity, query, qdr_tcp_connection_columns); break;
+        case QD_ROUTER_HTTP_REQUEST_INFO: qdra_http_request_info_get_CT(core, name, identity, query, qdr_http_request_info_columns); 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_FORBIDDEN:         qdr_agent_forbidden(core, query, false); break;
+        case QD_ROUTER_EXCHANGE:          qdra_config_exchange_get_CT(core, name, identity, query, qdr_config_exchange_columns); break;
+        case QD_ROUTER_BINDING:           qdra_config_binding_get_CT(core, name, identity, query, qdr_config_binding_columns); break;
+        case QD_ROUTER_CONN_LINK_ROUTE:   qdra_conn_link_route_get_CT(core, name, identity, query, qdr_conn_link_route_columns); break;
+       }
+    }
 
     qdr_field_free(action->args.agent.name);
     qdr_field_free(action->args.agent.identity);
@@ -445,22 +447,24 @@ 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;
     qd_buffer_list_t   body_buffers = action->args.agent.body_buffers;
 
-    switch (query->entity_type) {
-    case QD_ROUTER_CONFIG_ADDRESS:    qdra_config_address_create_CT(core, name, query, in_body); break;
-    case QD_ROUTER_CONFIG_LINK_ROUTE: qdra_config_link_route_create_CT(core, name, query, in_body); break;
-    case QD_ROUTER_CONFIG_AUTO_LINK:  qdra_config_auto_link_create_CT(core, name, query, in_body); break;
-    case QD_ROUTER_CONNECTION:        break;
-    case QD_ROUTER_TCP_CONNECTION:    break;
-    case QD_ROUTER_HTTP_REQUEST_INFO:    break;
-    case QD_ROUTER_ROUTER:            qdr_agent_forbidden(core, query, false); break;
-    case QD_ROUTER_LINK:              break;
-    case QD_ROUTER_ADDRESS:           break;
-    case QD_ROUTER_FORBIDDEN:         qdr_agent_forbidden(core, query, false); break;
-    case QD_ROUTER_EXCHANGE:          qdra_config_exchange_create_CT(core, name, query, in_body); break;
-    case QD_ROUTER_BINDING:           qdra_config_binding_create_CT(core, name, query, in_body); break;
-    case QD_ROUTER_CONN_LINK_ROUTE:   qdra_conn_link_route_create_CT(core, name, query, in_body); break;
-
-   }
+    if (!discard) {
+        switch (query->entity_type) {
+        case QD_ROUTER_CONFIG_ADDRESS:    qdra_config_address_create_CT(core, name, query, in_body); break;
+        case QD_ROUTER_CONFIG_LINK_ROUTE: qdra_config_link_route_create_CT(core, name, query, in_body); break;
+        case QD_ROUTER_CONFIG_AUTO_LINK:  qdra_config_auto_link_create_CT(core, name, query, in_body); break;
+        case QD_ROUTER_CONNECTION:        break;
+        case QD_ROUTER_TCP_CONNECTION:    break;
+        case QD_ROUTER_HTTP_REQUEST_INFO: break;
+        case QD_ROUTER_ROUTER:            qdr_agent_forbidden(core, query, false); break;
+        case QD_ROUTER_LINK:              break;
+        case QD_ROUTER_ADDRESS:           break;
+        case QD_ROUTER_FORBIDDEN:         qdr_agent_forbidden(core, query, false); break;
+        case QD_ROUTER_EXCHANGE:          qdra_config_exchange_create_CT(core, name, query, in_body); break;
+        case QD_ROUTER_BINDING:           qdra_config_binding_create_CT(core, name, query, in_body); break;
+        case QD_ROUTER_CONN_LINK_ROUTE:   qdra_conn_link_route_create_CT(core, name, query, in_body); break;
+
+       }
+    }
 
    qdr_field_free(action->args.agent.name);
    qd_parse_free(in_body);
@@ -474,21 +478,23 @@ static void qdr_manage_delete_CT(qdr_core_t *core, qdr_action_t *action, bool di
     qd_iterator_t *identity = qdr_field_iterator(action->args.agent.identity);
     qdr_query_t   *query    = action->args.agent.query;
 
-    switch (query->entity_type) {
-    case QD_ROUTER_CONFIG_ADDRESS:    qdra_config_address_delete_CT(core, query, name, identity); break;
-    case QD_ROUTER_CONFIG_LINK_ROUTE: qdra_config_link_route_delete_CT(core, query, name, identity); break;
-    case QD_ROUTER_CONFIG_AUTO_LINK:  qdra_config_auto_link_delete_CT(core, query, name, identity); break;
-    case QD_ROUTER_CONNECTION:        qdr_agent_forbidden(core, query, false); break;
-    case QD_ROUTER_TCP_CONNECTION:    break;
-    case QD_ROUTER_HTTP_REQUEST_INFO:    break;
-    case QD_ROUTER_ROUTER:            qdr_agent_forbidden(core, query, false); break;
-    case QD_ROUTER_LINK:              break;
-    case QD_ROUTER_ADDRESS:           break;
-    case QD_ROUTER_FORBIDDEN:         qdr_agent_forbidden(core, query, false); break;
-    case QD_ROUTER_EXCHANGE:          qdra_config_exchange_delete_CT(core, query, name, identity); break;
-    case QD_ROUTER_BINDING:           qdra_config_binding_delete_CT(core, query, name, identity); break;
-    case QD_ROUTER_CONN_LINK_ROUTE:   qdra_conn_link_route_delete_CT(core, query, name, identity); break;
-   }
+    if (!discard) {
+        switch (query->entity_type) {
+        case QD_ROUTER_CONFIG_ADDRESS:    qdra_config_address_delete_CT(core, query, name, identity); break;
+        case QD_ROUTER_CONFIG_LINK_ROUTE: qdra_config_link_route_delete_CT(core, query, name, identity); break;
+        case QD_ROUTER_CONFIG_AUTO_LINK:  qdra_config_auto_link_delete_CT(core, query, name, identity); break;
+        case QD_ROUTER_CONNECTION:        qdr_agent_forbidden(core, query, false); break;
+        case QD_ROUTER_TCP_CONNECTION:    break;
+        case QD_ROUTER_HTTP_REQUEST_INFO: break;
+        case QD_ROUTER_ROUTER:            qdr_agent_forbidden(core, query, false); break;
+        case QD_ROUTER_LINK:              break;
+        case QD_ROUTER_ADDRESS:           break;
+        case QD_ROUTER_FORBIDDEN:         qdr_agent_forbidden(core, query, false); break;
+        case QD_ROUTER_EXCHANGE:          qdra_config_exchange_delete_CT(core, query, name, identity); break;
+        case QD_ROUTER_BINDING:           qdra_config_binding_delete_CT(core, query, name, identity); break;
+        case QD_ROUTER_CONN_LINK_ROUTE:   qdra_conn_link_route_delete_CT(core, query, name, identity); break;
+       }
+    }
 
    qdr_field_free(action->args.agent.name);
    qdr_field_free(action->args.agent.identity);
@@ -501,21 +507,23 @@ static void qdr_manage_update_CT(qdr_core_t *core, qdr_action_t *action, bool di
     qdr_query_t       *query    = action->args.agent.query;
     qd_parsed_field_t *in_body  = action->args.agent.in_body;
 
-    switch (query->entity_type) {
-    case QD_ROUTER_CONFIG_ADDRESS:    break;
-    case QD_ROUTER_CONFIG_LINK_ROUTE: break;
-    case QD_ROUTER_CONFIG_AUTO_LINK:  break;
-    case QD_ROUTER_CONNECTION:        qdra_connection_update_CT(core, name, identity, query, in_body); break;
-    case QD_ROUTER_TCP_CONNECTION:    break;
-    case QD_ROUTER_HTTP_REQUEST_INFO:    break;
-    case QD_ROUTER_ROUTER:            break;
-    case QD_ROUTER_LINK:              qdra_link_update_CT(core, name, identity, query, in_body); break;
-    case QD_ROUTER_ADDRESS:           break;
-    case QD_ROUTER_FORBIDDEN:         qdr_agent_forbidden(core, query, false); break;
-    case QD_ROUTER_EXCHANGE:          break;
-    case QD_ROUTER_BINDING:           break;
-    case QD_ROUTER_CONN_LINK_ROUTE:   break;
-   }
+    if (!discard) {
+            switch (query->entity_type) {
+        case QD_ROUTER_CONFIG_ADDRESS:    break;
+        case QD_ROUTER_CONFIG_LINK_ROUTE: break;
+        case QD_ROUTER_CONFIG_AUTO_LINK:  break;
+        case QD_ROUTER_CONNECTION:        qdra_connection_update_CT(core, name, identity, query, in_body); break;
+        case QD_ROUTER_TCP_CONNECTION:    break;
+        case QD_ROUTER_HTTP_REQUEST_INFO: break;
+        case QD_ROUTER_ROUTER:            break;
+        case QD_ROUTER_LINK:              qdra_link_update_CT(core, name, identity, query, in_body); break;
+        case QD_ROUTER_ADDRESS:           break;
+        case QD_ROUTER_FORBIDDEN:         qdr_agent_forbidden(core, query, false); break;
+        case QD_ROUTER_EXCHANGE:          break;
+        case QD_ROUTER_BINDING:           break;
+        case QD_ROUTER_CONN_LINK_ROUTE:   break;
+       }
+    }
 
    qdr_field_free(action->args.agent.name);
    qdr_field_free(action->args.agent.identity);
@@ -538,7 +546,7 @@ static void qdrh_query_get_first_CT(qdr_core_t *core, qdr_action_t *action, bool
         case QD_ROUTER_ROUTER:            qdra_router_get_first_CT(core, query, offset); break;
         case QD_ROUTER_CONNECTION:        qdra_connection_get_first_CT(core, query, offset); break;
         case QD_ROUTER_TCP_CONNECTION:    qdra_tcp_connection_get_first_CT(core, query, offset); break;
-        case QD_ROUTER_HTTP_REQUEST_INFO:    qdra_http_request_info_get_first_CT(core, query, offset); break;
+        case QD_ROUTER_HTTP_REQUEST_INFO: qdra_http_request_info_get_first_CT(core, query, offset); 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_FORBIDDEN:         qdr_agent_forbidden(core, query, true); break;
@@ -562,7 +570,7 @@ static void qdrh_query_get_next_CT(qdr_core_t *core, qdr_action_t *action, bool
         case QD_ROUTER_ROUTER:      qdra_router_get_next_CT(core, query); break;
         case QD_ROUTER_CONNECTION:        qdra_connection_get_next_CT(core, query); break;
         case QD_ROUTER_TCP_CONNECTION:    qdra_tcp_connection_get_next_CT(core, query); break;
-        case QD_ROUTER_HTTP_REQUEST_INFO:    qdra_http_request_info_get_next_CT(core, query); break;
+        case QD_ROUTER_HTTP_REQUEST_INFO: qdra_http_request_info_get_next_CT(core, query); 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_FORBIDDEN:         break;
diff --git a/src/router_core/route_tables.c b/src/router_core/route_tables.c
index ef831a0..625936f 100644
--- a/src/router_core/route_tables.c
+++ b/src/router_core/route_tables.c
@@ -359,6 +359,9 @@ static void qdr_add_router_CT(qdr_core_t *core, qdr_action_t *action, bool disca
 
 static void qdr_del_router_CT(qdr_core_t *core, qdr_action_t *action, bool discard)
 {
+    if (!!discard)
+        return;
+
     int router_maskbit = action->args.route_table.router_maskbit;
 
     if (router_maskbit >= qd_bitmask_width() || router_maskbit < 0) {
@@ -413,6 +416,9 @@ static void qdr_del_router_CT(qdr_core_t *core, qdr_action_t *action, bool disca
 
 static void qdr_set_link_CT(qdr_core_t *core, qdr_action_t *action, bool discard)
 {
+    if (!!discard)
+        return;
+
     int router_maskbit = action->args.route_table.router_maskbit;
     int conn_maskbit   = action->args.route_table.link_maskbit;  // "link" identifies a connection, not an amqp link
 
@@ -447,6 +453,9 @@ static void qdr_set_link_CT(qdr_core_t *core, qdr_action_t *action, bool discard
 
 static void qdr_remove_link_CT(qdr_core_t *core, qdr_action_t *action, bool discard)
 {
+    if (!!discard)
+        return;
+
     int router_maskbit = action->args.route_table.router_maskbit;
 
     if (router_maskbit >= qd_bitmask_width() || router_maskbit < 0) {
@@ -466,6 +475,9 @@ static void qdr_remove_link_CT(qdr_core_t *core, qdr_action_t *action, bool disc
 
 static void qdr_set_next_hop_CT(qdr_core_t *core, qdr_action_t *action, bool discard)
 {
+    if (!!discard)
+        return;
+
     int router_maskbit    = action->args.route_table.router_maskbit;
     int nh_router_maskbit = action->args.route_table.nh_router_maskbit;
 
@@ -499,6 +511,9 @@ static void qdr_set_next_hop_CT(qdr_core_t *core, qdr_action_t *action, bool dis
 
 static void qdr_remove_next_hop_CT(qdr_core_t *core, qdr_action_t *action, bool discard)
 {
+    if (!!discard)
+        return;
+
     int router_maskbit = action->args.route_table.router_maskbit;
 
     if (router_maskbit >= qd_bitmask_width() || router_maskbit < 0) {
@@ -513,6 +528,9 @@ static void qdr_remove_next_hop_CT(qdr_core_t *core, qdr_action_t *action, bool
 
 static void qdr_set_cost_CT(qdr_core_t *core, qdr_action_t *action, bool discard)
 {
+    if (!!discard)
+        return;
+
     int router_maskbit = action->args.route_table.router_maskbit;
     int cost           = action->args.route_table.cost;
 

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