You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2017/03/29 11:13:54 UTC
svn commit: r1789336 - in
/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src:
main/java/org/apache/qpid/server/protocol/v0_10/
main/java/org/apache/qpid/server/protocol/v0_10/transport/
test/java/org/apache/qpid/server/protocol/v0_10/transport/
Author: orudyy
Date: Wed Mar 29 11:13:54 2017
New Revision: 1789336
URL: http://svn.apache.org/viewvc?rev=1789336&view=rev
Log:
QPID-7723: Optimize evaluation of metadata storable size for AMQP 0-10
Added:
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/EncoderUtils.java
Modified:
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageMetaData_0_10.java
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/AbstractEncoder.java
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/Acquired.java
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/DeliveryProperties.java
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/Encoder.java
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/ExchangeBoundResult.java
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/ExchangeQueryResult.java
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/FragmentProperties.java
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/GetTimeoutResult.java
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/MessageProperties.java
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/MessageResumeResult.java
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/Method.java
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/QueueQueryResult.java
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/RecoverResult.java
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/ReplyTo.java
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/SessionCommandFragment.java
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/SessionHeader.java
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/Struct.java
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/XaResult.java
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/Xid.java
qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/test/java/org/apache/qpid/server/protocol/v0_10/transport/BBEncoderTest.java
Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageMetaData_0_10.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageMetaData_0_10.java?rev=1789336&r1=1789335&r2=1789336&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageMetaData_0_10.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/MessageMetaData_0_10.java Wed Mar 29 11:13:54 2017
@@ -27,6 +27,7 @@ import java.util.List;
import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
import org.apache.qpid.server.message.AMQMessageHeader;
import org.apache.qpid.server.plugin.MessageMetaDataType;
+import org.apache.qpid.server.protocol.v0_10.transport.EncoderUtils;
import org.apache.qpid.server.store.StorableMessageMetaData;
import org.apache.qpid.server.protocol.v0_10.transport.DeliveryProperties;
import org.apache.qpid.server.protocol.v0_10.transport.Header;
@@ -83,17 +84,32 @@ public class MessageMetaData_0_10 implem
return TYPE;
}
- public synchronized int getStorableSize()
+
+ public int getStorableSize()
{
- QpidByteBuffer buf = _encoded;
+ int len = 0;
+
+ len += 8; // arrival time
+ len += 4; // body size
+ len += 4; // headers length
- if(buf == null)
+ if(_header.getDeliveryProperties() != null)
+ {
+ len += EncoderUtils.getStruct32Length(_header.getDeliveryProperties());
+ }
+ if(_header.getMessageProperties() != null)
{
- buf = encodeAsBuffer();
- _encoded = buf;
+ len += EncoderUtils.getStruct32Length(_header.getMessageProperties());
}
+ if(_header.getNonStandardProperties() != null)
+ {
+ for(Struct header : _header.getNonStandardProperties())
+ {
+ len += EncoderUtils.getStruct32Length(header);
+ }
- return buf.limit();
+ }
+ return len;
}
private QpidByteBuffer encodeAsBuffer()
Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/AbstractEncoder.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/AbstractEncoder.java?rev=1789336&r1=1789335&r2=1789336&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/AbstractEncoder.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/AbstractEncoder.java Wed Mar 29 11:13:54 2017
@@ -24,7 +24,6 @@ import static org.apache.qpid.server.tra
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
-import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@@ -40,24 +39,6 @@ import java.util.UUID;
public abstract class AbstractEncoder implements Encoder
{
- private static Map<Class<?>,Type> ENCODINGS = new HashMap<Class<?>,Type>();
- static
- {
- ENCODINGS.put(Boolean.class, Type.BOOLEAN);
- ENCODINGS.put(String.class, Type.STR16);
- ENCODINGS.put(Long.class, Type.INT64);
- ENCODINGS.put(Integer.class, Type.INT32);
- ENCODINGS.put(Short.class, Type.INT16);
- ENCODINGS.put(Byte.class, Type.INT8);
- ENCODINGS.put(Map.class, Type.MAP);
- ENCODINGS.put(List.class, Type.LIST);
- ENCODINGS.put(Float.class, Type.FLOAT);
- ENCODINGS.put(Double.class, Type.DOUBLE);
- ENCODINGS.put(Character.class, Type.CHAR);
- ENCODINGS.put(byte[].class, Type.VBIN32);
- ENCODINGS.put(UUID.class, Type.UUID);
- ENCODINGS.put(Xid.class, Type.STRUCT32);
- }
private final Map<String,byte[]> str8cache = new LinkedHashMap<String,byte[]>()
{
@@ -281,58 +262,6 @@ public abstract class AbstractEncoder im
}
}
- private Type encoding(Object value)
- {
- if (value == null)
- {
- return Type.VOID;
- }
-
- Class klass = value.getClass();
- Type type = resolve(klass);
-
- if (type == null)
- {
- throw new IllegalArgumentException
- ("unable to resolve type: " + klass + ", " + value);
- }
- else
- {
- return type;
- }
- }
-
- static final Type resolve(Class klass)
- {
- Type type = ENCODINGS.get(klass);
- if (type != null)
- {
- return type;
- }
-
- Class sup = klass.getSuperclass();
- if (sup != null)
- {
- type = resolve(klass.getSuperclass());
-
- if (type != null)
- {
- return type;
- }
- }
-
- for (Class iface : klass.getInterfaces())
- {
- type = resolve(iface);
- if (type != null)
- {
- return type;
- }
- }
-
- return null;
- }
-
public void writeMap(Map<String,Object> map)
{
int pos = beginSize32();
@@ -350,7 +279,7 @@ public abstract class AbstractEncoder im
{
String key = entry.getKey();
Object value = entry.getValue();
- Type type = encoding(value);
+ Type type = EncoderUtils.getEncodingType(value);
writeStr8(key);
put(type.getCode());
write(type, value);
@@ -372,7 +301,7 @@ public abstract class AbstractEncoder im
{
for (Object value : list)
{
- Type type = encoding(value);
+ Type type = EncoderUtils.getEncodingType(value);
put(type.getCode());
write(type, value);
}
@@ -398,7 +327,7 @@ public abstract class AbstractEncoder im
}
else
{
- type = encoding(array.get(0));
+ type = EncoderUtils.getEncodingType(array.get(0));
}
put(type.getCode());
Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/Acquired.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/Acquired.java?rev=1789336&r1=1789335&r2=1789336&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/Acquired.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/Acquired.java Wed Mar 29 11:13:54 2017
@@ -134,5 +134,9 @@ public final class Acquired extends Stru
return result;
}
-
+ @Override
+ public int getEncodedLength()
+ {
+ throw new UnsupportedOperationException();
+ }
}
Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/DeliveryProperties.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/DeliveryProperties.java?rev=1789336&r1=1789335&r2=1789336&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/DeliveryProperties.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/DeliveryProperties.java Wed Mar 29 11:13:54 2017
@@ -517,6 +517,51 @@ public final class DeliveryProperties ex
}
+ public int getEncodedLength()
+ {
+ int len = 0;
+
+ len += 2; // packing_flags
+
+ if ((packing_flags & 2048) != 0)
+ {
+ len += 1; // priority
+ }
+ if ((packing_flags & 4096) != 0)
+ {
+ len += 1; // deliveryMode
+ }
+ if ((packing_flags & 8192) != 0)
+ {
+ len += 8; // ttl
+ }
+ if ((packing_flags & 16384) != 0)
+ {
+ len += 8; // timestamp
+ }
+ if ((packing_flags & 32768) != 0)
+ {
+ len += 8; // expiration
+ }
+ if ((packing_flags & 1) != 0)
+ {
+ len += EncoderUtils.getStr8Length(this.exchange);
+ }
+ if ((packing_flags & 2) != 0)
+ {
+ len += EncoderUtils.getStr8Length(this.routingKey);
+ }
+ if ((packing_flags & 4) != 0)
+ {
+ len += EncoderUtils.getStr16Length(this.resumeId);
+ }
+ if ((packing_flags & 8) != 0)
+ {
+ len += 8; // resumeTtl
+ }
+ return len;
+ }
+
public void read(Decoder dec)
{
packing_flags = (short) dec.readUint16();
@@ -559,6 +604,7 @@ public final class DeliveryProperties ex
}
+
public Map<String,Object> getFields()
{
Map<String,Object> result = new LinkedHashMap<String,Object>();
@@ -615,6 +661,4 @@ public final class DeliveryProperties ex
return result;
}
-
-
}
Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/Encoder.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/Encoder.java?rev=1789336&r1=1789335&r2=1789336&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/Encoder.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/Encoder.java Wed Mar 29 11:13:54 2017
@@ -24,9 +24,6 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;
-import org.apache.qpid.server.protocol.v0_10.transport.RangeSet;
-import org.apache.qpid.server.protocol.v0_10.transport.Struct;
-
/**
* Encoder interface.
Added: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/EncoderUtils.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/EncoderUtils.java?rev=1789336&view=auto
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/EncoderUtils.java (added)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/EncoderUtils.java Wed Mar 29 11:13:54 2017
@@ -0,0 +1,339 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+package org.apache.qpid.server.protocol.v0_10.transport;
+
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+public class EncoderUtils
+{
+ private static final Map<Class<?>, Type> ENCODINGS = new HashMap<>();
+ static
+ {
+ ENCODINGS.put(Boolean.class, Type.BOOLEAN);
+ ENCODINGS.put(String.class, Type.STR16);
+ ENCODINGS.put(Long.class, Type.INT64);
+ ENCODINGS.put(Integer.class, Type.INT32);
+ ENCODINGS.put(Short.class, Type.INT16);
+ ENCODINGS.put(Byte.class, Type.INT8);
+ ENCODINGS.put(Map.class, Type.MAP);
+ ENCODINGS.put(List.class, Type.LIST);
+ ENCODINGS.put(Float.class, Type.FLOAT);
+ ENCODINGS.put(Double.class, Type.DOUBLE);
+ ENCODINGS.put(Character.class, Type.CHAR);
+ ENCODINGS.put(byte[].class, Type.VBIN32);
+ ENCODINGS.put(UUID.class, Type.UUID);
+ ENCODINGS.put(Xid.class, Type.STRUCT32);
+ }
+
+ public static Type getEncodingType(Object value)
+ {
+ if (value == null)
+ {
+ return Type.VOID;
+ }
+
+ Class klass = value.getClass();
+ Type type = resolve(klass);
+
+ if (type == null)
+ {
+ throw new IllegalArgumentException
+ ("unable to resolve type: " + klass + ", " + value);
+ }
+ else
+ {
+ return type;
+ }
+ }
+
+ public static int getStruct32Length(Struct s)
+ {
+ if (s == null)
+ {
+ return 4;
+ }
+ else
+ {
+ int len = 0;
+ len += 4; // size
+ len += 2; // encoded type
+ len += s.getEncodedLength();
+
+ return len;
+ }
+ }
+
+ public static int getArrayLength(List<Object> value)
+ {
+ int len = 0;
+ len += 4; // size
+ if (value != null && !value.isEmpty())
+ {
+ len += 1; // type
+ len += 4; // array size
+
+ final Type type = getEncodingType(value.get(0));
+ for (Object v : value)
+ {
+ len += getTypeLength(type, v);
+ }
+
+ }
+
+ return len;
+
+ }
+
+ public static int getListLength(List<Object> value)
+ {
+ int len = 0;
+ len += 4; // size
+ if (value != null && !value.isEmpty())
+ {
+ len += 4; // list size
+ for (Object v : value)
+ {
+ final Type type = getEncodingType(v);
+ len += 1; // type code
+ len += getTypeLength(type, v);
+ }
+ }
+ return len;
+ }
+
+ public static int getStr8Length(String s)
+ {
+ if (s == null)
+ {
+ return 1;
+ }
+ else
+ {
+ int length = s.getBytes(StandardCharsets.UTF_8).length;
+ if (length > 255)
+ {
+ throw new IllegalArgumentException(String.format("String too long (%d) for str8", length));
+ }
+ return 1 + length;
+ }
+ }
+
+ public static int getStr16Length(String s)
+ {
+ if (s == null)
+ {
+ return 2;
+ }
+ else
+ {
+ int length = s.getBytes(StandardCharsets.UTF_8).length;
+ if (length > 65535)
+ {
+ throw new IllegalArgumentException(String.format("String too long (%d) for str16", length));
+ }
+ return 2 + length;
+ }
+ }
+
+ public static int getVbin16Length(byte[] bytes)
+ {
+ if (bytes == null)
+ {
+ return 2;
+ }
+ else
+ {
+ return 2 + bytes.length;
+ }
+ }
+
+ public static int getStructLength(int type, Struct s)
+ {
+ int len = 0;
+
+ if (s == null)
+ {
+ s = Struct.create(type);
+ }
+
+ int width = s.getSizeWidth();
+
+ if (width > 0)
+ {
+ switch (width)
+ {
+ case 1:
+ case 2:
+ case 4:
+ len += width;
+ break;
+ default:
+ throw new IllegalStateException("illegal width: " + width);
+ }
+ }
+
+ if (type > 0)
+ {
+ len += 2; // type
+ }
+
+ len += s.getEncodedLength();
+
+ return len;
+
+
+ }
+
+ public static int getMapLength(Map<String, Object> map)
+ {
+ int len = 0;
+
+ len += 4; // size
+ if (map != null)
+ {
+ len += 4; // map size
+ for (Map.Entry<String,Object> entry : map.entrySet())
+ {
+ String key = entry.getKey();
+ Object value = entry.getValue();
+ len += getStr8Length(key);
+ len += 1; // type code
+ Type type = getEncodingType(value);
+ len += getTypeLength(type, value);
+ }
+ }
+
+ return len;
+ }
+
+ private static Type resolve(Class klass)
+ {
+ Type type = ENCODINGS.get(klass);
+ if (type != null)
+ {
+ return type;
+ }
+
+ Class sup = klass.getSuperclass();
+ if (sup != null)
+ {
+ type = resolve(klass.getSuperclass());
+
+ if (type != null)
+ {
+ return type;
+ }
+ }
+
+ for (Class iface : klass.getInterfaces())
+ {
+ type = resolve(iface);
+ if (type != null)
+ {
+ return type;
+ }
+ }
+
+ return null;
+ }
+
+ private static int getTypeLength(Type t, Object value)
+ {
+ switch (t)
+ {
+ case VOID:
+ return 0;
+
+ case BIN8:
+ case UINT8:
+ case INT8:
+ case CHAR:
+ case BOOLEAN:
+ return 1;
+
+ case BIN16:
+ case UINT16:
+ case INT16:
+ return 2;
+
+ case BIN32:
+ case UINT32:
+ case CHAR_UTF32:
+ case INT32:
+ case FLOAT:
+ return 4;
+
+ case BIN64:
+ case UINT64:
+ case INT64:
+ case DATETIME:
+ case DOUBLE:
+ return 8;
+
+ case UUID:
+ return 16;
+
+ case STR8:
+ return getStr8Length((String) value);
+
+ case STR16:
+ return getStr16Length((String) value);
+
+ case STR8_LATIN:
+ case STR8_UTF16:
+ case STR16_LATIN:
+ case STR16_UTF16:
+ String str = (String) value;
+ return t.getWidth() + (str == null ? 0 : str.getBytes(StandardCharsets.UTF_8).length);
+
+ case MAP:
+ return getMapLength((Map<String, Object>) value);
+
+ case LIST:
+ return getListLength((List<Object>) value);
+
+ case ARRAY:
+ return getArrayLength((List<Object>) value);
+
+ case STRUCT32:
+ return getStruct32Length((Struct) value);
+
+ case BIN40:
+ case DEC32:
+ case BIN72:
+ case DEC64:
+ return t.getWidth() + (value == null ? 0 : ((byte[])value).length);
+
+ default:
+ if (!(value instanceof byte[]))
+ {
+ throw new IllegalArgumentException("Expecting byte array was " + (value == null
+ ? "null"
+ : value.getClass()));
+ }
+ return t.getWidth() + (value == null ? 0 : ((byte[])value).length);
+ }
+ }
+}
Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/ExchangeBoundResult.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/ExchangeBoundResult.java?rev=1789336&r1=1789335&r2=1789336&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/ExchangeBoundResult.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/ExchangeBoundResult.java Wed Mar 29 11:13:54 2017
@@ -294,5 +294,10 @@ public final class ExchangeBoundResult e
return result;
}
+ @Override
+ public int getEncodedLength()
+ {
+ throw new UnsupportedOperationException();
+ }
}
Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/ExchangeQueryResult.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/ExchangeQueryResult.java?rev=1789336&r1=1789335&r2=1789336&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/ExchangeQueryResult.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/ExchangeQueryResult.java Wed Mar 29 11:13:54 2017
@@ -261,5 +261,10 @@ public final class ExchangeQueryResult e
return result;
}
+ @Override
+ public int getEncodedLength()
+ {
+ throw new UnsupportedOperationException();
+ }
}
Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/FragmentProperties.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/FragmentProperties.java?rev=1789336&r1=1789335&r2=1789336&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/FragmentProperties.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/FragmentProperties.java Wed Mar 29 11:13:54 2017
@@ -217,5 +217,11 @@ public final class FragmentProperties ex
return result;
}
+ @Override
+ public int getEncodedLength()
+ {
+ throw new UnsupportedOperationException();
+ }
+
}
Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/GetTimeoutResult.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/GetTimeoutResult.java?rev=1789336&r1=1789335&r2=1789336&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/GetTimeoutResult.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/GetTimeoutResult.java Wed Mar 29 11:13:54 2017
@@ -132,5 +132,11 @@ public final class GetTimeoutResult exte
return result;
}
+ @Override
+ public int getEncodedLength()
+ {
+ throw new UnsupportedOperationException();
+ }
+
}
Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/MessageProperties.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/MessageProperties.java?rev=1789336&r1=1789335&r2=1789336&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/MessageProperties.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/MessageProperties.java Wed Mar 29 11:13:54 2017
@@ -389,6 +389,52 @@ public final class MessageProperties ext
}
+ @Override
+ public int getEncodedLength()
+ {
+ int len = 0;
+
+ len += 2; // packing_flags
+
+ if ((packing_flags & 256) != 0)
+ {
+ len += 8; // contentLength
+ }
+ if ((packing_flags & 512) != 0)
+ {
+ len += 16; // messageId
+ }
+ if ((packing_flags & 1024) != 0)
+ {
+ len += EncoderUtils.getVbin16Length(this.correlationId);
+ }
+ if ((packing_flags & 2048) != 0)
+ {
+ len += EncoderUtils.getStructLength(ReplyTo.TYPE, this.replyTo);
+ }
+ if ((packing_flags & 4096) != 0)
+ {
+ len += EncoderUtils.getStr8Length(this.contentType);
+ }
+ if ((packing_flags & 8192) != 0)
+ {
+ len += EncoderUtils.getStr8Length(this.contentEncoding);
+ }
+ if ((packing_flags & 16384) != 0)
+ {
+ len += EncoderUtils.getVbin16Length(this.userId);
+ }
+ if ((packing_flags & 32768) != 0)
+ {
+ len += EncoderUtils.getVbin16Length(this.appId);
+ }
+ if ((packing_flags & 1) != 0)
+ {
+ len += EncoderUtils.getMapLength(this.applicationHeaders);
+ }
+ return len;
+ }
+
public void read(Decoder dec)
{
packing_flags = (short) dec.readUint16();
@@ -477,4 +523,5 @@ public final class MessageProperties ext
}
+
}
Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/MessageResumeResult.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/MessageResumeResult.java?rev=1789336&r1=1789335&r2=1789336&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/MessageResumeResult.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/MessageResumeResult.java Wed Mar 29 11:13:54 2017
@@ -132,5 +132,10 @@ public final class MessageResumeResult e
return result;
}
+ @Override
+ public int getEncodedLength()
+ {
+ throw new UnsupportedOperationException();
+ }
}
Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/Method.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/Method.java?rev=1789336&r1=1789335&r2=1789336&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/Method.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/Method.java Wed Mar 29 11:13:54 2017
@@ -176,6 +176,12 @@ public abstract class Method extends Str
return completionListener != null;
}
+ @Override
+ public final int getEncodedLength()
+ {
+ throw new UnsupportedOperationException();
+ }
+
public String toString()
{
StringBuilder str = new StringBuilder();
Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/QueueQueryResult.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/QueueQueryResult.java?rev=1789336&r1=1789335&r2=1789336&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/QueueQueryResult.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/QueueQueryResult.java Wed Mar 29 11:13:54 2017
@@ -421,5 +421,11 @@ public final class QueueQueryResult exte
return result;
}
+ @Override
+ public int getEncodedLength()
+ {
+ throw new UnsupportedOperationException();
+ }
+
}
Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/RecoverResult.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/RecoverResult.java?rev=1789336&r1=1789335&r2=1789336&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/RecoverResult.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/RecoverResult.java Wed Mar 29 11:13:54 2017
@@ -134,5 +134,11 @@ public final class RecoverResult extends
return result;
}
+ @Override
+ public int getEncodedLength()
+ {
+ throw new UnsupportedOperationException();
+ }
+
}
Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/ReplyTo.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/ReplyTo.java?rev=1789336&r1=1789335&r2=1789336&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/ReplyTo.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/ReplyTo.java Wed Mar 29 11:13:54 2017
@@ -145,6 +145,25 @@ public final class ReplyTo extends Struc
}
+ @Override
+ public int getEncodedLength()
+ {
+ int len = 0;
+
+ len += 2; // packing_flags
+
+ if ((packing_flags & 256) != 0)
+ {
+ len += EncoderUtils.getStr8Length(this.exchange);
+ }
+ if ((packing_flags & 512) != 0)
+ {
+ len += EncoderUtils.getStr8Length(this.routingKey);
+ }
+ return len;
+ }
+
+
public void read(Decoder dec)
{
packing_flags = (short) dec.readUint16();
Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/SessionCommandFragment.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/SessionCommandFragment.java?rev=1789336&r1=1789335&r2=1789336&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/SessionCommandFragment.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/SessionCommandFragment.java Wed Mar 29 11:13:54 2017
@@ -131,5 +131,10 @@ public final class SessionCommandFragmen
return result;
}
+ @Override
+ public int getEncodedLength()
+ {
+ throw new UnsupportedOperationException();
+ }
}
Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/SessionHeader.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/SessionHeader.java?rev=1789336&r1=1789335&r2=1789336&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/SessionHeader.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/SessionHeader.java Wed Mar 29 11:13:54 2017
@@ -138,5 +138,11 @@ public final class SessionHeader extends
return result;
}
+ @Override
+ public int getEncodedLength()
+ {
+ throw new UnsupportedOperationException();
+ }
+
}
Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/Struct.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/Struct.java?rev=1789336&r1=1789335&r2=1789336&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/Struct.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/Struct.java Wed Mar 29 11:13:54 2017
@@ -111,6 +111,8 @@ public abstract class Struct implements
public abstract Map<String,Object> getFields();
+ public abstract int getEncodedLength();
+
public String toString()
{
StringBuilder str = new StringBuilder();
Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/XaResult.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/XaResult.java?rev=1789336&r1=1789335&r2=1789336&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/XaResult.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/XaResult.java Wed Mar 29 11:13:54 2017
@@ -134,5 +134,12 @@ public final class XaResult extends Stru
return result;
}
+ @Override
+ public int getEncodedLength()
+ {
+ throw new UnsupportedOperationException();
+ }
+
+
}
Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/Xid.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/Xid.java?rev=1789336&r1=1789335&r2=1789336&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/Xid.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/Xid.java Wed Mar 29 11:13:54 2017
@@ -215,4 +215,11 @@ public final class Xid extends Struct {
return result;
}
+
+ @Override
+ public int getEncodedLength()
+ {
+ throw new UnsupportedOperationException();
+ }
+
}
Modified: qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/test/java/org/apache/qpid/server/protocol/v0_10/transport/BBEncoderTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/test/java/org/apache/qpid/server/protocol/v0_10/transport/BBEncoderTest.java?rev=1789336&r1=1789335&r2=1789336&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/test/java/org/apache/qpid/server/protocol/v0_10/transport/BBEncoderTest.java (original)
+++ qpid/java/trunk/broker-plugins/amqp-0-10-protocol/src/test/java/org/apache/qpid/server/protocol/v0_10/transport/BBEncoderTest.java Wed Mar 29 11:13:54 2017
@@ -21,14 +21,17 @@
package org.apache.qpid.server.protocol.v0_10.transport;
-import org.apache.qpid.test.utils.QpidTestCase;
+import static java.nio.charset.StandardCharsets.UTF_8;
+import static org.junit.Assert.assertArrayEquals;
import java.nio.ByteBuffer;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
-/**
- * BBEncoderTest
- *
- */
+import org.apache.qpid.test.utils.QpidTestCase;
public class BBEncoderTest extends QpidTestCase
{
@@ -45,4 +48,63 @@ public class BBEncoderTest extends QpidT
assertEquals(0xBEEFDEAD, buf.getInt(4));
}
+
+ public void testReadWriteStruct()
+ {
+ BBEncoder encoder = new BBEncoder(4);
+
+ ReplyTo replyTo = new ReplyTo("amq.direct", "test");
+ encoder.writeStruct(ReplyTo.TYPE, replyTo);
+
+ ByteBuffer buffer = encoder.buffer();
+
+ assertEquals("Unexpected size", EncoderUtils.getStructLength(ReplyTo.TYPE, replyTo), buffer.remaining());
+
+ BBDecoder decoder = new BBDecoder();
+ decoder.init(buffer);
+
+ ReplyTo decoded = (ReplyTo)decoder.readStruct(ReplyTo.TYPE);
+
+ assertEquals("Unexpected exchange", replyTo.getExchange(), decoded.getExchange());
+ assertEquals("Unexpected routing key", replyTo.getRoutingKey(), decoded.getRoutingKey());
+ }
+
+ public void testReadWriteStruct32()
+ {
+ BBEncoder encoder = new BBEncoder(4);
+ Map<String, Object> applicationHeaders = new HashMap<>();
+ applicationHeaders.put("testProperty", "testValue");
+ applicationHeaders.put("list", Arrays.asList("a", 1, 2.0));
+ applicationHeaders.put("map", Collections.singletonMap("mapKey", "mapValue"));
+ MessageProperties messageProperties = new MessageProperties(10,
+ UUID.randomUUID(),
+ "abc".getBytes(UTF_8),
+ new ReplyTo("amq.direct", "test"),
+ "text/plain",
+ "identity",
+ "cba".getBytes(UTF_8),
+ "app".getBytes(UTF_8),
+ applicationHeaders);
+
+ encoder.writeStruct32(messageProperties);
+
+ ByteBuffer buffer = encoder.buffer();
+
+ assertEquals("Unexpected size", EncoderUtils.getStruct32Length(messageProperties), buffer.remaining());
+
+ BBDecoder decoder = new BBDecoder();
+ decoder.init(buffer);
+
+ MessageProperties decoded = (MessageProperties)decoder.readStruct32();
+
+ assertEquals("Unexpected content length", messageProperties.getContentLength(), decoded.getContentLength());
+ assertEquals("Unexpected message id", messageProperties.getMessageId(), decoded.getMessageId());
+ assertArrayEquals("Unexpected correlation id", messageProperties.getCorrelationId(), decoded.getCorrelationId());
+ assertEquals("Unexpected reply to", messageProperties.getReplyTo(), decoded.getReplyTo());
+ assertEquals("Unexpected content type", messageProperties.getContentType(), decoded.getContentType());
+ assertEquals("Unexpected content encoding", messageProperties.getContentEncoding(), decoded.getContentEncoding());
+ assertArrayEquals("Unexpected user id", messageProperties.getUserId(), decoded.getUserId());
+ assertArrayEquals("Unexpected application id", messageProperties.getAppId(), decoded.getAppId());
+ assertEquals("Unexpected application headers", messageProperties.getApplicationHeaders(), decoded.getApplicationHeaders());
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org