You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by kw...@apache.org on 2018/04/26 15:47:39 UTC

[1/2] qpid-broker-j git commit: QPID-7830: [Broker-J] [AMQP 0-8..0-91] Mechanically refactor AMQPShortString introducing factory methods and hiding constructors

Repository: qpid-broker-j
Updated Branches:
  refs/heads/master 78fe397ad -> 7d7b50824


QPID-7830: [Broker-J] [AMQP 0-8..0-91] Mechanically refactor AMQPShortString introducing factory methods and hiding constructors


Project: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/commit/0a3dfc88
Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/0a3dfc88
Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/0a3dfc88

Branch: refs/heads/master
Commit: 0a3dfc883b7af756fbdf076665eaae4ad8202bf7
Parents: 78fe397
Author: Keith Wall <kw...@apache.org>
Authored: Thu Apr 26 10:40:38 2018 +0100
Committer: Keith Wall <kw...@apache.org>
Committed: Thu Apr 26 14:47:20 2018 +0100

----------------------------------------------------------------------
 .../berkeleydb/AMQShortStringEncoding.java      |  2 +-
 .../berkeleydb/upgrade/UpgradeFrom4To5.java     |  2 +-
 .../berkeleydb/AMQShortStringEncodingTest.java  |  4 +-
 .../store/berkeleydb/BDBMessageStoreTest.java   |  4 +-
 .../server/protocol/v0_8/AMQShortString.java    | 92 +++++---------------
 .../protocol/v0_8/AMQShortStringTest.java       | 24 ++---
 .../server/protocol/v0_8/FieldTableTest.java    |  2 +-
 .../qpid/server/protocol/v0_8/AMQChannel.java   |  9 +-
 .../transport/BasicContentHeaderProperties.java |  2 +-
 .../protocol/v0_8/AMQPConnection_0_8Test.java   |  6 +-
 .../transport/MessagePublishInfoImplTest.java   |  8 +-
 .../MessageConverter_0_10_to_0_8.java           | 10 +--
 .../v0_8_v1_0/MessageConverter_1_0_to_v0_8.java | 10 +--
 13 files changed, 62 insertions(+), 113 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/0a3dfc88/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AMQShortStringEncoding.java
----------------------------------------------------------------------
diff --git a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AMQShortStringEncoding.java b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AMQShortStringEncoding.java
index ce004b4..8782f65 100644
--- a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AMQShortStringEncoding.java
+++ b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/AMQShortStringEncoding.java
@@ -42,7 +42,7 @@ public class AMQShortStringEncoding
         {
             byte[] stringBytes = new byte[length];
             tupleInput.readFast(stringBytes);
-            return new AMQShortString(stringBytes);
+            return AMQShortString.createAMQShortString(stringBytes);
         }
 
     }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/0a3dfc88/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom4To5.java
----------------------------------------------------------------------
diff --git a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom4To5.java b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom4To5.java
index 9cc604d..b310081 100644
--- a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom4To5.java
+++ b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom4To5.java
@@ -307,7 +307,7 @@ public class UpgradeFrom4To5 extends AbstractStoreUpgrade
             @Override
             public void run(Database newQueueDatabase, Database newBindingsDatabase, Transaction transaction)
             {
-                AMQShortString queueNameAMQ = new AMQShortString(queueName);
+                AMQShortString queueNameAMQ = AMQShortString.createAMQShortString(queueName);
                 QueueRecord record = new QueueRecord(queueNameAMQ, null, false, null);
 
                 DatabaseEntry key = new DatabaseEntry();

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/0a3dfc88/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/AMQShortStringEncodingTest.java
----------------------------------------------------------------------
diff --git a/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/AMQShortStringEncodingTest.java b/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/AMQShortStringEncodingTest.java
index 569d0dd..991ece2 100644
--- a/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/AMQShortStringEncodingTest.java
+++ b/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/AMQShortStringEncodingTest.java
@@ -69,7 +69,7 @@ public class AMQShortStringEncodingTest extends UnitTestBase
     @Test
     public void testWriteReadShortStringWithLengthLess127()
     {
-        AMQShortString value = new AMQShortString("test");
+        AMQShortString value = AMQShortString.createAMQShortString("test");
 
         // write into tuple output
         TupleOutput tupleOutput = new TupleOutput();
@@ -89,7 +89,7 @@ public class AMQShortStringEncodingTest extends UnitTestBase
         {
             sb.append(ch);
         }
-        return new AMQShortString(sb.toString());
+        return AMQShortString.createAMQShortString(sb.toString());
     }
 
 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/0a3dfc88/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java
----------------------------------------------------------------------
diff --git a/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java b/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java
index c12a38f..2226600 100644
--- a/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java
+++ b/bdbstore/src/test/java/org/apache/qpid/server/store/berkeleydb/BDBMessageStoreTest.java
@@ -81,8 +81,8 @@ public class BDBMessageStoreTest extends MessageStoreTestCase
 
     private MessagePublishInfo createPublishInfoBody_0_8()
     {
-        return new MessagePublishInfo(new AMQShortString("exchange12345"), false, true,
-                                      new AMQShortString("routingKey12345"));
+        return new MessagePublishInfo(AMQShortString.createAMQShortString("exchange12345"), false, true,
+                                      AMQShortString.createAMQShortString("routingKey12345"));
 
     }
 

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/0a3dfc88/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQShortString.java
----------------------------------------------------------------------
diff --git a/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQShortString.java b/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQShortString.java
index b5aa4d7..41a4322 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQShortString.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQShortString.java
@@ -42,8 +42,6 @@ public final class AMQShortString implements Comparable<AMQShortString>
      * The maximum number of octets in AMQ short string as defined in AMQP specification
      */
     public static final int MAX_LENGTH = 255;
-    private static final byte MINUS = (byte)'-';
-    private static final byte ZERO = (byte) '0';
 
     private static final Logger LOGGER = LoggerFactory.getLogger(AMQShortString.class);
 
@@ -53,11 +51,10 @@ public final class AMQShortString implements Comparable<AMQShortString>
     private String _asString = null;
 
     private final int _length;
-    private static final char[] EMPTY_CHAR_ARRAY = new char[0];
 
-    public static final AMQShortString EMPTY_STRING = new AMQShortString((String)null);
+    public static final AMQShortString EMPTY_STRING = createAMQShortString((String)null);
 
-    public AMQShortString(byte[] data)
+    private AMQShortString(byte[] data)
     {
         if (data == null)
         {
@@ -72,7 +69,7 @@ public final class AMQShortString implements Comparable<AMQShortString>
         _offset = 0;
     }
 
-    public AMQShortString(String string)
+    private AMQShortString(String string)
     {
         final byte[] data = EncodingUtils.asUTF8Bytes(string);
         final int length = data.length;
@@ -96,31 +93,20 @@ public final class AMQShortString implements Comparable<AMQShortString>
         _asString = string == null ? "" : string;
     }
 
-    public static AMQShortString readAMQShortString(ByteBuffer buffer)
+    private AMQShortString(byte[] data, final int offset, final int length)
     {
-        int length = ((int) buffer.get()) & 0xff;
-        if(length == 0)
+        if (length > MAX_LENGTH)
         {
-            return null;
+            throw new IllegalArgumentException("Cannot create AMQShortString with number of octets over 255!");
         }
-        else
+        if (data == null)
         {
-            if (length > MAX_LENGTH)
-            {
-                throw new IllegalArgumentException("Cannot create AMQShortString with number of octets over 255!");
-            }
-            if(length > buffer.remaining())
-            {
-                throw new IllegalArgumentException("Cannot create AMQShortString with length "
-                                                   + length + " from a ByteBuffer with only "
-                                                   + buffer.remaining()
-                                                   + " bytes.");
-
-            }
-            byte[] data = new byte[length];
-            buffer.get(data);
-            return new AMQShortString(data, 0, length);
+            throw new NullPointerException("Cannot create AMQShortString with null data[]");
         }
+
+        _offset = offset;
+        _length = length;
+        _data = data;
     }
 
     public static AMQShortString readAMQShortString(QpidByteBuffer buffer)
@@ -150,21 +136,14 @@ public final class AMQShortString implements Comparable<AMQShortString>
         }
     }
 
