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
----------------------------------------------------------------------