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 2015/06/17 23:40:08 UTC

[1/4] cassandra git commit: ArrivalWindow should use primitives

Repository: cassandra
Updated Branches:
  refs/heads/trunk 075ff5000 -> 72ab4b944


ArrivalWindow should use primitives

patch by sankalp kohli; reviewed by jasobrown for CASSANDRA-9496


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

Branch: refs/heads/trunk
Commit: ad8047abdf5db6652b9586e039debb1e855db09a
Parents: ec52e77
Author: Jason Brown <ja...@gmail.com>
Authored: Wed Jun 17 14:33:44 2015 -0700
Committer: Jason Brown <ja...@gmail.com>
Committed: Wed Jun 17 14:33:44 2015 -0700

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../apache/cassandra/gms/FailureDetector.java   | 59 ++++++++++++++--
 .../cassandra/utils/BoundedStatsDeque.java      | 72 --------------------
 .../gms/ArrayBackedBoundedStatsTest.java        | 57 ++++++++++++++++
 .../cassandra/utils/BoundedStatsDequeTest.java  | 66 ------------------
 5 files changed, 111 insertions(+), 144 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/ad8047ab/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 6d031f6..753fb1c 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 2.0.16:
+ * ArrivalWindow should use primitives (CASSANDRA-9496)
  * Periodically submit background compaction tasks (CASSANDRA-9592)
  * Set HAS_MORE_PAGES flag to false when PagingState is null (CASSANDRA-9571)
  * Backport indexed value validation fix from CASSANDRA-9057 (CASSANDRA-9564)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/ad8047ab/src/java/org/apache/cassandra/gms/FailureDetector.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/gms/FailureDetector.java b/src/java/org/apache/cassandra/gms/FailureDetector.java
index e247e48..8fdd99f 100644
--- a/src/java/org/apache/cassandra/gms/FailureDetector.java
+++ b/src/java/org/apache/cassandra/gms/FailureDetector.java
@@ -27,14 +27,12 @@ import java.util.concurrent.TimeUnit;
 import javax.management.MBeanServer;
 import javax.management.ObjectName;
 
-import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.io.FSWriteError;
 import org.apache.cassandra.io.util.FileUtils;