-
-    public AMQShortString(byte[] data, final int offset, final int length)
+    public static AMQShortString createAMQShortString(byte[] data)
     {
-        if (length > MAX_LENGTH)
-        {
-            throw new IllegalArgumentException("Cannot create AMQShortString with number of octets over 255!");
-        }
-        if (data == null)
-        {
-            throw new NullPointerException("Cannot create AMQShortString with null data[]");
-        }
+        return new AMQShortString(data);
+    }
 
-        _offset = offset;
-        _length = length;
-        _data = data;
+    public static AMQShortString createAMQShortString(String string)
+    {
+        return new AMQShortString(string);
     }
 
     /**
@@ -348,37 +327,6 @@ public final class AMQShortString implements Comparable<AMQShortString>
         }
     }
 
-    public int toIntValue()
-    {
-        int pos = _offset;
-        int val = 0;
-
-
-        boolean isNegative = (_data[pos] == MINUS);
-        if(isNegative)
-        {
-            pos++;
-        }
-
-        final int end = _length + _offset;
-
-        while(pos < end)
-        {
-            int digit = (int) (_data[pos++] - ZERO);
-            if((digit < 0) || (digit > 9))
-            {
-                throw new NumberFormatException("\""+toString()+"\" is not a valid number");
-            }
-            val = val * 10;
-            val += digit;
-        }
-        if(isNegative)
-        {
-            val = val * -1;
-        }
-        return val;
-    }
-
     public boolean contains(final byte b)
     {
         final int end = _length + _offset;
@@ -422,7 +370,7 @@ public final class AMQShortString implements Comparable<AMQShortString>
                 }
 
             }
-            return new AMQShortString(bytes);
+            return createAMQShortString(bytes);
         }
     }
 
@@ -439,7 +387,7 @@ public final class AMQShortString implements Comparable<AMQShortString>
         }
         else
         {
-            return new AMQShortString(obj);
+            return createAMQShortString(obj);
         }
 
     }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/0a3dfc88/broker-core/src/test/java/org/apache/qpid/server/protocol/v0_8/AMQShortStringTest.java
----------------------------------------------------------------------
diff --git a/broker-core/src/test/java/org/apache/qpid/server/protocol/v0_8/AMQShortStringTest.java b/broker-core/src/test/java/org/apache/qpid/server/protocol/v0_8/AMQShortStringTest.java
index b3e568b..e2e8483 100644
--- a/broker-core/src/test/java/org/apache/qpid/server/protocol/v0_8/AMQShortStringTest.java
+++ b/broker-core/src/test/java/org/apache/qpid/server/protocol/v0_8/AMQShortStringTest.java
@@ -34,19 +34,19 @@ import org.apache.qpid.test.utils.UnitTestBase;
 public class AMQShortStringTest extends UnitTestBase
 {
 
-    public static final AMQShortString HELLO = new AMQShortString("Hello");
-    public static final AMQShortString HELL = new AMQShortString("Hell");
-    public static final AMQShortString GOODBYE = new AMQShortString("Goodbye");
-    public static final AMQShortString GOOD = new AMQShortString("Good");
-    public static final AMQShortString BYE = new AMQShortString("BYE");
+    public static final AMQShortString HELLO = AMQShortString.createAMQShortString("Hello");
+    public static final AMQShortString HELL = AMQShortString.createAMQShortString("Hell");
+    public static final AMQShortString GOODBYE = AMQShortString.createAMQShortString("Goodbye");
+    public static final AMQShortString GOOD = AMQShortString.createAMQShortString("Good");
+    public static final AMQShortString BYE = AMQShortString.createAMQShortString("BYE");
 
 
     @Test
     public void testEquals()
     {
-        assertEquals(GOODBYE, new AMQShortString("Goodbye"));
-        assertEquals(new AMQShortString("A"), new AMQShortString("A"));
-        assertFalse(new AMQShortString("A").equals(new AMQShortString("a")));
+        assertEquals(GOODBYE, AMQShortString.createAMQShortString("Goodbye"));
+        assertEquals(AMQShortString.createAMQShortString("A"), AMQShortString.createAMQShortString("A"));
+        assertFalse(AMQShortString.createAMQShortString("A").equals(AMQShortString.createAMQShortString("a")));
     }
 
     /**
@@ -57,7 +57,7 @@ public class AMQShortStringTest extends UnitTestBase
     public void testCreateAMQShortStringByteArray()
     {
         byte[] bytes = "test".getBytes(StandardCharsets.UTF_8);
-        AMQShortString string = new AMQShortString(bytes);
+        AMQShortString string = AMQShortString.createAMQShortString(bytes);
         assertEquals("constructed amq short string length differs from expected",
                             (long) 4,
                             (long) string.length());
@@ -75,7 +75,7 @@ public class AMQShortStringTest extends UnitTestBase
     @Test
     public void testCreateAMQShortStringString()
     {
-        AMQShortString string = new AMQShortString("test");
+        AMQShortString string = AMQShortString.createAMQShortString("test");
         assertEquals("constructed amq short string length differs from expected", (long) 4, (long) string.length
                 ());
 
@@ -95,7 +95,7 @@ public class AMQShortStringTest extends UnitTestBase
         byte[] bytes = test.getBytes(StandardCharsets.UTF_8);
         try
         {
-            new AMQShortString(bytes);
+            AMQShortString.createAMQShortString(bytes);
             fail("It should not be possible to create AMQShortString with length over 255");
         }
         catch (IllegalArgumentException e)
@@ -119,7 +119,7 @@ public class AMQShortStringTest extends UnitTestBase
         String test = buildString('a', 256);
         try
         {
-            new AMQShortString(test);
+            AMQShortString.createAMQShortString(test);
             fail("It should not be possible to create AMQShortString with length over 255");
         }
         catch (IllegalArgumentException e)

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/0a3dfc88/broker-core/src/test/java/org/apache/qpid/server/protocol/v0_8/FieldTableTest.java
----------------------------------------------------------------------
diff --git a/broker-core/src/test/java/org/apache/qpid/server/protocol/v0_8/FieldTableTest.java b/broker-core/src/test/java/org/apache/qpid/server/protocol/v0_8/FieldTableTest.java
index 396902e..c43916f 100644
--- a/broker-core/src/test/java/org/apache/qpid/server/protocol/v0_8/FieldTableTest.java
+++ b/broker-core/src/test/java/org/apache/qpid/server/protocol/v0_8/FieldTableTest.java
@@ -942,7 +942,7 @@ public class FieldTableTest extends UnitTestBase
     @Test
     public void testAddingAllFromFieldTableCreatedUsingEncodedBytes() throws Exception
     {
-        AMQShortString myBooleanTestProperty = new AMQShortString("myBooleanTestProperty");
+        AMQShortString myBooleanTestProperty = AMQShortString.createAMQShortString("myBooleanTestProperty");
 
         //Create a new FieldTable and use it to encode data into a byte array.
         FieldTable encodeTable = new FieldTable();

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/0a3dfc88/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java b/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java
index c76d78f..ce66c97 100644
--- a/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java
+++ b/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java
@@ -176,7 +176,8 @@ public class AMQChannel extends AbstractAMQPSession<AMQChannel, ConsumerTarget_0
 
     private List<MessageConsumerAssociation> _resendList = new ArrayList<>();
     private static final
-    AMQShortString IMMEDIATE_DELIVERY_REPLY_TEXT = new AMQShortString("Immediate delivery is not possible.");
+    AMQShortString IMMEDIATE_DELIVERY_REPLY_TEXT =
+            AMQShortString.createAMQShortString("Immediate delivery is not possible.");
 
     private final ClientDeliveryMethod _clientDeliveryMethod;
 
@@ -585,7 +586,7 @@ public class AMQChannel extends AbstractAMQPSession<AMQChannel, ConsumerTarget_0
     {
         if (tag == null)
         {
-            tag = new AMQShortString("sgen_" + getNextConsumerTag());
+            tag = AMQShortString.createAMQShortString("sgen_" + getNextConsumerTag());
         }
 
         if (_tag2SubscriptionTargetMap.containsKey(tag))
@@ -2559,7 +2560,7 @@ public class AMQChannel extends AbstractAMQPSession<AMQChannel, ConsumerTarget_0
 
         if (isDefaultExchange(exchangeName))
         {
-            if (!new AMQShortString(ExchangeDefaults.DIRECT_EXCHANGE_CLASS).equals(type))
+            if (!AMQShortString.createAMQShortString(ExchangeDefaults.DIRECT_EXCHANGE_CLASS).equals(type))
             {
                 _connection.sendConnectionClose(ErrorCodes.NOT_ALLOWED, "Attempt to redeclare default exchange: "
                                                                         + " of type "
@@ -2907,7 +2908,7 @@ public class AMQChannel extends AbstractAMQPSession<AMQChannel, ConsumerTarget_0
         // if we aren't given a queue name, we create one which we return to the client
         if ((queueStr == null) || (queueStr.length() == 0))
         {
-            queueName = new AMQShortString("tmp_" + UUID.randomUUID());
+            queueName = AMQShortString.createAMQShortString("tmp_" + UUID.randomUUID());
         }
         else
         {

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/0a3dfc88/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/transport/BasicContentHeaderProperties.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/transport/BasicContentHeaderProperties.java b/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/transport/BasicContentHeaderProperties.java
index 9b18a1e..6d3a55e 100644
--- a/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/transport/BasicContentHeaderProperties.java
+++ b/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/transport/BasicContentHeaderProperties.java
@@ -790,7 +790,7 @@ public class BasicContentHeaderProperties
 
     public void setMessageId(String messageId)
     {
-        setMessageId(messageId == null ? null : new AMQShortString(messageId));
+        setMessageId(messageId == null ? null : AMQShortString.createAMQShortString(messageId));
     }
 
     public synchronized void setMessageId(AMQShortString messageId)

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/0a3dfc88/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8Test.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8Test.java b/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8Test.java
index 3cdae66..1f6332e 100644
--- a/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8Test.java
+++ b/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/AMQPConnection_0_8Test.java
@@ -76,8 +76,8 @@ public class AMQPConnection_0_8Test extends UnitTestBase
 {
     private static final String VIRTUAL_HOST_NAME = "vhost";
     private static final byte[] SASL_RESPONSE = "response".getBytes();
-    private static final AMQShortString LOCALE = new AMQShortString("en_US");
-    private static final AMQShortString SASL_MECH = new AMQShortString("MECH");
+    private static final AMQShortString LOCALE = AMQShortString.createAMQShortString("en_US");
+    private static final AMQShortString SASL_MECH = AMQShortString.createAMQShortString("MECH");
 
     private TaskExecutorImpl _taskExecutor;
     private Broker _broker;
@@ -223,7 +223,7 @@ public class AMQPConnection_0_8Test extends UnitTestBase
         conn.receiveConnectionStartOk(new FieldTable(), SASL_MECH, SASL_RESPONSE, LOCALE);
         int maxChannels = 10;
         conn.receiveConnectionTuneOk(maxChannels, 65535, 0);
-        conn.receiveConnectionOpen(new AMQShortString(VIRTUAL_HOST_NAME), AMQShortString.EMPTY_STRING, false);
+        conn.receiveConnectionOpen(AMQShortString.createAMQShortString(VIRTUAL_HOST_NAME), AMQShortString.EMPTY_STRING, false);
 
         // check the channel count is correct
         int channelCount = conn.getSessionModels().size();

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/0a3dfc88/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/transport/MessagePublishInfoImplTest.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/transport/MessagePublishInfoImplTest.java b/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/transport/MessagePublishInfoImplTest.java
index 1e0f5db..9348028 100644
--- a/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/transport/MessagePublishInfoImplTest.java
+++ b/broker-plugins/amqp-0-8-protocol/src/test/java/org/apache/qpid/server/protocol/v0_8/transport/MessagePublishInfoImplTest.java
@@ -33,8 +33,8 @@ import org.apache.qpid.test.utils.UnitTestBase;
 public class MessagePublishInfoImplTest extends UnitTestBase
 {
     private MessagePublishInfo _mpi;
-    private final AMQShortString _exchange = new AMQShortString("exchange");
-    private final AMQShortString _routingKey = new AMQShortString("routingKey");
+    private final AMQShortString _exchange = AMQShortString.createAMQShortString("exchange");
+    private final AMQShortString _routingKey = AMQShortString.createAMQShortString("routingKey");
 
     @Before
     public void setUp() throws Exception
@@ -47,7 +47,7 @@ public class MessagePublishInfoImplTest extends UnitTestBase
     public void testExchange()
     {
         assertEquals(_exchange, _mpi.getExchange());
-        AMQShortString newExchange = new AMQShortString("newExchange");
+        AMQShortString newExchange = AMQShortString.createAMQShortString("newExchange");
         //Check we can update the exchange
         _mpi.setExchange(newExchange);
         assertEquals(newExchange, _mpi.getExchange());
@@ -97,7 +97,7 @@ public class MessagePublishInfoImplTest extends UnitTestBase
     public void testRoutingKey()
     {
         assertEquals(_routingKey, _mpi.getRoutingKey());
-        AMQShortString newRoutingKey = new AMQShortString("newRoutingKey");
+        AMQShortString newRoutingKey = AMQShortString.createAMQShortString("newRoutingKey");
 
         //Check we can update the routingKey
         _mpi.setRoutingKey(newRoutingKey);

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/0a3dfc88/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java b/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java
index 7a2c82c..ab23155 100644
--- a/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java
+++ b/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java
@@ -99,7 +99,7 @@ public class MessageConverter_0_10_to_0_8 implements MessageConverter<MessageTra
             {
                 try
                 {
-                    props.setAppId(new AMQShortString(messageProps.getAppId()));
+                    props.setAppId(AMQShortString.createAMQShortString(messageProps.getAppId()));
                 }
                 catch (IllegalArgumentException e)
                 {
@@ -114,7 +114,7 @@ public class MessageConverter_0_10_to_0_8 implements MessageConverter<MessageTra
             {
                 try
                 {
-                    props.setCorrelationId(new AMQShortString(messageProps.getCorrelationId()));
+                    props.setCorrelationId(AMQShortString.createAMQShortString(messageProps.getCorrelationId()));
                 }
                 catch (IllegalArgumentException e)
                 {
@@ -165,7 +165,7 @@ public class MessageConverter_0_10_to_0_8 implements MessageConverter<MessageTra
             {
                 try
                 {
-                    props.setUserId(new AMQShortString(messageProps.getUserId()));
+                    props.setUserId(AMQShortString.createAMQShortString(messageProps.getUserId()));
                 }
                 catch (IllegalArgumentException e)
                 {
@@ -319,10 +319,10 @@ public class MessageConverter_0_10_to_0_8 implements MessageConverter<MessageTra
         DeliveryProperties delvProps = message.getHeader().getDeliveryProperties();
         final AMQShortString exchangeName = (delvProps == null || delvProps.getExchange() == null)
                                             ? null
-                                            : new AMQShortString(delvProps.getExchange());
+                                            : AMQShortString.createAMQShortString(delvProps.getExchange());
         final AMQShortString routingKey = (delvProps == null || delvProps.getRoutingKey() == null)
                                           ? null
-                                          : new AMQShortString(delvProps.getRoutingKey());
+                                          : AMQShortString.createAMQShortString(delvProps.getRoutingKey());
         final boolean immediate = delvProps != null && delvProps.getImmediate();
         final boolean mandatory = delvProps != null && !delvProps.getDiscardUnroutable();
 

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/0a3dfc88/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_1_0_to_v0_8.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_1_0_to_v0_8.java b/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_1_0_to_v0_8.java
index e8a02fd..0576b33 100644
--- a/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_1_0_to_v0_8.java
+++ b/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_1_0_to_v0_8.java
@@ -296,7 +296,7 @@ public class MessageConverter_1_0_to_v0_8 implements MessageConverter<Message_1_
         {
             try
             {
-                return new AMQShortString(userId.getArray());
+                return AMQShortString.createAMQShortString(userId.getArray());
             }
             catch (IllegalArgumentException e)
             {
@@ -313,11 +313,11 @@ public class MessageConverter_1_0_to_v0_8 implements MessageConverter<Message_1_
         {
             if (messageId instanceof Binary)
             {
-                return new AMQShortString(((Binary) messageId).getArray());
+                return AMQShortString.createAMQShortString(((Binary) messageId).getArray());
             }
             else if (messageId instanceof byte[])
             {
-                return new AMQShortString(((byte[]) messageId));
+                return AMQShortString.createAMQShortString(((byte[]) messageId));
             }
             else
             {
@@ -388,11 +388,11 @@ public class MessageConverter_1_0_to_v0_8 implements MessageConverter<Message_1_
         {
             if (correlationIdObject instanceof Binary)
             {
-                correlationId = new AMQShortString(((Binary) correlationIdObject).getArray());
+                correlationId = AMQShortString.createAMQShortString(((Binary) correlationIdObject).getArray());
             }
             else if (correlationIdObject instanceof byte[])
             {
-                correlationId = new AMQShortString(((byte[]) correlationIdObject));
+                correlationId = AMQShortString.createAMQShortString(((byte[]) correlationIdObject));
             }
             else
             {


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


[2/2] qpid-broker-j git commit: QPID-7830: [Broker-J] [AMQP 0-8..0-91] Cache AMQPShortStrings that relate to exchanges/routing keys and header values (that are usually drawn from a small domain) in a time/size bound cache.

Posted by kw...@apache.org.
QPID-7830: [Broker-J] [AMQP 0-8..0-91] Cache AMQPShortStrings that relate to exchanges/routing keys and header values (that are usually drawn from a small domain) in a time/size bound cache.

Intent is to reduce the amount of tenured garbage produced when messages are repeatedly sent to same destination. This should reduce frequency and length of GC pauses.


Project: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/commit/7d7b5082
Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/7d7b5082
Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/7d7b5082

Branch: refs/heads/master
Commit: 7d7b50824ad9f2a99b7de034ef36a529129b00ac
Parents: 0a3dfc8
Author: Keith Wall <kw...@apache.org>
Authored: Thu Apr 26 13:11:45 2018 +0100
Committer: Keith Wall <kw...@apache.org>
Committed: Thu Apr 26 16:46:05 2018 +0100

----------------------------------------------------------------------
 .../server/protocol/v0_8/AMQShortString.java    | 162 ++++++++-----------
 .../protocol/v0_8/AMQShortStringTest.java       |  29 ++--
 .../server/protocol/v0_8/MessageMetaData.java   |   8 +
 .../transport/BasicContentHeaderProperties.java | 162 +++----------------
 .../v0_8/transport/BasicPublishBody.java        |   8 +
 5 files changed, 120 insertions(+), 249 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/7d7b5082/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQShortString.java
----------------------------------------------------------------------
diff --git a/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQShortString.java b/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQShortString.java
index 41a4322..0ee98c3 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQShortString.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQShortString.java
@@ -24,7 +24,10 @@ package org.apache.qpid.server.protocol.v0_8;
 import java.nio.ByteBuffer;
 import java.nio.charset.StandardCharsets;
 import java.util.Arrays;
+import java.util.concurrent.TimeUnit;
 
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -45,15 +48,21 @@ public final class AMQShortString implements Comparable<AMQShortString>
 
     private static final Logger LOGGER = LoggerFactory.getLogger(AMQShortString.class);
 
+    // Unfortunately CacheBuilder does not yet support keyEquivalence, so we have to wrap the keys in ByteBuffers
+    // rather than using the byte arrays as keys.
+    private static ThreadLocal<Cache<ByteBuffer, AMQShortString>> CACHE =
+            ThreadLocal.withInitial(() -> CacheBuilder.newBuilder()
+                                                      .maximumSize(100)
+                                                      .expireAfterAccess(300, TimeUnit.SECONDS)
+                                                      .build());
+
     private final byte[] _data;
-    private final int _offset;
     private int _hashCode;
     private String _asString = null;
 
-    private final int _length;
-
     public static final AMQShortString EMPTY_STRING = createAMQShortString((String)null);
 
+
     private AMQShortString(byte[] data)
     {
         if (data == null)
@@ -64,48 +73,6 @@ public final class AMQShortString implements Comparable<AMQShortString>
         {
             throw new IllegalArgumentException("Cannot create AMQShortString with number of octets over 255!");
         }
-        _data = data.clone();
-        _length = data.length;
-        _offset = 0;
-    }
-
-    private AMQShortString(String string)
-    {
-        final byte[] data = EncodingUtils.asUTF8Bytes(string);
-        final int length = data.length;
-        if (data.length> MAX_LENGTH)
-        {
-            throw new IllegalArgumentException("Cannot create AMQShortString with number of octets over 255!");
-        }
-
-        int hash = 0;
-        for (int i = 0; i < length; i++)
-        {
-            data[i] = (byte) (0xFF & data[i]);
-            hash = (31 * hash) + data[i];
-        }
-        _hashCode = hash;
-        _data = data;
-
-        _length = length;
-        _offset = 0;
-
-        _asString = string == null ? "" : string;
-    }
-
-    private AMQShortString(byte[] data, final int offset, final int length)
-    {
-        if (length > MAX_LENGTH)
-        {
-            throw new IllegalArgumentException("Cannot create AMQShortString with number of octets over 255!");
-        }
-        if (data == null)
-        {
-            throw new NullPointerException("Cannot create AMQShortString with null data[]");
-        }
-
-        _offset = offset;
-        _length = length;
         _data = data;
     }
 
@@ -132,18 +99,46 @@ public final class AMQShortString implements Comparable<AMQShortString>
             }
             byte[] data = new byte[length];
             buffer.get(data);
-            return new AMQShortString(data, 0, length);
+
+            final AMQShortString cached = CACHE.get().getIfPresent(ByteBuffer.wrap(data));
+            return cached != null ? cached : new AMQShortString(data);
         }
     }
 
     public static AMQShortString createAMQShortString(byte[] data)
     {
-        return new AMQShortString(data);
+        if (data == null)
+        {
+            throw new NullPointerException("Cannot create AMQShortString with null data[]");
+        }
+
+        final AMQShortString cached = CACHE.get().getIfPresent(ByteBuffer.wrap(data));
+        return cached != null ? cached : new AMQShortString(data);
     }
 
     public static AMQShortString createAMQShortString(String string)
     {
-        return new AMQShortString(string);
+        final byte[] data = EncodingUtils.asUTF8Bytes(string);
+
+        final AMQShortString cached = CACHE.get().getIfPresent(ByteBuffer.wrap(data));
+        if (cached != null)
+        {
+            return cached;
+        }
+        else
+        {
+            final AMQShortString shortString = new AMQShortString(data);
+
+            int hash = 0;
+            for (int i = 0; i < data.length; i++)
+            {
+                data[i] = (byte) (0xFF & data[i]);
+                hash = (31 * hash) + data[i];
+            }
+            shortString._hashCode = hash;
+            shortString._asString = string;
+            return  shortString;
+        }
     }
 
     /**
@@ -152,35 +147,25 @@ public final class AMQShortString implements Comparable<AMQShortString>
      */
     public int length()
     {
-        return _length;
+        return _data.length;
     }
 
     public char charAt(int index)
     {
-
-        return (char) _data[_offset + index];
+        return (char) _data[index];
 
     }
 
     public byte[] getBytes()
     {
-        if(_offset == 0 && _length == _data.length)
-        {
-            return _data.clone();
-        }
-        else
-        {
-            byte[] data = new byte[_length];
-            System.arraycopy(_data,_offset,data,0,_length);
-            return data;
-        }
+        return _data.clone();
     }
 
     public void writeToBuffer(QpidByteBuffer buffer)
     {
-        final int size = length();
-        buffer.put((byte)size);
-        buffer.put(_data, _offset, size);
+        final short size = (short) length();
+        buffer.putUnsignedByte(size);
+        buffer.put(_data, 0, size);
     }
 
 
