Repository: cassandra
Updated Branches:
  refs/heads/trunk df8b5687f -> 231ad7a4e


Workaround Netty bug by not use CompositeByteBuf

Due a bug in Netty [1] using a CompositeByteBuf can lead to data-corruption 
when partial writes happen on a socket. To workaround this bug we replaced the 
CompositeByteBuf usage (which was caused by Unpooled.wrappedBuffer(...)).

Beside work around the Netty bug this also reduce the object creation and so 
should stay in place even after Netty will be upgraded to 4.0.22.Final.

This commit also reverted the partial workaround that was in place before.

[1] https://github.com/netty/netty/issues/2761

patch by normanm; reviewed by tjake for CASSANDRA-7695


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/fe4c8c2c
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/fe4c8c2c
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/fe4c8c2c

Branch: refs/heads/trunk
Commit: fe4c8c2c5709d1c909fcacd8af081a8394c99554
Parents: 397c0b7
Author: Norman Maurer <nmau...@redhat.com>
Authored: Wed Aug 13 15:41:59 2014 +0200
Committer: Jake Luciani <j...@apache.org>
Committed: Wed Aug 13 10:48:34 2014 -0400

----------------------------------------------------------------------
 src/java/org/apache/cassandra/service/CassandraDaemon.java | 9 ---------
 src/java/org/apache/cassandra/transport/Frame.java         | 4 ++--
 2 files changed, 2 insertions(+), 11 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/fe4c8c2c/src/java/org/apache/cassandra/service/CassandraDaemon.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/CassandraDaemon.java 
b/src/java/org/apache/cassandra/service/CassandraDaemon.java
index 5c88cb1..7c85f81 100644
--- a/src/java/org/apache/cassandra/service/CassandraDaemon.java
+++ b/src/java/org/apache/cassandra/service/CassandraDaemon.java
@@ -37,7 +37,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import com.addthis.metrics.reporter.config.ReporterConfig;
-import io.netty.util.internal.PlatformDependent;
 import org.apache.cassandra.concurrent.JMXEnabledThreadPoolExecutor;
 import org.apache.cassandra.concurrent.Stage;
 import org.apache.cassandra.concurrent.StageManager;
@@ -70,14 +69,6 @@ import org.apache.cassandra.utils.Pair;
  */
 public class CassandraDaemon
 {
-
-    //Workaround for netty issue
-    static 
-    {
-        System.setProperty("io.netty.noUnsafe","true");
-        assert !PlatformDependent.hasUnsafe();
-    }
-
     public static final String MBEAN_NAME = 
"org.apache.cassandra.db:type=NativeAccess";
 
     // Have a dedicated thread to call exit to avoid deadlock in the case 
where the thread that wants to invoke exit

http://git-wip-us.apache.org/repos/asf/cassandra/blob/fe4c8c2c/src/java/org/apache/cassandra/transport/Frame.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/transport/Frame.java 
b/src/java/org/apache/cassandra/transport/Frame.java
index 7ca1115..01bee10 100644
--- a/src/java/org/apache/cassandra/transport/Frame.java
+++ b/src/java/org/apache/cassandra/transport/Frame.java
@@ -23,7 +23,6 @@ import java.util.EnumSet;
 import java.util.List;
 
 import io.netty.buffer.ByteBuf;
-import io.netty.buffer.Unpooled;
 import io.netty.channel.*;
 import io.netty.handler.codec.ByteToMessageDecoder;
 import io.netty.handler.codec.MessageToMessageDecoder;
@@ -296,7 +295,8 @@ public class Frame
             header.writeByte(type.opcode);
             header.writeInt(frame.body.readableBytes());
 
-            results.add(Unpooled.wrappedBuffer(header, frame.body));
+            results.add(header);
+            results.add(frame.body);
         }
     }
 

Reply via email to