You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2007/05/24 11:57:03 UTC

svn commit: r541247 - in /incubator/qpid/branches/M2/java: broker/src/main/java/org/apache/qpid/server/output/amqp0_8/ broker/src/main/java/org/apache/qpid/server/queue/ client/src/main/java/org/apache/qpid/client/ client/src/main/java/org/apache/qpid/...

Author: rgodfrey
Date: Thu May 24 02:57:00 2007
New Revision: 541247

URL: http://svn.apache.org/viewvc?view=rev&rev=541247
Log:
QPID-482 : Small performance tweaks

Modified:
    incubator/qpid/branches/M2/java/broker/src/main/java/org/apache/qpid/server/output/amqp0_8/ProtocolOutputConverterImpl.java
    incubator/qpid/branches/M2/java/broker/src/main/java/org/apache/qpid/server/queue/ConcurrentSelectorDeliveryManager.java
    incubator/qpid/branches/M2/java/client/src/main/java/org/apache/qpid/client/AMQDestination.java
    incubator/qpid/branches/M2/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessage.java
    incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/codec/AMQCodecFactory.java
    incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlock.java
    incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlockEncoder.java
    incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java
    incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/framing/FieldTable.java
    incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/pool/PoolingFilter.java
    incubator/qpid/branches/M2/java/common/src/test/java/org/apache/qpid/framing/PropertyFieldTableTest.java

Modified: incubator/qpid/branches/M2/java/broker/src/main/java/org/apache/qpid/server/output/amqp0_8/ProtocolOutputConverterImpl.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2/java/broker/src/main/java/org/apache/qpid/server/output/amqp0_8/ProtocolOutputConverterImpl.java?view=diff&rev=541247&r1=541246&r2=541247
==============================================================================
--- incubator/qpid/branches/M2/java/broker/src/main/java/org/apache/qpid/server/output/amqp0_8/ProtocolOutputConverterImpl.java (original)
+++ incubator/qpid/branches/M2/java/broker/src/main/java/org/apache/qpid/server/output/amqp0_8/ProtocolOutputConverterImpl.java Thu May 24 02:57:00 2007
@@ -182,10 +182,8 @@
                                                                 deliveryTag, pb.getExchange(), messageHandle.isRedelivered(),
                                                                 pb.getRoutingKey());
 
-        ByteBuffer buf = ByteBuffer.allocate((int) deliverFrame.getSize()); // XXX: Could cast be a problem?
-        deliverFrame.writePayload(buf);
-        buf.flip();
-        return buf;
+
+        return deliverFrame.toByteBuffer();
     }
 
     private ByteBuffer createEncodedGetOkFrame(AMQMessage message, int channelId, long deliveryTag, int queueSize)
@@ -201,10 +199,8 @@
                                                                 queueSize,
                                                                 messageHandle.isRedelivered(),
                                                                 pb.getRoutingKey());
-        ByteBuffer buf = ByteBuffer.allocate((int) getOkFrame.getSize()); // XXX: Could cast be a problem?
-        getOkFrame.writePayload(buf);
-        buf.flip();
-        return buf;
+
+        return getOkFrame.toByteBuffer();
     }
 
     public byte getProtocolMinorVersion()
@@ -225,10 +221,8 @@
                                                               message.getMessagePublishInfo().getExchange(),
                                                               replyCode, replyText,
                                                               message.getMessagePublishInfo().getRoutingKey());
-        ByteBuffer buf = ByteBuffer.allocate((int) returnFrame.getSize()); // XXX: Could cast be a problem?
-        returnFrame.writePayload(buf);
-        buf.flip();
-        return buf;
+
+        return returnFrame.toByteBuffer();
     }
 
     public void writeReturn(AMQMessage message, int channelId, int replyCode, AMQShortString replyText)