-import org.apache.cassandra.utils.BoundedStatsDeque;
 import org.apache.cassandra.utils.FBUtilities;
 
 /**
@@ -289,11 +287,60 @@ public class FailureDetector implements IFailureDetector, FailureDetectorMBean
     }
 }
 
+/*
+ This class is not thread safe.
+ */
+class ArrayBackedBoundedStats
+{
+    private final long[] arrivalIntervals;
+    private long sum = 0;
+    private int index = 0;
+    private boolean isFilled = false;
+    private volatile double mean = 0;
+
+    public ArrayBackedBoundedStats(final int size)
+    {
+        arrivalIntervals = new long[size];
+    }
+
+    public void add(long interval)
+    {
+        if(index == arrivalIntervals.length)
+        {
+            isFilled = true;
+            index = 0;
+        }
+
+        if(isFilled)
+            sum = sum - arrivalIntervals[index];
+
+        arrivalIntervals[index++] = interval;
+        sum += interval;
+        mean = (double)sum / size();
+    }
+
+    private int size()
+    {
+        return isFilled ? arrivalIntervals.length : index;
+    }
+
+    public double mean()
+    {
+        return mean;
+    }
+
+    public long[] getArrivalIntervals()
+    {
+        return arrivalIntervals;
+    }
+
+}
+
 class ArrivalWindow
 {
     private static final Logger logger = LoggerFactory.getLogger(ArrivalWindow.class);
     private long tLast = 0L;
-    private final BoundedStatsDeque arrivalIntervals;
+    private final ArrayBackedBoundedStats arrivalIntervals;
 
     // this is useless except to provide backwards compatibility in phi_convict_threshold,
     // because everyone seems pretty accustomed to the default of 8, and users who have
@@ -309,7 +356,7 @@ class ArrivalWindow
 
     ArrivalWindow(int size)
     {
-        arrivalIntervals = new BoundedStatsDeque(size);
+        arrivalIntervals = new ArrayBackedBoundedStats(size);
     }
 
     private static long getMaxInterval()
@@ -355,14 +402,14 @@ class ArrivalWindow
     // see CASSANDRA-2597 for an explanation of the math at work here.
     double phi(long tnow)
     {
-        assert arrivalIntervals.size() > 0 && tLast > 0; // should not be called before any samples arrive
+        assert arrivalIntervals.mean() > 0 && tLast > 0; // should not be called before any samples arrive
         long t = tnow - tLast;
         return t / mean();
     }
 
     public String toString()
     {
-        return StringUtils.join(arrivalIntervals.iterator(), " ");
+        return Arrays.toString(arrivalIntervals.getArrivalIntervals());
     }
 }
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/ad8047ab/src/java/org/apache/cassandra/utils/BoundedStatsDeque.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/utils/BoundedStatsDeque.java b/src/java/org/apache/cassandra/utils/BoundedStatsDeque.java
deleted file mode 100644
index 3983b74..0000000
--- a/src/java/org/apache/cassandra/utils/BoundedStatsDeque.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * 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.cassandra.utils;
-
-import java.util.Iterator;
-import java.util.NoSuchElementException;
-import java.util.concurrent.LinkedBlockingDeque;
-import java.util.concurrent.atomic.AtomicLong;
-import java.util.concurrent.atomic.AtomicReference;
-
-import com.google.common.util.concurrent.AtomicDouble;
-
-/**
- * bounded threadsafe deque
- */
-public class BoundedStatsDeque implements Iterable<Long>
-{
-    private final LinkedBlockingDeque<Long> deque;
-    private final AtomicLong sum;
-
-    public BoundedStatsDeque(int size)
-    {
-        deque = new LinkedBlockingDeque<>(size);
-        sum = new AtomicLong(0);
-    }
-
-    public Iterator<Long> iterator()
-    {
-        return deque.iterator();
-    }
-
-    public int size()
-    {
-        return deque.size();
-    }
-
-    public void add(long i)
-    {
-        if (!deque.offer(i))
-        {
-            Long removed = deque.remove();
-            sum.addAndGet(-removed);
-            deque.offer(i);
-        }
-        sum.addAndGet(i);
-    }
-
-    public long sum()
-    {
-        return sum.get();
-    }
-
-    public double mean()
-    {
-        return size() > 0 ? ((double) sum()) / size() : 0;
-    }
-}

http://git-wip-us.apache.org/repos/asf/cassandra/blob/ad8047ab/test/unit/org/apache/cassandra/gms/ArrayBackedBoundedStatsTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/gms/ArrayBackedBoundedStatsTest.java b/test/unit/org/apache/cassandra/gms/ArrayBackedBoundedStatsTest.java
new file mode 100644
index 0000000..b6f4e07
--- /dev/null
+++ b/test/unit/org/apache/cassandra/gms/ArrayBackedBoundedStatsTest.java
@@ -0,0 +1,57 @@
+package org.apache.cassandra.gms;
+
+import java.util.Arrays;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+public class ArrayBackedBoundedStatsTest {
+
+    @Test
+    public void test()
+    {
+        int size = 4;
+
+        ArrayBackedBoundedStats bsd = new ArrayBackedBoundedStats(size);
+        //check the values for an empty result
+        assertEquals(0, bsd.mean(), 0.001d);
+
+        bsd.add(1L); //this one falls out, over limit
+        bsd.add(2L);
+        bsd.add(3L);
+        bsd.add(4L);
+        bsd.add(5L);
+
+        //verify that everything is in there
+        long [] expected = new long[] {2,3,4,5};
+        assertArrivalIntervals(bsd, expected);
+
+        //check results
+        assertEquals(3.5, bsd.mean(), 0.001d);
+    }
+
+    private void assertArrivalIntervals(ArrayBackedBoundedStats bsd, long [] expected)
+    {
+        Arrays.sort(expected);
+        Arrays.sort(bsd.getArrivalIntervals());
+        assertTrue(Arrays.equals(bsd.getArrivalIntervals(), expected));
+
+    }
+
+    @Test
+    public void testMultipleRounds() throws Exception
+    {
+        int size = 5;
+        ArrayBackedBoundedStats bsd = new ArrayBackedBoundedStats(size);
+
+        for(long i=0; i <= 1000;i++)
+        {
+            bsd.add(i);
+        }
+
+        long [] expected = new long[] {1000,999,998,997, 996};
+        assertArrivalIntervals(bsd, expected);
+    }
+}