@@ -223,40 +208,14 @@ public final class AMQShortString implements Comparable<AMQShortString>
             return false;
         }
 
-        final int length = _length;
+        final int length = _data.length;
 
-        if(length != otherString._length)
+        if(length != otherString._data.length)
         {
             return false;
         }
 
-
-        final byte[] data = _data;
-
-        final byte[] otherData = otherString._data;
-
-        final int offset = _offset;
-
-        final int otherOffset = otherString._offset;
-
-        if(offset == 0 && otherOffset == 0 && length == data.length && length == otherData.length)
-        {
-            return Arrays.equals(data, otherData);
-        }
-        else
-        {
-            int thisIdx = offset;
-            int otherIdx = otherOffset;
-            for(int i = length;  i-- != 0; )
-            {
-                if(!(data[thisIdx++] == otherData[otherIdx++]))
-                {
-                    return false;
-                }
-            }
-        }
-
-        return true;
+        return Arrays.equals(_data, otherString._data);
 
     }
 
@@ -270,7 +229,7 @@ public final class AMQShortString implements Comparable<AMQShortString>
 
             for (int i = 0; i < size; i++)
             {
-                hash = (31 * hash) + _data[i+_offset];
+                hash = (31 * hash) + _data[i];
             }
 
             _hashCode = hash;