Modified: incubator/qpid/branches/M2/java/broker/src/main/java/org/apache/qpid/server/queue/ConcurrentSelectorDeliveryManager.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2/java/broker/src/main/java/org/apache/qpid/server/queue/ConcurrentSelectorDeliveryManager.java?view=diff&rev=541247&r1=541246&r2=541247
==============================================================================
--- incubator/qpid/branches/M2/java/broker/src/main/java/org/apache/qpid/server/queue/ConcurrentSelectorDeliveryManager.java (original)
+++ incubator/qpid/branches/M2/java/broker/src/main/java/org/apache/qpid/server/queue/ConcurrentSelectorDeliveryManager.java Thu May 24 02:57:00 2007
@@ -717,7 +717,9 @@
 
     public void deliver(StoreContext context, AMQShortString name, AMQMessage msg, boolean deliverFirst) throws AMQException
     {
-        if (_log.isDebugEnabled())
+
+        final boolean debugEnabled = _log.isDebugEnabled();
+        if (debugEnabled)
         {
             _log.debug(debugIdentity() + "deliver :first(" + deliverFirst + ") :" + msg);
         }
@@ -732,7 +734,7 @@
 
             if (s == null) //no-one can take the message right now.
             {
-                if (_log.isDebugEnabled())
+                if (debugEnabled)
                 {
                     _log.debug(debugIdentity() + "Testing Message(" + msg + ") for Queued Delivery:" + currentStatus());
                 }
@@ -744,7 +746,7 @@
                     _lock.unlock();
 
                     //Pre Deliver to all subscriptions
-                    if (_log.isDebugEnabled())
+                    if (debugEnabled)
                     {
                         _log.debug(debugIdentity() + "We have " + _subscriptions.getSubscriptions().size() +
                                    " subscribers to give the message to:" + currentStatus());
@@ -755,7 +757,7 @@
                         // stop if the message gets delivered whilst PreDelivering if we have a shared queue.
                         if (_queue.isShared() && msg.getDeliveredToConsumer())
                         {
-                            if (_log.isDebugEnabled())
+                            if (debugEnabled)
                             {
                                 _log.debug(debugIdentity() + "Stopping PreDelivery as message(" + System.identityHashCode(msg) +
                                            ") is already delivered.");
@@ -766,7 +768,7 @@
                         // Only give the message to those that want them.
                         if (sub.hasInterest(msg))
                         {
-                            if (_log.isDebugEnabled())
+                            if (debugEnabled)
                             {
                                 _log.debug(debugIdentity() + "Queuing message(" + System.identityHashCode(msg) +
                                            ") for PreDelivery for subscriber(" + System.identityHashCode(sub) + ")");
@@ -795,9 +797,9 @@
                     }
                     else
                     {
-                        if (_log.isInfoEnabled())
+                        if (debugEnabled)
                         {
-                            _log.info(debugIdentity() + " Subscription(" + System.identityHashCode(s) + ") became " +
+                            _log.debug(debugIdentity() + " Subscription(" + System.identityHashCode(s) + ") became " +
                                       "suspended between nextSubscriber and send for message:" + msg.debugIdentity());
                         }
                     }
@@ -805,9 +807,9 @@
 
                 if (!msg.isTaken(_queue))
                 {
-                    if (_log.isInfoEnabled())
+                    if (debugEnabled)
                     {
-                        _log.info(debugIdentity() + " Message(" + msg.debugIdentity() + ") has not been taken so recursing!:" +
+                        _log.debug(debugIdentity() + " Message(" + msg.debugIdentity() + ") has not been taken so recursing!:" +
                                   " Subscriber:" + System.identityHashCode(s));
                     }
 
@@ -815,7 +817,7 @@
                 }
                 else
                 {
-                    if (_log.isDebugEnabled())
+                    if (debugEnabled)
                     {
                         _log.debug(debugIdentity() + " Message(" + msg.toString() +
                                    ") has been taken so disregarding deliver request to Subscriber:" +

Modified: incubator/qpid/branches/M2/java/client/src/main/java/org/apache/qpid/client/AMQDestination.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2/java/client/src/main/java/org/apache/qpid/client/AMQDestination.java?view=diff&rev=541247&r1=541246&r2=541247
==============================================================================
--- incubator/qpid/branches/M2/java/client/src/main/java/org/apache/qpid/client/AMQDestination.java (original)
+++ incubator/qpid/branches/M2/java/client/src/main/java/org/apache/qpid/client/AMQDestination.java Thu May 24 02:57:00 2007
@@ -60,9 +60,9 @@
     private static final int IS_EXCLUSIVE_MASK = 0x2;
     private static final int IS_AUTODELETE_MASK = 0x4;
 
-    public static final byte QUEUE_TYPE = 1;
-    public static final byte TOPIC_TYPE = 2;
-    public static final byte UNKNOWN_TYPE = 3;
+    public static final Integer QUEUE_TYPE = Integer.valueOf(1);
+    public static final Integer TOPIC_TYPE = Integer.valueOf(2);
+    public static final Integer UNKNOWN_TYPE = Integer.valueOf(3);
 
     protected AMQDestination(String url) throws URLSyntaxException
     {
@@ -213,7 +213,7 @@
     }
 
     public String toURL()
-    {
+    {        
         String url = _url;
         if(url == null)
         {

Modified: incubator/qpid/branches/M2/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessage.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessage.java?view=diff&rev=541247&r1=541246&r2=541247
==============================================================================
--- incubator/qpid/branches/M2/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessage.java (original)
+++ incubator/qpid/branches/M2/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessage.java Thu May 24 02:57:00 2007
@@ -79,24 +79,22 @@
         this(contentHeader, deliveryTag);
 
         Integer type = contentHeader.getHeaders().getInteger(CustomJMSXProperty.JMS_QPID_DESTTYPE.getShortStringName());
-        int contentType = (type == null) ? AMQDestination.UNKNOWN_TYPE : type.intValue();
+
 
         AMQDestination dest;
 
-        switch (contentType)
-        {
 
-            case AMQDestination.QUEUE_TYPE:
+        if(AMQDestination.QUEUE_TYPE.equals(type))
+        {
                 dest = new AMQQueue(exchange, routingKey, routingKey);
-                break;
-
-            case AMQDestination.TOPIC_TYPE:
+        }
+        else if(AMQDestination.TOPIC_TYPE.equals(type))
+        {
                 dest = new AMQTopic(exchange, routingKey, null);
-                break;
-
-            default:
+        }
+        else
+        {
                 dest = new AMQUndefinedDestination(exchange, routingKey, null);
-                break;
         }
         //Destination dest = AMQDestination.createDestination(url);
         setJMSDestination(dest);

Modified: incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/codec/AMQCodecFactory.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/codec/AMQCodecFactory.java?view=diff&rev=541247&r1=541246&r2=541247
==============================================================================
--- incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/codec/AMQCodecFactory.java (original)
+++ incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/codec/AMQCodecFactory.java Thu May 24 02:57:00 2007
@@ -37,10 +37,10 @@
 public class AMQCodecFactory implements ProtocolCodecFactory
 {
     /** Holds the protocol encoder. */
-    private AMQEncoder _encoder = new AMQEncoder();
+    private final AMQEncoder _encoder = new AMQEncoder();
 
     /** Holds the protocol decoder. */
-    private AMQDecoder _frameDecoder;
+    private final AMQDecoder _frameDecoder;
 
     /**
      * Creates a new codec factory, specifiying whether it is expected that the first frame of data should be an

Modified: incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlock.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlock.java?view=diff&rev=541247&r1=541246&r2=541247
==============================================================================
--- incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlock.java (original)
+++ incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlock.java Thu May 24 02:57:00 2007
@@ -40,4 +40,14 @@
      * @param buffer
      */
     public abstract void writePayload(ByteBuffer buffer);
+
+    public ByteBuffer toByteBuffer()
+    {
+        final ByteBuffer buffer = ByteBuffer.allocate((int)getSize());
+
+        writePayload(buffer);    
+        buffer.flip();
+        return buffer;
+    }
+
 }

Modified: incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlockEncoder.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlockEncoder.java?view=diff&rev=541247&r1=541246&r2=541247
==============================================================================
--- incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlockEncoder.java (original)
+++ incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlockEncoder.java Thu May 24 02:57:00 2007
@@ -42,17 +42,14 @@
     public void encode(IoSession session, Object message, ProtocolEncoderOutput out) throws Exception
     {
         final AMQDataBlock frame = (AMQDataBlock) message;
-        int frameSize = (int)frame.getSize();
-        final ByteBuffer buffer = ByteBuffer.allocate(frameSize);
-        //buffer.setAutoExpand(true);
-        frame.writePayload(buffer);
+
+        final ByteBuffer buffer = frame.toByteBuffer();
 
         if (_logger.isDebugEnabled())
         {
             _logger.debug("Encoded frame byte-buffer is '" + EncodingUtils.convertToHexString(buffer) + "'");
         }
 
-        buffer.flip();
         out.write(buffer);
     }
 

Modified: incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java?view=diff&rev=541247&r1=541246&r2=541247
==============================================================================
--- incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java (original)
+++ incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java Thu May 24 02:57:00 2007
@@ -15,7 +15,7 @@
 
     private final ByteBuffer _data;
     private int _hashCode;
-    final int _length;
+    private final int _length;
     private static final char[] EMPTY_CHAR_ARRAY = new char[0];
 
     public AMQShortString(byte[] data)

Modified: incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/framing/FieldTable.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/framing/FieldTable.java?view=diff&rev=541247&r1=541246&r2=541247
==============================================================================
--- incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/framing/FieldTable.java (original)
+++ incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/framing/FieldTable.java Thu May 24 02:57:00 2007
@@ -37,6 +37,8 @@
 public class FieldTable
 {
     private static final Logger _logger = Logger.getLogger(FieldTable.class);
+    private static final String STRICT_AMQP = "STRICT_AMQP";
+    private final boolean _strictAMQP = Boolean.valueOf(System.getProperty(STRICT_AMQP,"false"));
 
     private ByteBuffer _encodedForm;
     private LinkedHashMap<AMQShortString, AMQTypedValue> _properties;
@@ -407,74 +409,74 @@
 
 
     // ************  Setters
-    public Object setBoolean(String string, boolean b)
+    public Object setBoolean(String string, Boolean b)
     {
         return setBoolean(new AMQShortString(string), b);
     }
 
-    public Object setBoolean(AMQShortString string, boolean b)
+    public Object setBoolean(AMQShortString string, Boolean b)
     {
         return setProperty(string, AMQType.BOOLEAN.asTypedValue(b));
     }
 
-    public Object setByte(String string, byte b)
+    public Object setByte(String string, Byte b)
     {
         return setByte(new AMQShortString(string), b);
     }
 
-    public Object setByte(AMQShortString string, byte b)
+    public Object setByte(AMQShortString string, Byte b)
     {
         return setProperty(string, AMQType.BYTE.asTypedValue(b));
     }
 
-    public Object setShort(String string, short i)
+    public Object setShort(String string, Short i)
     {
         return setShort(new AMQShortString(string), i);
     }
 
-    public Object setShort(AMQShortString string, short i)
+    public Object setShort(AMQShortString string, Short i)
     {
         return setProperty(string, AMQType.SHORT.asTypedValue(i));
     }
 
 
-    public Object setInteger(String string, int i)
+    public Object setInteger(String string, Integer i)
     {
         return setInteger(new AMQShortString(string), i);
     }
 
-    public Object setInteger(AMQShortString string, int i)
+    public Object setInteger(AMQShortString string, Integer i)
     {
         return setProperty(string, AMQType.INT.asTypedValue(i));
     }
 
 
-    public Object setLong(String string, long l)
+    public Object setLong(String string, Long l)
     {
         return setLong(new AMQShortString(string), l);
     }
 
-    public Object setLong(AMQShortString string, long l)
+    public Object setLong(AMQShortString string, Long l)
     {
         return setProperty(string, AMQType.LONG.asTypedValue(l));
     }
 
-    public Object setFloat(String string, float f)
+    public Object setFloat(String string, Float f)
     {
         return setFloat(new AMQShortString(string), f);
     }
 
-    public Object setFloat(AMQShortString string, float v)
+    public Object setFloat(AMQShortString string, Float v)
     {
         return setProperty(string, AMQType.FLOAT.asTypedValue(v));
     }
 
-    public Object setDouble(String string, double d)
+    public Object setDouble(String string, Double d)
     {
         return setDouble(new AMQShortString(string), d);
     }
 
-    public Object setDouble(AMQShortString string, double v)
+    public Object setDouble(AMQShortString string, Double v)
     {
         return setProperty(string, AMQType.DOUBLE.asTypedValue(v));
     }
@@ -668,7 +670,10 @@
             throw new IllegalArgumentException("Property name must not be the empty string");
         }
 
-        checkIdentiferFormat(propertyName);
+        if(_strictAMQP)
+        {
+            checkIdentiferFormat(propertyName);
+        }
     }
 
     protected static void checkIdentiferFormat(AMQShortString propertyName)

Modified: incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/pool/PoolingFilter.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/pool/PoolingFilter.java?view=diff&rev=541247&r1=541246&r2=541247
==============================================================================
--- incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/pool/PoolingFilter.java (original)
+++ incubator/qpid/branches/M2/java/common/src/main/java/org/apache/qpid/pool/PoolingFilter.java Thu May 24 02:57:00 2007
@@ -138,7 +138,7 @@
      */
     public void init()
     {
-        _logger.info("Init called on PoolingFilter " + toString());
+        _logger.debug("Init called on PoolingFilter " + toString());
 
         // Called when the filter is initialised in the chain. If the reference count is
         // zero this acquire will initialise the pool.
@@ -150,7 +150,7 @@
      */
     public void destroy()
     {
-        _logger.info("Destroy called on PoolingFilter " + toString());
+        _logger.debug("Destroy called on PoolingFilter " + toString());
 
         // When the reference count gets to zero we release the executor service.
         _poolReference.releaseExecutorService();

Modified: incubator/qpid/branches/M2/java/common/src/test/java/org/apache/qpid/framing/PropertyFieldTableTest.java
URL: http://svn.apache.org/viewvc/incubator/qpid/branches/M2/java/common/src/test/java/org/apache/qpid/framing/PropertyFieldTableTest.java?view=diff&rev=541247&r1=541246&r2=541247
==============================================================================
--- incubator/qpid/branches/M2/java/common/src/test/java/org/apache/qpid/framing/PropertyFieldTableTest.java (original)
+++ incubator/qpid/branches/M2/java/common/src/test/java/org/apache/qpid/framing/PropertyFieldTableTest.java Thu May 24 02:57:00 2007
@@ -777,6 +777,8 @@
      */
     public void testCheckPropertyNamehasMaxLength()
     {
+        String oldVal =System.getProperty("STRICT_AMQP");
+        System.setProperty("STRICT_AMQP","true");
         FieldTable table = new FieldTable();
 
         StringBuffer longPropertyName = new StringBuffer(129);
@@ -797,6 +799,14 @@
         }
         // so length should be zero
         Assert.assertEquals(0, table.getEncodedSize());
+        if(oldVal != null)
+        {
+            System.setProperty("STRICT_AMQP",oldVal);
+        }
+        else
+        {
+            System.clearProperty("STRICT_AMQP");
+        }
     }
 
 
@@ -805,12 +815,14 @@
      */
     public void testCheckPropertyNameStartCharacterIsLetter()
     {
+        String oldVal =System.getProperty("STRICT_AMQP");
+        System.setProperty("STRICT_AMQP","true");
         FieldTable table = new FieldTable();
 
         //Try a name that starts with a number
         try
         {
-            table.setObject("1", "String");
+            table.setObject("1", "String");                               
             fail("property name must start with a letter");
         }
         catch (IllegalArgumentException iae)
@@ -819,6 +831,14 @@
         }
         // so length should be zero
         Assert.assertEquals(0, table.getEncodedSize());
+        if(oldVal != null)
+        {
+            System.setProperty("STRICT_AMQP",oldVal);
+        }
+        else
+        {
+            System.clearProperty("STRICT_AMQP");
+        }
     }
 
 
@@ -827,6 +847,8 @@
      */
     public void testCheckPropertyNameStartCharacterIsHashorDollar()
     {
+        String oldVal =System.getProperty("STRICT_AMQP");
+        System.setProperty("STRICT_AMQP","true");
         FieldTable table = new FieldTable();
 
         //Try a name that starts with a number
@@ -839,7 +861,16 @@
         {
             fail("property name are allowed to start with # and $s");
         }
+        if(oldVal != null)
+        {
+            System.setProperty("STRICT_AMQP",oldVal);
+        }
+        else
+        {
+            System.clearProperty("STRICT_AMQP");
+        }
     }
+
 
 
     /**