You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ma...@apache.org on 2017/03/02 08:27:21 UTC

cassandra git commit: Make it possible to override MessagingService.Verb ids

Repository: cassandra
Updated Branches:
  refs/heads/trunk f08cf5af0 -> 14c3edcce


Make it possible to override MessagingService.Verb ids

Patch by marcuse; reviewed by Jason Brown for CASSANDRA-13283


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

Branch: refs/heads/trunk
Commit: 14c3edcce46bfb541b66b75ba451d15367ef15e6
Parents: f08cf5a
Author: Marcus Eriksson <ma...@apache.org>
Authored: Wed Mar 1 08:21:29 2017 +0100
Committer: Marcus Eriksson <ma...@apache.org>
Committed: Thu Mar 2 09:26:36 2017 +0100

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../org/apache/cassandra/net/MessageIn.java     |  2 +-
 .../org/apache/cassandra/net/MessageOut.java    |  4 +--
 .../apache/cassandra/net/MessagingService.java  | 35 ++++++++++++++++++--
 4 files changed, 37 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/14c3edcc/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 08826aa..6e11b7f 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 4.0
+ * Make it possible to override MessagingService.Verb ids (CASSANDRA-13283)
  * Avoid synchronized on prepareForRepair in ActiveRepairService (CASSANDRA-9292)
  * Adds the ability to use uncompressed chunks in compressed files (CASSANDRA-10520)
  * Don't flush sstables when streaming for incremental repair (CASSANDRA-13226)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/14c3edcc/src/java/org/apache/cassandra/net/MessageIn.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/net/MessageIn.java b/src/java/org/apache/cassandra/net/MessageIn.java
index 0de9520..8774d38 100644
--- a/src/java/org/apache/cassandra/net/MessageIn.java
+++ b/src/java/org/apache/cassandra/net/MessageIn.java
@@ -84,7 +84,7 @@ public class MessageIn<T>
     {
         InetAddress from = CompactEndpointSerializationHelper.deserialize(in);
 
-        MessagingService.Verb verb = MessagingService.verbValues[in.readInt()];
+        MessagingService.Verb verb = MessagingService.Verb.fromId(in.readInt());
         int parameterCount = in.readInt();
         Map<String, byte[]> parameters;
         if (parameterCount == 0)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/14c3edcc/src/java/org/apache/cassandra/net/MessageOut.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/net/MessageOut.java b/src/java/org/apache/cassandra/net/MessageOut.java
index 94019f2..a38aed5 100644
--- a/src/java/org/apache/cassandra/net/MessageOut.java
+++ b/src/java/org/apache/cassandra/net/MessageOut.java
@@ -104,7 +104,7 @@ public class MessageOut<T>
     {
         CompactEndpointSerializationHelper.serialize(from, out);
 
-        out.writeInt(verb.ordinal());
+        out.writeInt(verb.getId());
         out.writeInt(parameters.size());
         for (Map.Entry<String, byte[]> entry : parameters.entrySet())
         {
@@ -134,7 +134,7 @@ public class MessageOut<T>
     {
         int size = CompactEndpointSerializationHelper.serializedSize(from);
 
-        size += TypeSizes.sizeof(verb.ordinal());
+        size += TypeSizes.sizeof(verb.getId());
         size += TypeSizes.sizeof(parameters.size());
         for (Map.Entry<String, byte[]> entry : parameters.entrySet())
         {

http://git-wip-us.apache.org/repos/asf/cassandra/blob/14c3edcc/src/java/org/apache/cassandra/net/MessagingService.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/net/MessagingService.java b/src/java/org/apache/cassandra/net/MessagingService.java
index ef521ef..5ce6628 100644
--- a/src/java/org/apache/cassandra/net/MessagingService.java
+++ b/src/java/org/apache/cassandra/net/MessagingService.java
@@ -45,6 +45,8 @@ import org.cliffc.high_scale_lib.NonBlockingHashMap;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.carrotsearch.hppc.IntObjectMap;
+import com.carrotsearch.hppc.IntObjectOpenHashMap;
 import org.apache.cassandra.concurrent.ExecutorLocals;
 import org.apache.cassandra.concurrent.ScheduledExecutors;
 import org.apache.cassandra.concurrent.Stage;
@@ -232,13 +234,42 @@ public final class MessagingService implements MessagingServiceMBean
         UNUSED_5,
         ;
 
+        private int id;
+        Verb()
+        {
+            id = ordinal();
+        }
+
+        /**
+         * Unused, but it is an extension point for adding custom verbs
+         * @param id
+         */
+        Verb(int id)
+        {
+            this.id = id;
+        }
+
         public long getTimeout()
         {
             return DatabaseDescriptor.getRpcTimeout();
         }
-    }
 
-    public static final Verb[] verbValues = Verb.values();
+        public int getId()
+        {
+            return id;
+        }
+        private static final IntObjectMap<Verb> idToVerbMap = new IntObjectOpenHashMap<>(values().length);
+        static
+        {
+            for (Verb v : values())
+                idToVerbMap.put(v.getId(), v);
+        }
+
+        public static Verb fromId(int id)
+        {
+            return idToVerbMap.get(id);
+        }
+    }
 
     public static final EnumMap<MessagingService.Verb, Stage> verbStages = new EnumMap<MessagingService.Verb, Stage>(MessagingService.Verb.class)
     {{