Github user franz1981 commented on a diff in the pull request: https://github.com/apache/activemq-artemis/pull/1793#discussion_r165604393 --- Diff: artemis-protocols/artemis-openwire-protocol/src/main/java/org/apache/activemq/artemis/core/protocol/openwire/OpenWireMessage.java --- @@ -0,0 +1,1152 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.activemq.artemis.core.protocol.openwire; +import java.io.InputStream; +import java.nio.ByteBuffer; +import java.util.LinkedList; +import java.util.Set; + +import io.netty.buffer.ByteBuf; +import org.apache.activemq.artemis.api.core.ActiveMQBuffer; +import org.apache.activemq.artemis.api.core.ActiveMQBuffers; +import org.apache.activemq.artemis.api.core.ActiveMQException; +import org.apache.activemq.artemis.api.core.ActiveMQPropertyConversionException; +import org.apache.activemq.artemis.api.core.ICoreMessage; +import org.apache.activemq.artemis.api.core.Message; +import org.apache.activemq.artemis.api.core.RefCountMessage; +import org.apache.activemq.artemis.api.core.RoutingType; +import org.apache.activemq.artemis.api.core.SimpleString; +import org.apache.activemq.artemis.core.buffers.impl.ChannelBufferWrapper; +import org.apache.activemq.artemis.core.buffers.impl.ResetLimitWrappedActiveMQBuffer; +import org.apache.activemq.artemis.core.message.LargeBodyEncoder; +import org.apache.activemq.artemis.core.message.impl.CoreMessageObjectPools; +import org.apache.activemq.artemis.core.persistence.Persister; +import org.apache.activemq.artemis.core.protocol.core.impl.PacketImpl; +import org.apache.activemq.artemis.reader.MessageUtil; +import org.apache.activemq.artemis.utils.DataConstants; +import org.apache.activemq.artemis.utils.UUID; +import org.apache.activemq.artemis.utils.collections.TypedProperties; +import org.jboss.logging.Logger; + +/** Note: you shouldn't change properties using multi-threads. Change your properties before you can send it to multiple + * consumers */ +public class OpenWireMessage extends RefCountMessage { + public static final int BUFFER_HEADER_SPACE = PacketImpl.PACKET_HEADERS_SIZE; + + private volatile int memoryEstimate = -1; + private static final Logger logger = Logger.getLogger(OpenWireMessage.class); + + // There's an integer with the number of bytes for the body + public static final int BODY_OFFSET = DataConstants.SIZE_INT; + + /** That is the encode for the whole message, including properties.. + it does not include the buffer for the Packet send and receive header on core protocol */ + protected ByteBuf buffer; + + private volatile boolean validBuffer = false; --- End diff -- optional but (very) wellcome: `volatile` and `synchronized` has a big cost on hot paths (even if uncontended) so please evaluate which properties/methods could avoid using them on hot paths. I know that the original current `CoreMessage` hasn't fixed yet on this aspect, but it would be great to have this one right from the start :+1: @michaelandrepearce wdyt?
---