qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (DISPATCH-179) Refactor Router Core
Date Mon, 23 Nov 2015 15:17:11 GMT

    [ https://issues.apache.org/jira/browse/DISPATCH-179?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15022244#comment-15022244
] 

ASF GitHub Bot commented on DISPATCH-179:
-----------------------------------------

Github user ted-ross commented on a diff in the pull request:

    https://github.com/apache/qpid-dispatch/pull/36#discussion_r45614279
  
    --- Diff: src/router_core/management_agent.c ---
    @@ -268,6 +269,62 @@ static void qd_core_agent_read_handler(qd_dispatch_t            
 *qd,
     }
     
     
    +/**
    + * Returns true if all the keys contained in the body map are applicable to a waypoints,
false otherwise
    + * @see qdr_waypoint_columns
    + */
    +static bool qd_is_valid_waypoint_keys(qd_parsed_field_t *in_body)
    +{
    +    if(in_body != 0 && qd_parse_is_map(in_body)) {
    +        //
    +        // A map containing attributes with invalid values for an entity MUST result
in a failure response with a statusCode of 400 (Bad Request).
    +        //
    +        int j=0;
    +        qd_parsed_field_t *field = qd_parse_sub_key(in_body, j);
    +        while (field) {
    +            bool found = false;
    +            for(int i = 1; i < QDR_WAYPOINT_COLUMN_COUNT; i++) {
    +                if (qd_field_iterator_equal(qd_parse_raw(field), (unsigned char*)qdr_waypoint_columns[i]))
{
    +                    found = true;
    +                    break;
    +                }
    +            }
    +            if (!found) // Some bad field was specified in the body map. Reject this
request
    +                return false;
    +            j++;
    +            field = qd_parse_sub_key(in_body, j);
    +        }
    +    }
    +    else
    +        // The body is either empty or the body is not a map, return false
    +        return false;
    +
    +    return true;
    +}
    +
    +
    +/**
    + * The body map containing any attributes that are not applicable for the entity being
updated MUST result in a failure response with a statusCode of 400 (Bad Request).
    + */
    +static bool qd_check_body(qd_router_entity_type_t  entity_type,
    +                          qd_parsed_field_t       *in_body,
    +                          qd_composed_field_t     *out_body,
    +                          qd_management_context_t *ctx)
    +{
    +    if (entity_type == QD_ROUTER_WAYPOINT) {
    +        if(!qd_is_valid_waypoint_keys(in_body)){
    --- End diff --
    
    Rather than have a proliferation of nearly identical type-specific validation functions,
why not do a more general check on the appropriate attribute-name array?  This way, you can
write the logic once for all types.


> Refactor Router Core
> --------------------
>
>                 Key: DISPATCH-179
>                 URL: https://issues.apache.org/jira/browse/DISPATCH-179
>             Project: Qpid Dispatch
>          Issue Type: Improvement
>          Components: Router Node
>            Reporter: Ted Ross
>            Assignee: Ted Ross
>             Fix For: 0.6
>
>
> Refactor the core router function to clean up the architecture and to fix the significant
lock contention issue that exists in 0.5.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

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


Mime
View raw message