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 2020/09/08 11:01:29 UTC
[cassandra] branch trunk updated: Avoid adding locahost when
streaming trivial ranges
This is an automated email from the ASF dual-hosted git repository.
marcuse pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git
The following commit(s) were added to refs/heads/trunk by this push:
new 5ec3bae Avoid adding locahost when streaming trivial ranges
5ec3bae is described below
commit 5ec3bae22b6e252d629daae8549036c1a547d21a
Author: Marcus Eriksson <ma...@apache.org>
AuthorDate: Thu Sep 3 09:32:21 2020 +0200
Avoid adding locahost when streaming trivial ranges
Patch by marcuse; reviewed by Blake Eggleston for CASSANDRA-16099
---
CHANGES.txt | 1 +
.../org/apache/cassandra/dht/RangeFetchMapCalculator.java | 6 +++++-
src/java/org/apache/cassandra/dht/RangeStreamer.java | 3 ++-
.../apache/cassandra/dht/RangeFetchMapCalculatorTest.java | 13 +++++++++++++
4 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/CHANGES.txt b/CHANGES.txt
index 9188115..1e188bd 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
4.0-beta3
+ * Avoid adding locahost when streaming trivial ranges (CASSANDRA-16099)
* Add nodetool getfullquerylog (CASSANDRA-15988)
* Fix yaml format and alignment in tpstats (CASSANDRA-11402)
* Avoid trying to keep track of RTs for endpoints we won't write to during read repair (CASSANDRA-16084)
diff --git a/src/java/org/apache/cassandra/dht/RangeFetchMapCalculator.java b/src/java/org/apache/cassandra/dht/RangeFetchMapCalculator.java
index 2a2de01..9d47d46f 100644
--- a/src/java/org/apache/cassandra/dht/RangeFetchMapCalculator.java
+++ b/src/java/org/apache/cassandra/dht/RangeFetchMapCalculator.java
@@ -168,8 +168,12 @@ public class RangeFetchMapCalculator
{
if (passFilters(replica, localDCCheck))
{
- fetchMap.put(replica.endpoint(), trivialRange);
added = true;
+ // if we pass filters, it means that we don't filter away localhost and we can count it as a source,
+ // see RangeFetchMapCalculator#addEndpoints and RangeStreamer#getRangeFetchMap
+ if (replica.isSelf())
+ continue; // but don't add localhost to avoid streaming locally
+ fetchMap.put(replica.endpoint(), trivialRange);
break;
}
}
diff --git a/src/java/org/apache/cassandra/dht/RangeStreamer.java b/src/java/org/apache/cassandra/dht/RangeStreamer.java
index 75ccb4b..4928259 100644
--- a/src/java/org/apache/cassandra/dht/RangeStreamer.java
+++ b/src/java/org/apache/cassandra/dht/RangeStreamer.java
@@ -613,7 +613,8 @@ public class RangeStreamer
/**
* Verify that source returned for each range is correct
*/
- private static void validateRangeFetchMap(EndpointsByRange rangesWithSources, Multimap<InetAddressAndPort, Range<Token>> rangeFetchMapMap, String keyspace)
+ @VisibleForTesting
+ static void validateRangeFetchMap(EndpointsByRange rangesWithSources, Multimap<InetAddressAndPort, Range<Token>> rangeFetchMapMap, String keyspace)
{
for (Map.Entry<InetAddressAndPort, Range<Token>> entry : rangeFetchMapMap.entries())
{
diff --git a/test/unit/org/apache/cassandra/dht/RangeFetchMapCalculatorTest.java b/test/unit/org/apache/cassandra/dht/RangeFetchMapCalculatorTest.java
index e2b09bc..8574786 100644
--- a/test/unit/org/apache/cassandra/dht/RangeFetchMapCalculatorTest.java
+++ b/test/unit/org/apache/cassandra/dht/RangeFetchMapCalculatorTest.java
@@ -371,6 +371,19 @@ public class RangeFetchMapCalculatorTest
}
+ @Test
+ public void testTrivalRangeLocalHostStreaming() throws UnknownHostException
+ {
+ // trivial ranges ranges should not try to stream from localhost
+ EndpointsByRange.Builder rangesWithSources = new EndpointsByRange.Builder();
+ addTrivialRangeAndSources(rangesWithSources, 21, 30, "127.0.0.2", "127.0.0.1");
+ addTrivialRangeAndSources(rangesWithSources, 31, 40, "127.0.0.1", "127.0.0.2");
+ EndpointsByRange ebr = rangesWithSources.build();
+ RangeFetchMapCalculator calculator = new RangeFetchMapCalculator(ebr, Collections.emptyList(), "Test");
+ RangeStreamer.validateRangeFetchMap(ebr, calculator.getRangeFetchMap(), "Test");
+ }
+
+
private void assertArrays(Collection<Range<Token>> expected, Collection<Range<Token>> result)
{
Assert.assertEquals(expected.size(), result.size());
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org