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?


---

Reply via email to