@@ -284,7 +243,7 @@ public final class AMQShortString implements Comparable<AMQShortString>
     {
         if (_asString == null)
         {
-            _asString = new String(_data, _offset, _length, StandardCharsets.UTF_8);
+            _asString = new String(_data, StandardCharsets.UTF_8);
         }
         return _asString;
     }
@@ -310,8 +269,8 @@ public final class AMQShortString implements Comparable<AMQShortString>
 
             for (int i = 0; i < length(); i++)
             {
-                final byte d = _data[i+_offset];
-                final byte n = name._data[i+name._offset];
+                final byte d = _data[i];
+                final byte n = name._data[i];
                 if (d < n)
                 {
                     return -1;
@@ -329,8 +288,8 @@ public final class AMQShortString implements Comparable<AMQShortString>
 
     public boolean contains(final byte b)
     {
-        final int end = _length + _offset;
-        for(int i = _offset; i < end; i++)
+        final int end = _data.length;
+        for(int i = 0; i < end; i++)
         {
             if(_data[i] == b)
             {
@@ -340,6 +299,11 @@ public final class AMQShortString implements Comparable<AMQShortString>
         return false;
     }
 
+    public void intern()
+    {
+        CACHE.get().put(ByteBuffer.wrap(_data), this);
+    }
+
     public static AMQShortString validValueOf(Object obj)
     {
         return valueOf(obj,true,true);

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/7d7b5082/broker-core/src/test/java/org/apache/qpid/server/protocol/v0_8/AMQShortStringTest.java
----------------------------------------------------------------------
diff --git a/broker-core/src/test/java/org/apache/qpid/server/protocol/v0_8/AMQShortStringTest.java b/broker-core/src/test/java/org/apache/qpid/server/protocol/v0_8/AMQShortStringTest.java
index e2e8483..4dc7933 100644
--- a/broker-core/src/test/java/org/apache/qpid/server/protocol/v0_8/AMQShortStringTest.java
+++ b/broker-core/src/test/java/org/apache/qpid/server/protocol/v0_8/AMQShortStringTest.java
@@ -22,6 +22,8 @@ package org.apache.qpid.server.protocol.v0_8;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotSame;
+import static org.junit.Assert.assertSame;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
@@ -34,12 +36,7 @@ import org.apache.qpid.test.utils.UnitTestBase;
 public class AMQShortStringTest extends UnitTestBase
 {
 
-    public static final AMQShortString HELLO = AMQShortString.createAMQShortString("Hello");
-    public static final AMQShortString HELL = AMQShortString.createAMQShortString("Hell");
-    public static final AMQShortString GOODBYE = AMQShortString.createAMQShortString("Goodbye");
-    public static final AMQShortString GOOD = AMQShortString.createAMQShortString("Good");
-    public static final AMQShortString BYE = AMQShortString.createAMQShortString("BYE");
-
+    private static final AMQShortString GOODBYE = AMQShortString.createAMQShortString("Goodbye");
 
     @Test
     public void testEquals()
@@ -67,9 +64,6 @@ public class AMQShortStringTest extends UnitTestBase
     }
 
     /**
-     * Test method for
-     * {@link AMQShortString#AMQShortString(java.lang.String)}
-     * <p>
      * Tests short string construction from string with length less than 255.
      */
     @Test
@@ -108,9 +102,6 @@ public class AMQShortStringTest extends UnitTestBase
     }
 
     /**
-     * Test method for
-     * {@link AMQShortString#AMQShortString(java.lang.String)}
-     * <p>
      * Tests an attempt to create an AMQP short string from string with length over 255
      */
     @Test
@@ -162,6 +153,20 @@ public class AMQShortStringTest extends UnitTestBase
         assertEquals("Unexpected null string from valueOf", null, shortString);
     }
 
+    @Test
+    public void testInterning()
+    {
+        AMQShortString str1 = AMQShortString.createAMQShortString("hello");
+        str1.intern();
+        AMQShortString str2 = AMQShortString.createAMQShortString("hello");
+        AMQShortString str3 = AMQShortString.createAMQShortString("hello".getBytes(StandardCharsets.UTF_8));
+
+        assertEquals(str1, str2);
+        assertEquals(str1, str3);
+        assertSame(str1, str2);
+        assertSame(str1, str3);
+    }
+
     /**
      * A helper method to generate a string with given length containing given
      * character

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/7d7b5082/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/MessageMetaData.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/MessageMetaData.java b/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/MessageMetaData.java
index b182c8d..2ad8511 100644
--- a/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/MessageMetaData.java
+++ b/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/MessageMetaData.java
@@ -164,7 +164,15 @@ public class MessageMetaData implements StorableMessageMetaData
 
                 ContentHeaderBody chb = ContentHeaderBody.createFromBuffer(buf, size);
                 final AMQShortString exchange = AMQShortString.readAMQShortString(buf);
+                if (exchange != null)
+                {
+                    exchange.intern();
+                }
                 final AMQShortString routingKey = AMQShortString.readAMQShortString(buf);
+                if (routingKey != null)
+                {
+                    routingKey.intern();
+                }
 
                 final byte flags = buf.get();
                 long arrivalTime = buf.getLong();

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/7d7b5082/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/transport/BasicContentHeaderProperties.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/transport/BasicContentHeaderProperties.java b/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/transport/BasicContentHeaderProperties.java
index 6d3a55e..52183fc 100644
--- a/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/transport/BasicContentHeaderProperties.java
+++ b/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/transport/BasicContentHeaderProperties.java
@@ -322,144 +322,6 @@ public class BasicContentHeaderProperties
         }
     }
 
-    public int read(QpidByteBuffer input)
-    {
-
-        _propertyFlags = input.getUnsignedShort();
-        int length = 2;
-        if ((_propertyFlags & (CONTENT_TYPE_MASK)) != 0)
-        {
-            length++;
-            _contentType = AMQShortString.readAMQShortString(input);
-            if(_contentType != null)
-            {
-                length += _contentType.length();
-            }
-        }
-
-        if ((_propertyFlags & ENCODING_MASK) != 0)
-        {
-            length++;
-            _encoding = AMQShortString.readAMQShortString(input);
-            if(_encoding != null)
-            {
-                length += _encoding.length();
-            }
-        }
-
-        if ((_propertyFlags & HEADERS_MASK) != 0)
-        {
-            int fieldTableLength = input.getInt();
-
-            _headers = new FieldTable(input, fieldTableLength);
-
-            length += 4;
-            length += fieldTableLength;
-        }
-
-        if ((_propertyFlags & DELIVERY_MODE_MASK) != 0)
-        {
-            _deliveryMode = input.get();
-            length++;
-        }
-
-        if ((_propertyFlags & PRIORITY_MASK) != 0)
-        {
-            _priority = input.get();
-            length++;
-        }
-
-        if ((_propertyFlags & CORRELATION_ID_MASK) != 0)
-        {
-            length++;
-            _correlationId = AMQShortString.readAMQShortString(input);
-            if(_correlationId != null)
-            {
-                length += _correlationId.length();
-            }
-        }
-
-        if ((_propertyFlags & REPLY_TO_MASK) != 0)
-        {
-            length++;
-            _replyTo = AMQShortString.readAMQShortString(input);
-            if(_replyTo != null)
-            {
-                length += _replyTo.length();
-            }
-        }
-
-        if ((_propertyFlags & EXPIRATION_MASK) != 0)
-        {
-            length++;
-            AMQShortString expiration = AMQShortString.readAMQShortString(input);
-            if(expiration != null)
-            {
-                length += expiration.length();
-                _expiration = Long.parseLong(expiration.toString());
-            }
-        }
-
-        if ((_propertyFlags & MESSAGE_ID_MASK) != 0)
-        {
-            length++;
-            _messageId = AMQShortString.readAMQShortString(input);
-            if(_messageId != null)
-            {
-                length += _messageId.length();
-            }
-        }
-
-        if ((_propertyFlags & TIMESTAMP_MASK) != 0)
-        {
-            _timestamp = input.getLong();
-            length += 8;
-        }
-
-        if ((_propertyFlags & TYPE_MASK) != 0)
-        {
-            length++;
-            _type = AMQShortString.readAMQShortString(input);
-            if(_type != null)
-            {
-                length += _type.length();
-            }
-        }
-
-        if ((_propertyFlags & USER_ID_MASK) != 0)
-        {
-            length++;
-            _userId = AMQShortString.readAMQShortString(input);
-            if(_userId != null)
-            {
-                length += _userId.length();
-            }
-        }
-
-        if ((_propertyFlags & APPLICATION_ID_MASK) != 0)
-        {
-            length++;
-            _appId = AMQShortString.readAMQShortString(input);
-            if(_appId != null)
-            {
-                length += _appId.length();
-            }
-        }
-
-        if ((_propertyFlags & CLUSTER_ID_MASK) != 0)
-        {
-            length++;
-            _clusterId = AMQShortString.readAMQShortString(input);
-            if(_clusterId != null)
-            {
-                length += _clusterId.length();
-            }
-        }
-
-        return length;
-    }
-
-
     public synchronized long writePropertyListPayload(final ByteBufferSender sender)
     {
         if(useEncodedForm())
@@ -512,11 +374,19 @@ public class BasicContentHeaderProperties
         if ((_propertyFlags & (CONTENT_TYPE_MASK)) != 0)
         {
             _contentType = AMQShortString.readAMQShortString(buffer);
+            if (_contentType != null)
+            {
+                _contentType.intern();
+            }
         }
 
         if ((_propertyFlags & ENCODING_MASK) != 0)
         {
             _encoding = AMQShortString.readAMQShortString(buffer);
+            if (_encoding != null)
+            {
+                _encoding.intern();
+            }
         }
 
         if ((_propertyFlags & HEADERS_MASK) != 0)
@@ -548,6 +418,10 @@ public class BasicContentHeaderProperties
         if ((_propertyFlags & REPLY_TO_MASK) != 0)
         {
             _replyTo = AMQShortString.readAMQShortString(buffer);
+            if (_replyTo != null)
+            {
+                _replyTo.intern();
+            }
         }
 
         if ((_propertyFlags & EXPIRATION_MASK) != 0)
@@ -573,16 +447,28 @@ public class BasicContentHeaderProperties
         if ((_propertyFlags & USER_ID_MASK) != 0)
         {
             _userId = AMQShortString.readAMQShortString(buffer);
+            if (_userId != null)
+            {
+                _userId.intern();
+            }
         }
 
         if ((_propertyFlags & APPLICATION_ID_MASK) != 0)
         {
             _appId = AMQShortString.readAMQShortString(buffer);
+            if (_appId != null)
+            {
+                _appId.intern();
+            }
         }
 
         if ((_propertyFlags & CLUSTER_ID_MASK) != 0)
         {
             _clusterId = AMQShortString.readAMQShortString(buffer);
+            if (_clusterId != null)
+            {
+                _clusterId.intern();
+            }
         }
 
     }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/7d7b5082/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/transport/BasicPublishBody.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/transport/BasicPublishBody.java b/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/transport/BasicPublishBody.java
index 9821383..a8243ea 100644
--- a/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/transport/BasicPublishBody.java
+++ b/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/transport/BasicPublishBody.java
@@ -152,7 +152,15 @@ public class BasicPublishBody extends AMQMethodBodyImpl implements EncodableAMQD
 
         int ticket = buffer.getUnsignedShort();
         AMQShortString exchange = AMQShortString.readAMQShortString(buffer);
+        if (exchange != null)
+        {
+            exchange.intern();
+        }
         AMQShortString routingKey = AMQShortString.readAMQShortString(buffer);
+        if (routingKey != null)
+        {
+            routingKey.intern();
+        }
         byte bitfield = buffer.get();
 
         boolean mandatory = (bitfield & 0x01) != 0;


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