[ 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-unsubscr...@qpid.apache.org For additional commands, e-mail: dev-h...@qpid.apache.org