qpid-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rob Godfrey (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (QPID-8245) [Broker-J] [AMQP 0-8..0-91] Decode FiledTable fields on demand
Date Tue, 25 Sep 2018 18:19:00 GMT

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

Rob Godfrey commented on QPID-8245:
-----------------------------------

[~alex.rufous] My assumption is that it will be quicker to "skip" than to decode a value,
and that the only time on the critical path where get(<propertyname>) will ever be called
will be on the filtering code, and that in all other cases (such as converting a message to
a different protocol, or displaying the headers in the console) we can ignore the overhead
of completely re-decoding... so the code would look something like this:

{code}
private static final Object NOT_PRESENT = new Object();

public Object get(String key)
{
    Object value = _cached.get(key);
    if(value == null)
    {
        value = findValueForKey(key);
        _cached.putIfAbsent(key, value);
    }
    return value == NOT_PRESENT ? null : value;
}

private Object findValueForKey(key)
{
    AMQShortString keyAsShortString = AMQShortString.valueOf(key);
    QpidByteBuffer dup = _encodedForm.duplicate();
    while(dup.hasRemaining())
    {
        if(nextKeyEquals(dup, keyAsShortString)
        {
            AMQTypedValue value = AMQTypedValue.readFromBuffer(slice);
            return value.getValue();
        }
        else
        {
            skipValue(dup);
        }
    }
    return NOT_PRESENT;
}
{code}

> [Broker-J] [AMQP 0-8..0-91] Decode FiledTable fields on demand
> --------------------------------------------------------------
>
>                 Key: QPID-8245
>                 URL: https://issues.apache.org/jira/browse/QPID-8245
>             Project: Qpid
>          Issue Type: Improvement
>          Components: Broker-J
>    Affects Versions: qpid-java-broker-7.1.0
>            Reporter: Alex Rudyy
>            Priority: Major
>             Fix For: qpid-java-broker-7.1.0
>
>         Attachments: 0001-QPID-8245-Broker-J-Stop-rellocating-message-headers-.patch,
0002-QPID-8245-Add-factory-methods-to-create-field-table-.patch, 0003-QPID-8245-Remove-FiledTable-setters-methods-modifyin.patch,
0004-QPID-8245-Decode-field-table-properties-when-require.patch, 0005-QPID-8245-Remove-methods-getXXX-in-order-to-simplify.patch,
0005-QPID-8245-Split-field-table-into-2-implementations.patch
>
>
> At the moment all field table properties are decoded when decode functionality is invoked.
For use cases when only some of the field table properties are queried, the decoding functionality
can be changed to stop decoding on getting the requested property. Potentially, such approach
can improve the performance of routing transient messages when destinations are bound to the
routing exchange using selector filters. As filter expression contains only some properties,
the decoding of message headers can be stopped on getting all fields specified in selector
expression.
> The idea is illustrated by Rob Godfrey on [QPID-8238|https://issues.apache.org/jira/browse/QPID-8238?focusedCommentId=16601936&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-16601936]



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

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


Mime
View raw message