http://git-wip-us.apache.org/repos/asf/cassandra/blob/ad8047ab/test/unit/org/apache/cassandra/utils/BoundedStatsDequeTest.java
----------------------------------------------------------------------
diff --git a/test/unit/org/apache/cassandra/utils/BoundedStatsDequeTest.java b/test/unit/org/apache/cassandra/utils/BoundedStatsDequeTest.java
deleted file mode 100644
index b64a765..0000000
--- a/test/unit/org/apache/cassandra/utils/BoundedStatsDequeTest.java
+++ /dev/null
@@ -1,66 +0,0 @@
-package org.apache.cassandra.utils;
-/*
- *
- * 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.
- *
- */
-
-
-import static org.junit.Assert.*;
-
-import java.util.Iterator;
-
-import org.junit.Test;
-
-public class BoundedStatsDequeTest
-{
-    @Test
-    public void test()
-    {
-        int size = 4;
-
-        BoundedStatsDeque bsd = new BoundedStatsDeque(size);
-        //check the values for an empty result
-        assertEquals(0, bsd.size());
-        assertEquals(0, bsd.sum(), 0.001d);
-        assertEquals(0, bsd.mean(), 0.001d);
-
-        bsd.add(1L); //this one falls out, over limit
-        bsd.add(2L);
-        bsd.add(3L);
-        bsd.add(4L);
-        bsd.add(5L);
-
-        //verify that everything is in there
-        Iterator<Long> iter = bsd.iterator();
-        assertTrue(iter.hasNext());
-        assertEquals(2L, iter.next(), 0);
-        assertTrue(iter.hasNext());
-        assertEquals(3L, iter.next(), 0);
-        assertTrue(iter.hasNext());
-        assertEquals(4L, iter.next(), 0);
-        assertTrue(iter.hasNext());
-        assertEquals(5L, iter.next(), 0);
-        assertFalse(iter.hasNext());
-
-        //check results
-        assertEquals(size, bsd.size());
-        assertEquals(14, bsd.sum(), 0.001d);
-        assertEquals(3.5, bsd.mean(), 0.001d);
-    }
-}


[2/4] cassandra git commit: Merge branch 'cassandra-2.0' into cassandra-2.1

Posted by ja...@apache.org.
Merge branch 'cassandra-2.0' into cassandra-2.1

Conflicts:
	CHANGES.txt
	src/java/org/apache/cassandra/utils/BoundedStatsDeque.java


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

Branch: refs/heads/trunk
Commit: 4c15970119e021dd0fe4b2fe8b4f9c594d21f334
Parents: 7c5fc40 ad8047a
Author: Jason Brown <ja...@gmail.com>
Authored: Wed Jun 17 14:36:59 2015 -0700
Committer: Jason Brown <ja...@gmail.com>
Committed: Wed Jun 17 14:36:59 2015 -0700

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../apache/cassandra/gms/FailureDetector.java   | 59 +++++++++++++++--
 .../cassandra/utils/BoundedStatsDeque.java      | 68 --------------------
 .../gms/ArrayBackedBoundedStatsTest.java        | 57 ++++++++++++++++
 .../cassandra/utils/BoundedStatsDequeTest.java  | 66 -------------------
 5 files changed, 111 insertions(+), 140 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/4c159701/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 009d974,753fb1c..8f3f9f0
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,51 -1,8 +1,52 @@@
 -2.0.16:
 +2.1.7
 + * Fix memory leak in Ref due to ConcurrentLinkedQueue.remove() behaviour (CASSANDRA-9549)
 +Merged from 2.0
