You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ja...@apache.org on 2014/08/13 16:50:14 UTC

git commit: Workaround Netty bug by not use CompositeByteBuf

Repository: cassandra
Updated Branches:
  refs/heads/cassandra-2.1.0 397c0b7c0 -> fe4c8c2c5


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/cassandra-2.1.0
Commit: fe4c8c2c5709d1c909fcacd8af081a8394c99554
Parents: 397c0b7
Author: Norman Maurer <nm...@redhat.com>
Authored: Wed Aug 13 15:41:59 2014 +0200
Committer: Jake Luciani <ja...@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);
         }
     }