This is an automated email from the ASF dual-hosted git repository. clebertsuconic pushed a commit to branch 2.19.x in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git
commit 151b59b42598cb4743c75c8ce66e37984d069a49 Author: franz1981 <[email protected]> AuthorDate: Tue Nov 16 10:11:13 2021 +0100 ARTEMIS-3578 Save SimpleString duplication and long[] allocation while moving Core messages (cherry picked from commit 7e6373d4dfa87b1fce690a1387c8eb9edce3af3b) --- .../apache/activemq/artemis/api/core/Message.java | 9 +++++---- .../protocol/amqp/broker/AMQPLargeMessage.java | 3 ++- .../protocol/amqp/converter/TestConversions.java | 4 ++-- .../impl/journal/LargeServerMessageImpl.java | 3 ++- .../artemis/core/server/impl/DivertImpl.java | 2 +- .../artemis/core/server/impl/QueueImpl.java | 23 +++++++++------------- 6 files changed, 21 insertions(+), 23 deletions(-) diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/Message.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/Message.java index bef0fa4..034d23a 100644 --- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/Message.java +++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/Message.java @@ -468,12 +468,13 @@ public interface Message { // only valid probably on AMQP } - default void referenceOriginalMessage(final Message original, String originalQueue) { + default void referenceOriginalMessage(final Message original, final SimpleString originalQueue) { setBrokerProperty(Message.HDR_ORIGINAL_QUEUE, originalQueue); - setBrokerProperty(Message.HDR_ORIGINAL_ADDRESS, original.getAddress()); + setBrokerProperty(Message.HDR_ORIGINAL_ADDRESS, original.getAddressSimpleString()); setBrokerProperty(Message.HDR_ORIG_MESSAGE_ID, original.getMessageID()); - if (original.getRoutingType() != null) { - setBrokerProperty(Message.HDR_ORIG_ROUTING_TYPE, original.getRoutingType().getType()); + final RoutingType routingType = original.getRoutingType(); + if (routingType != null) { + setBrokerProperty(Message.HDR_ORIG_ROUTING_TYPE, routingType.getType()); } // reset expiry diff --git a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPLargeMessage.java b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPLargeMessage.java index 1026eeb..b921574 100644 --- a/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPLargeMessage.java +++ b/artemis-protocols/artemis-amqp-protocol/src/main/java/org/apache/activemq/artemis/protocol/amqp/broker/AMQPLargeMessage.java @@ -27,6 +27,7 @@ import org.apache.activemq.artemis.api.core.ActiveMQBuffer; import org.apache.activemq.artemis.api.core.ActiveMQException; import org.apache.activemq.artemis.api.core.ICoreMessage; import org.apache.activemq.artemis.api.core.Message; +import org.apache.activemq.artemis.api.core.SimpleString; import org.apache.activemq.artemis.core.buffers.impl.ChannelBufferWrapper; import org.apache.activemq.artemis.core.io.SequentialFile; import org.apache.activemq.artemis.core.message.LargeBodyReader; @@ -643,7 +644,7 @@ public class AMQPLargeMessage extends AMQPMessage implements LargeServerMessage } @Override - public void referenceOriginalMessage(final Message original, String originalQueue) { + public void referenceOriginalMessage(final Message original, final SimpleString originalQueue) { super.referenceOriginalMessage(original, originalQueue); diff --git a/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/converter/TestConversions.java b/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/converter/TestConversions.java index a2fd675..90c2281 100644 --- a/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/converter/TestConversions.java +++ b/artemis-protocols/artemis-amqp-protocol/src/test/java/org/apache/activemq/artemis/protocol/amqp/converter/TestConversions.java @@ -499,9 +499,9 @@ public class TestConversions extends Assert { for (int i = 0; i < 100; i++) { encodedMessage.setMessageID(333L); if (i % 3 == 0) { - encodedMessage.referenceOriginalMessage(encodedMessage, "SOME-OTHER-QUEUE-DOES-NOT-MATTER-WHAT"); + encodedMessage.referenceOriginalMessage(encodedMessage, SimpleString.toSimpleString("SOME-OTHER-QUEUE-DOES-NOT-MATTER-WHAT")); } else { - encodedMessage.referenceOriginalMessage(encodedMessage, "XXX"); + encodedMessage.referenceOriginalMessage(encodedMessage, SimpleString.toSimpleString("XXX")); } encodedMessage.putStringProperty("another " + i, "value " + i); encodedMessage.messageChanged(); diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/LargeServerMessageImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/LargeServerMessageImpl.java index 6c7d3b7..e22e889 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/LargeServerMessageImpl.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/persistence/impl/journal/LargeServerMessageImpl.java @@ -20,6 +20,7 @@ import org.apache.activemq.artemis.api.core.ActiveMQBuffer; import org.apache.activemq.artemis.api.core.ActiveMQException; import org.apache.activemq.artemis.api.core.ICoreMessage; import org.apache.activemq.artemis.api.core.Message; +import org.apache.activemq.artemis.api.core.SimpleString; import org.apache.activemq.artemis.core.io.SequentialFile; import org.apache.activemq.artemis.core.message.LargeBodyReader; import org.apache.activemq.artemis.core.message.impl.CoreMessage; @@ -267,7 +268,7 @@ public final class LargeServerMessageImpl extends CoreMessage implements CoreLar } @Override - public void referenceOriginalMessage(final Message original, String originalQueue) { + public void referenceOriginalMessage(final Message original, final SimpleString originalQueue) { super.referenceOriginalMessage(original, originalQueue); diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/DivertImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/DivertImpl.java index 6831f17..907ea99 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/DivertImpl.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/DivertImpl.java @@ -105,7 +105,7 @@ public class DivertImpl implements Divert { copy = message.copy(id); // This will set the original MessageId, and the original address - copy.referenceOriginalMessage(message, this.getUniqueName().toString()); + copy.referenceOriginalMessage(message, this.getUniqueName()); copy.setAddress(forwardAddress); diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueImpl.java index 99157b1..991b8c2 100644 --- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueImpl.java +++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/impl/QueueImpl.java @@ -2709,11 +2709,7 @@ public class QueueImpl extends CriticalComponentImpl implements Queue { } } - if (targetQueue != null) { - move(SimpleString.toSimpleString(originalMessageAddress), tx, ref, false, false, targetQueue.longValue()); - } else { - move(SimpleString.toSimpleString(originalMessageAddress), tx, ref, false, false); - } + move(SimpleString.toSimpleString(originalMessageAddress), tx, ref, false, false, targetQueue); return true; } @@ -3386,7 +3382,7 @@ public class QueueImpl extends CriticalComponentImpl implements Queue { final MessageReference ref, final boolean expiry, final boolean rejectDuplicate, - final long... queueIDs) throws Exception { + final Long queueID) throws Exception { Message copyMessage = makeCopy(ref, expiry, toAddress); Object originalRoutingType = ref.getMessage().getBrokerProperty(Message.HDR_ORIG_ROUTING_TYPE); @@ -3394,12 +3390,11 @@ public class QueueImpl extends CriticalComponentImpl implements Queue { copyMessage.setRoutingType(RoutingType.getType((Byte) originalRoutingType)); } - if (queueIDs != null && queueIDs.length > 0) { - ByteBuffer buffer = ByteBuffer.allocate(8 * queueIDs.length); - for (long id : queueIDs) { - buffer.putLong(id); - } - copyMessage.putBytesProperty(Message.HDR_ROUTE_TO_IDS.toString(), buffer.array()); + if (queueID != null) { + final byte[] encodedBuffer = new byte[Long.BYTES]; + ByteBuffer buffer = ByteBuffer.wrap(encodedBuffer); + buffer.putLong(0, queueID); + copyMessage.putBytesProperty(Message.HDR_ROUTE_TO_IDS.toString(), encodedBuffer); } postOffice.route(copyMessage, tx, false, rejectDuplicate); @@ -3555,7 +3550,7 @@ public class QueueImpl extends CriticalComponentImpl implements Queue { } if (copyOriginalHeaders) { - copy.referenceOriginalMessage(message, ref.getQueue().getName().toString()); + copy.referenceOriginalMessage(message, ref.getQueue().getName()); } copy.setExpiration(0); @@ -3584,7 +3579,7 @@ public class QueueImpl extends CriticalComponentImpl implements Queue { ActiveMQServerLogger.LOGGER.errorExpiringReferencesNoBindings(expiryAddress); acknowledge(tx, ref, AckReason.EXPIRED, null); } else { - move(expiryAddress, tx, ref, true, false); + move(expiryAddress, tx, ref, true, false, null); } } else { if (!printErrorExpiring) {