+  * ArrivalWindow should use primitives (CASSANDRA-9496)
   * Periodically submit background compaction tasks (CASSANDRA-9592)
   * Set HAS_MORE_PAGES flag to false when PagingState is null (CASSANDRA-9571)
 - * Backport indexed value validation fix from CASSANDRA-9057 (CASSANDRA-9564)
 +
 +
 +2.1.6
 + * (cqlsh) Fix using COPY through SOURCE or -f (CASSANDRA-9083)
 + * Fix occasional lack of `system` keyspace in schema tables (CASSANDRA-8487)
 + * Use ProtocolError code instead of ServerError code for native protocol
 +   error responses to unsupported protocol versions (CASSANDRA-9451)
 + * Default commitlog_sync_batch_window_in_ms changed to 2ms (CASSANDRA-9504)
 + * Fix empty partition assertion in unsorted sstable writing tools (CASSANDRA-9071)
 + * Ensure truncate without snapshot cannot produce corrupt responses (CASSANDRA-9388) 
 + * Consistent error message when a table mixes counter and non-counter
 +   columns (CASSANDRA-9492)
 + * Avoid getting unreadable keys during anticompaction (CASSANDRA-9508)
 + * (cqlsh) Better float precision by default (CASSANDRA-9224)
 + * Improve estimated row count (CASSANDRA-9107)
 + * Optimize range tombstone memory footprint (CASSANDRA-8603)
 + * Use configured gcgs in anticompaction (CASSANDRA-9397)
 + * Warn on misuse of unlogged batches (CASSANDRA-9282)
 + * Failure detector detects and ignores local pauses (CASSANDRA-9183)
 + * Add utility class to support for rate limiting a given log statement (CASSANDRA-9029)
 + * Add missing consistency levels to cassandra-stess (CASSANDRA-9361)
 + * Fix commitlog getCompletedTasks to not increment (CASSANDRA-9339)
 + * Fix for harmless exceptions logged as ERROR (CASSANDRA-8564)
 + * Delete processed sstables in sstablesplit/sstableupgrade (CASSANDRA-8606)
 + * Improve sstable exclusion from partition tombstones (CASSANDRA-9298)
 + * Validate the indexed column rather than the cell's contents for 2i (CASSANDRA-9057)
 + * Add support for top-k custom 2i queries (CASSANDRA-8717)
 + * Fix error when dropping table during compaction (CASSANDRA-9251)
 + * cassandra-stress supports validation operations over user profiles (CASSANDRA-8773)
 + * Add support for rate limiting log messages (CASSANDRA-9029)
 + * Log the partition key with tombstone warnings (CASSANDRA-8561)
 + * Reduce runWithCompactionsDisabled poll interval to 1ms (CASSANDRA-9271)
 + * Fix PITR commitlog replay (CASSANDRA-9195)
 + * GCInspector logs very different times (CASSANDRA-9124)
 + * Fix deleting from an empty list (CASSANDRA-9198)
 + * Update tuple and collection types that use a user-defined type when that UDT
 +   is modified (CASSANDRA-9148, CASSANDRA-9192)
 + * Use higher timeout for prepair and snapshot in repair (CASSANDRA-9261)
 + * Fix anticompaction blocking ANTI_ENTROPY stage (CASSANDRA-9151)
 + * Repair waits for anticompaction to finish (CASSANDRA-9097)
 + * Fix streaming not holding ref when stream error (CASSANDRA-9295)
 + * Fix canonical view returning early opened SSTables (CASSANDRA-9396)
 +Merged from 2.0:
   * Don't accumulate more range than necessary in RangeTombstone.Tracker (CASSANDRA-9486)
   * Add broadcast and rpc addresses to system.local (CASSANDRA-9436)
   * Always mark sstable suspect when corrupted (CASSANDRA-9478)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/4c159701/src/java/org/apache/cassandra/gms/FailureDetector.java
----------------------------------------------------------------------


[4/4] cassandra git commit: Merge branch 'cassandra-2.2' into trunk

Posted by ja...@apache.org.
Merge branch 'cassandra-2.2' into trunk


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

Branch: refs/heads/trunk
Commit: 72ab4b944f915761d8b1bfd22ff75200499e6718
Parents: 075ff50 8b021db
Author: Jason Brown <ja...@gmail.com>
Authored: Wed Jun 17 14:39:43 2015 -0700
Committer: Jason Brown <ja...@gmail.com>
Committed: Wed Jun 17 14:39:43 2015 -0700

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../apache/cassandra/gms/FailureDetector.java   | 59 +++++++++++++++--
 .../cassandra/utils/BoundedStatsDeque.java      | 68 --------------------
 .../gms/ArrayBackedBoundedStatsTest.java        | 57 ++++++++++++++++
 .../cassandra/utils/BoundedStatsDequeTest.java  | 66 -------------------
 5 files changed, 111 insertions(+), 140 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/72ab4b94/CHANGES.txt
----------------------------------------------------------------------


[3/4] cassandra git commit: Merge branch 'cassandra-2.1' into cassandra-2.2

Posted by ja...@apache.org.
Merge branch 'cassandra-2.1' into cassandra-2.2


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

