diff options
| author | Robert Godfrey <rgodfrey@apache.org> | 2007-05-24 09:57:00 +0000 |
|---|---|---|
| committer | Robert Godfrey <rgodfrey@apache.org> | 2007-05-24 09:57:00 +0000 |
| commit | 2c5428300dbf8e0025b8e8cb010ff5e818c1a77e (patch) | |
| tree | 16d48352f7aac669beaa10ec3d750038e15cad6f /java | |
| parent | 13a373d975a60d45b2dd6de4c3cc821296330e16 (diff) | |
| download | qpid-python-2c5428300dbf8e0025b8e8cb010ff5e818c1a77e.tar.gz | |
QPID-482 : Small performance tweaks
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/branches/M2@541247 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'java')
11 files changed, 100 insertions, 63 deletions
diff --git a/java/broker/src/main/java/org/apache/qpid/server/output/amqp0_8/ProtocolOutputConverterImpl.java b/java/broker/src/main/java/org/apache/qpid/server/output/amqp0_8/ProtocolOutputConverterImpl.java index 28b2489142..8462ed9557 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/output/amqp0_8/ProtocolOutputConverterImpl.java +++ b/java/broker/src/main/java/org/apache/qpid/server/output/amqp0_8/ProtocolOutputConverterImpl.java @@ -182,10 +182,8 @@ public class ProtocolOutputConverterImpl implements ProtocolOutputConverter 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 @@ public class ProtocolOutputConverterImpl implements ProtocolOutputConverter 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 @@ public class ProtocolOutputConverterImpl implements ProtocolOutputConverter 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)
diff --git a/java/broker/src/main/java/org/apache/qpid/server/queue/ConcurrentSelectorDeliveryManager.java b/java/broker/src/main/java/org/apache/qpid/server/queue/ConcurrentSelectorDeliveryManager.java index 0fb5e6d88a..2aa759b35d 100644 --- a/java/broker/src/main/java/org/apache/qpid/server/queue/ConcurrentSelectorDeliveryManager.java +++ b/java/broker/src/main/java/org/apache/qpid/server/queue/ConcurrentSelectorDeliveryManager.java @@ -717,7 +717,9 @@ public class ConcurrentSelectorDeliveryManager implements DeliveryManager 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 @@ public class ConcurrentSelectorDeliveryManager implements DeliveryManager 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 @@ public class ConcurrentSelectorDeliveryManager implements DeliveryManager _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 @@ public class ConcurrentSelectorDeliveryManager implements DeliveryManager // 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 @@ public class ConcurrentSelectorDeliveryManager implements DeliveryManager // 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 @@ public class ConcurrentSelectorDeliveryManager implements DeliveryManager } 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 @@ public class ConcurrentSelectorDeliveryManager implements DeliveryManager 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 @@ public class ConcurrentSelectorDeliveryManager implements DeliveryManager } else { - if (_log.isDebugEnabled()) + if (debugEnabled) { _log.debug(debugIdentity() + " Message(" + msg.toString() + ") has been taken so disregarding deliver request to Subscriber:" + diff --git a/java/client/src/main/java/org/apache/qpid/client/AMQDestination.java b/java/client/src/main/java/org/apache/qpid/client/AMQDestination.java index 585991d905..cc5af07b20 100644 --- a/java/client/src/main/java/org/apache/qpid/client/AMQDestination.java +++ b/java/client/src/main/java/org/apache/qpid/client/AMQDestination.java @@ -60,9 +60,9 @@ public abstract class AMQDestination implements Destination, Referenceable 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 abstract class AMQDestination implements Destination, Referenceable } public String toURL() - { + { String url = _url; if(url == null) { diff --git a/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessage.java b/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessage.java index 13f544516a..e60539c064 100644 --- a/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessage.java +++ b/java/client/src/main/java/org/apache/qpid/client/message/AbstractJMSMessage.java @@ -79,24 +79,22 @@ public abstract class AbstractJMSMessage extends AMQMessage implements org.apach 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); diff --git a/java/common/src/main/java/org/apache/qpid/codec/AMQCodecFactory.java b/java/common/src/main/java/org/apache/qpid/codec/AMQCodecFactory.java index 4e3a46eb90..fa890d0ebb 100644 --- a/java/common/src/main/java/org/apache/qpid/codec/AMQCodecFactory.java +++ b/java/common/src/main/java/org/apache/qpid/codec/AMQCodecFactory.java @@ -37,10 +37,10 @@ import org.apache.mina.filter.codec.ProtocolEncoder; 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 diff --git a/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlock.java b/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlock.java index 9155c4024f..903b5bfa7a 100644 --- a/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlock.java +++ b/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlock.java @@ -40,4 +40,14 @@ public abstract class AMQDataBlock implements EncodableAMQDataBlock * @param buffer */ public abstract void writePayload(ByteBuffer buffer); + + public ByteBuffer toByteBuffer() + { + final ByteBuffer buffer = ByteBuffer.allocate((int)getSize()); + + writePayload(buffer); + buffer.flip(); + return buffer; + } + } diff --git a/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlockEncoder.java b/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlockEncoder.java index aedea6dd89..91814085fc 100644 --- a/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlockEncoder.java +++ b/java/common/src/main/java/org/apache/qpid/framing/AMQDataBlockEncoder.java @@ -42,17 +42,14 @@ public final class AMQDataBlockEncoder implements MessageEncoder 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); } diff --git a/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java b/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java index 3f6ef73781..e4e3222f01 100644 --- a/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java +++ b/java/common/src/main/java/org/apache/qpid/framing/AMQShortString.java @@ -15,7 +15,7 @@ public final class AMQShortString implements CharSequence, Comparable<AMQShortSt 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)
diff --git a/java/common/src/main/java/org/apache/qpid/framing/FieldTable.java b/java/common/src/main/java/org/apache/qpid/framing/FieldTable.java index 631a3ae149..34415777be 100644 --- a/java/common/src/main/java/org/apache/qpid/framing/FieldTable.java +++ b/java/common/src/main/java/org/apache/qpid/framing/FieldTable.java @@ -37,6 +37,8 @@ import org.apache.qpid.AMQPInvalidClassException; 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 @@ public class FieldTable // ************ 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 @@ public class FieldTable throw new IllegalArgumentException("Property name must not be the empty string"); } - checkIdentiferFormat(propertyName); + if(_strictAMQP) + { + checkIdentiferFormat(propertyName); + } } protected static void checkIdentiferFormat(AMQShortString propertyName) diff --git a/java/common/src/main/java/org/apache/qpid/pool/PoolingFilter.java b/java/common/src/main/java/org/apache/qpid/pool/PoolingFilter.java index ffc8f1643a..7d3dfbee81 100644 --- a/java/common/src/main/java/org/apache/qpid/pool/PoolingFilter.java +++ b/java/common/src/main/java/org/apache/qpid/pool/PoolingFilter.java @@ -138,7 +138,7 @@ public abstract class PoolingFilter extends IoFilterAdapter implements Job.JobCo */ 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 abstract class PoolingFilter extends IoFilterAdapter implements Job.JobCo */ 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(); diff --git a/java/common/src/test/java/org/apache/qpid/framing/PropertyFieldTableTest.java b/java/common/src/test/java/org/apache/qpid/framing/PropertyFieldTableTest.java index 6160dc1843..38a2ae6256 100644 --- a/java/common/src/test/java/org/apache/qpid/framing/PropertyFieldTableTest.java +++ b/java/common/src/test/java/org/apache/qpid/framing/PropertyFieldTableTest.java @@ -777,6 +777,8 @@ public class PropertyFieldTableTest extends TestCase */ 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 @@ public class PropertyFieldTableTest extends TestCase } // 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 class PropertyFieldTableTest extends TestCase */ 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 @@ public class PropertyFieldTableTest extends TestCase } // 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 class PropertyFieldTableTest extends TestCase */ 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,9 +861,18 @@ public class PropertyFieldTableTest extends TestCase { fail("property name are allowed to start with # and $s"); } + if(oldVal != null) + { + System.setProperty("STRICT_AMQP",oldVal); + } + else + { + System.clearProperty("STRICT_AMQP"); + } } + /** * Additional test to test the contents of the table */ |
