Github user srdo commented on a diff in the pull request:
https://github.com/apache/storm/pull/2704#discussion_r193493524
--- Diff:
storm-client/src/jvm/org/apache/storm/pacemaker/codec/ThriftEncoder.java ---
@@ -12,59 +12,54 @@
package org.apache.storm.pacemaker.codec;
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.ByteBufAllocator;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.handler.codec.MessageToMessageEncoder;
import java.io.IOException;
+import java.util.List;
import org.apache.storm.generated.HBMessage;
import org.apache.storm.generated.HBMessageData;
import org.apache.storm.generated.HBServerMessageType;
import org.apache.storm.messaging.netty.ControlMessage;
import org.apache.storm.messaging.netty.INettySerializable;
import org.apache.storm.messaging.netty.SaslMessageToken;
import org.apache.storm.utils.Utils;
-import org.jboss.netty.buffer.ChannelBuffer;
-import org.jboss.netty.buffer.ChannelBuffers;
-import org.jboss.netty.channel.Channel;
-import org.jboss.netty.channel.ChannelHandlerContext;
-import org.jboss.netty.handler.codec.oneone.OneToOneEncoder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class ThriftEncoder extends OneToOneEncoder {
+public class ThriftEncoder extends MessageToMessageEncoder<Object> {
private static final Logger LOG = LoggerFactory
.getLogger(ThriftEncoder.class);
- private HBMessage encodeNettySerializable(INettySerializable
netty_message,
- HBServerMessageType mType) {
+ private HBMessage encodeNettySerializable(ByteBufAllocator alloc,
+ INettySerializable netty_message, HBServerMessageType mType) {
HBMessageData message_data = new HBMessageData();
HBMessage m = new HBMessage();
+ ByteBuf messageBuffer =
alloc.heapBuffer(netty_message.encodeLength());
try {
- ChannelBuffer cbuffer = netty_message.buffer();
- if (cbuffer.hasArray()) {
- message_data.set_message_blob(cbuffer.array());
- } else {
- byte buff[] = new byte[netty_message.encodeLength()];
- cbuffer.readBytes(buff, 0, netty_message.encodeLength());
- message_data.set_message_blob(buff);
- }
+ netty_message.write(messageBuffer);
+ message_data.set_message_blob(messageBuffer.array());
--- End diff --
Good point. How about using Unpooled.wrappedBuffer to wrap a byte[] we
allocate manually here? We need a heap array in any case, so I don't think
there's any benefit to letting Netty allocate it.
I don't love letting Netty allocate the byte array we're using either,
because we're going to release the ByteBuf before making use of the array.
---