Branch: refs/heads/trunk
Commit: 8b021db7c2b4adbb5db8e8bba3ca916ef41fc4f7
Parents: 6068efb 4c15970
Author: Jason Brown <ja...@gmail.com>
Authored: Wed Jun 17 14:39:09 2015 -0700
Committer: Jason Brown <ja...@gmail.com>
Committed: Wed Jun 17 14:39:09 2015 -0700

----------------------------------------------------------------------
 CHANGES.txt                                     |  1 +
 .../apache/cassandra/gms/FailureDetector.java   | 59 +++++++++++++++--
 .../cassandra/utils/BoundedStatsDeque.java      | 68 --------------------
 .../gms/ArrayBackedBoundedStatsTest.java        | 57 ++++++++++++++++
 .../cassandra/utils/BoundedStatsDequeTest.java  | 66 -------------------
 5 files changed, 111 insertions(+), 140 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/8b021db7/CHANGES.txt
----------------------------------------------------------------------
diff --cc CHANGES.txt
index 3e9940c,8f3f9f0..c32596c
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@@ -1,40 -1,12 +1,41 @@@
 -2.1.7
 +2.2
 + * Fix connection leak in CqlRecordWriter (CASSANDRA-9576)
 + * Mlockall before opening system sstables & remove boot_without_jna option (CASSANDRA-9573)
 + * Add functions to convert timeuuid to date or time, deprecate dateOf and unixTimestampOf (CASSANDRA-9229)
 + * Make sure we cancel non-compacting sstables from LifecycleTransaction (CASSANDRA-9566)
 + * Fix deprecated repair JMX API (CASSANDRA-9570)
 +Merged from 2.1:
   * Fix memory leak in Ref due to ConcurrentLinkedQueue.remove() behaviour (CASSANDRA-9549)
  Merged from 2.0
+  * ArrivalWindow should use primitives (CASSANDRA-9496)
   * Periodically submit background compaction tasks (CASSANDRA-9592)
   * Set HAS_MORE_PAGES flag to false when PagingState is null (CASSANDRA-9571)
 + * Add logback metrics (CASSANDRA-9378)
  
  
 -2.1.6
 +2.2.0-rc1
 + * Compressed commit log should measure compressed space used (CASSANDRA-9095)
 + * Fix comparison bug in CassandraRoleManager#collectRoles (CASSANDRA-9551)
 + * Add tinyint,smallint,time,date support for UDFs (CASSANDRA-9400)
 + * Deprecates SSTableSimpleWriter and SSTableSimpleUnsortedWriter (CASSANDRA-9546)
 + * Empty INITCOND treated as null in aggregate (CASSANDRA-9457)
 + * Remove use of Cell in Thrift MapReduce classes (CASSANDRA-8609)
 + * Integrate pre-release Java Driver 2.2-rc1, custom build (CASSANDRA-9493)
 + * Clean up gossiper logic for old versions (CASSANDRA-9370)
 + * Fix custom payload coding/decoding to match the spec (CASSANDRA-9515)
 + * ant test-all results incomplete when parsed (CASSANDRA-9463)
 + * Disallow frozen<> types in function arguments and return types for
 +   clarity (CASSANDRA-9411)
 + * Static Analysis to warn on unsafe use of Autocloseable instances (CASSANDRA-9431)
 + * Update commitlog archiving examples now that commitlog segments are
 +   not recycled (CASSANDRA-9350)
 + * Extend Transactional API to sstable lifecycle management (CASSANDRA-8568)
 + * (cqlsh) Add support for native protocol 4 (CASSANDRA-9399)
 + * Ensure that UDF and UDAs are keyspace-isolated (CASSANDRA-9409)
 + * Revert CASSANDRA-7807 (tracing completion client notifications) (CASSANDRA-9429)
 + * Add ability to stop compaction by ID (CASSANDRA-7207)
 + * Let CassandraVersion handle SNAPSHOT version (CASSANDRA-9438)
 +Merged from 2.1:
   * (cqlsh) Fix using COPY through SOURCE or -f (CASSANDRA-9083)
   * Fix occasional lack of `system` keyspace in schema tables (CASSANDRA-8487)
   * Use ProtocolError code instead of ServerError code for native protocol

http://git-wip-us.apache.org/repos/asf/cassandra/blob/8b021db7/src/java/org/apache/cassandra/gms/FailureDetector.java
----------------------------------------------------------------------