You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by br...@apache.org on 2021/04/19 13:47:56 UTC
[cassandra] branch CASSANDRA-16588-trunk created (now 7edd037)
This is an automated email from the ASF dual-hosted git repository.
brandonwilliams pushed a change to branch CASSANDRA-16588-trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git.
at 7edd037 Update testDelayedResponse
This branch includes the following new commits:
new 9f038b8 Ignore stale ack in shadow
new 13b66fe Check for specific app states in shadow round
new c0571fe Fix condition in shadow round check
new f892ba6 HIGHRES config
new 8fa270d Filter out dead states
new d803403 Update tests
new 7edd037 Update testDelayedResponse
The 7 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org
[cassandra] 01/07: Ignore stale ack in shadow
Posted by br...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
brandonwilliams pushed a commit to branch CASSANDRA-16588-trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git
commit 9f038b877fee83bf1c450171337db602c32c360b
Author: Brandon Williams <br...@apache.org>
AuthorDate: Wed Apr 14 13:49:21 2021 -0500
Ignore stale ack in shadow
---
src/java/org/apache/cassandra/gms/Gossiper.java | 15 ++++++++
.../org/apache/cassandra/gms/ShadowRoundTest.java | 40 ++++++++++++++++++++++
2 files changed, 55 insertions(+)
diff --git a/src/java/org/apache/cassandra/gms/Gossiper.java b/src/java/org/apache/cassandra/gms/Gossiper.java
index b5434aa..923ffc8 100644
--- a/src/java/org/apache/cassandra/gms/Gossiper.java
+++ b/src/java/org/apache/cassandra/gms/Gossiper.java
@@ -1969,12 +1969,27 @@ public class Gossiper implements IFailureDetectionEventListener, GossiperMBean
return (scheduledGossipTask != null) && (!scheduledGossipTask.isCancelled());
}
+ public boolean isShadowRoundStateMap(Map<InetAddressAndPort, EndpointState> epStateMap)
+ {
+ // it is possible for a previously queued ack to be sent to us when we come back up in shadow
+ EndpointState localState = epStateMap.get(FBUtilities.getBroadcastAddressAndPort());
+ if (localState != null && epStateMap.size() == 1) // response only contains our IP
+ {
+ logger.debug("Not exiting shadow round because received bogus ACK {} -> {}", FBUtilities.getBroadcastAddressAndPort(), localState);
+ return false;
+ }
+ return true;
+ }
+
protected void maybeFinishShadowRound(InetAddressAndPort respondent, boolean isInShadowRound, Map<InetAddressAndPort, EndpointState> epStateMap)
{
if (inShadowRound)
{
if (!isInShadowRound)
{
+ if (!isShadowRoundStateMap(epStateMap))
+ return;
+
if (!seeds.contains(respondent))
logger.warn("Received an ack from {}, who isn't a seed. Ensure your seed list includes a live node. Exiting shadow round",
respondent);
diff --git a/test/unit/org/apache/cassandra/gms/ShadowRoundTest.java b/test/unit/org/apache/cassandra/gms/ShadowRoundTest.java
index 2bcbc50..f5d436f 100644
--- a/test/unit/org/apache/cassandra/gms/ShadowRoundTest.java
+++ b/test/unit/org/apache/cassandra/gms/ShadowRoundTest.java
@@ -28,6 +28,7 @@ import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.apache.cassandra.config.Config;
import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.db.Keyspace;
import org.apache.cassandra.db.commitlog.CommitLog;
@@ -39,6 +40,7 @@ import org.apache.cassandra.net.MockMessagingService;
import org.apache.cassandra.net.MockMessagingSpy;
import org.apache.cassandra.net.Verb;
import org.apache.cassandra.service.StorageService;
+import org.apache.cassandra.utils.FBUtilities;
import static org.apache.cassandra.net.MockMessagingService.verb;
import static org.junit.Assert.assertEquals;
@@ -117,4 +119,42 @@ public class ShadowRoundTest
assertEquals(0, spyAck2.messagesIntercepted);
assertEquals(0, spyMigrationReq.messagesIntercepted);
}
+
+ @Test
+ public void testBadAckInShadow()
+ {
+ final AtomicBoolean ackSend = new AtomicBoolean(false);
+ MockMessagingSpy spySyn = MockMessagingService.when(verb(Verb.GOSSIP_DIGEST_SYN))
+ .respondN((msgOut, to) ->
+ {
+ // ACK with bad data in shadow round
+ if (!ackSend.compareAndSet(false, true))
+ {
+ while (!Gossiper.instance.isEnabled()) ;
+ }
+
+ HeartBeatState hb = new HeartBeatState(123, 456);
+ EndpointState state = new EndpointState(hb);
+ GossipDigestAck payload = new GossipDigestAck(
+ Collections.singletonList(new GossipDigest(FBUtilities.getBroadcastAddressAndPort(), hb.getGeneration(), hb.getHeartBeatVersion())),
+ Collections.singletonMap(FBUtilities.getBroadcastAddressAndPort(), state));
+
+ logger.warn("Simulating bad digest ACK reply");
+ return Message.builder(Verb.GOSSIP_DIGEST_ACK, payload)
+ .from(to)
+ .build();
+ }, 1);
+
+
+ System.setProperty(Config.PROPERTY_PREFIX + "auto_bootstrap", "false");
+ try
+ {
+ StorageService.instance.initServer();
+ }
+ catch (Exception e)
+ {
+ assertEquals("Unable to gossip with any peers", e.getMessage());
+ }
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org
[cassandra] 04/07: HIGHRES config
Posted by br...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
brandonwilliams pushed a commit to branch CASSANDRA-16588-trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git
commit f892ba679db67b2df91e0a34f7432e0ab26990fa
Author: Sam Tunnicliffe <sa...@beobal.com>
AuthorDate: Thu Apr 15 12:09:21 2021 +0100
HIGHRES config
---
.circleci/config.yml | 102 +++++++++++++++++++++++++--------------------------
1 file changed, 51 insertions(+), 51 deletions(-)
diff --git a/.circleci/config.yml b/.circleci/config.yml
index 56f9bd9..27c67cb 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -3,10 +3,10 @@ jobs:
j8_jvm_upgrade_dtests:
docker:
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:20210304
- resource_class: medium
+ resource_class: xlarge
working_directory: ~/
shell: /bin/bash -eo pipefail -l
- parallelism: 1
+ parallelism: 2
steps:
- attach_workspace:
at: /home/cassandra
@@ -96,10 +96,10 @@ jobs:
j8_cqlsh-dtests-py2-with-vnodes:
docker:
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:20210304
- resource_class: medium
+ resource_class: xlarge
working_directory: ~/
shell: /bin/bash -eo pipefail -l
- parallelism: 4
+ parallelism: 100
steps:
- attach_workspace:
at: /home/cassandra
@@ -175,10 +175,10 @@ jobs:
j11_unit_tests:
docker:
- image: apache/cassandra-testing-ubuntu2004-java11:20210304
- resource_class: medium
+ resource_class: xlarge
working_directory: ~/
shell: /bin/bash -eo pipefail -l
- parallelism: 4
+ parallelism: 100
steps:
- attach_workspace:
at: /home/cassandra
@@ -269,10 +269,10 @@ jobs:
j8_cqlsh-dtests-py38-no-vnodes:
docker:
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:20210304
- resource_class: medium
+ resource_class: xlarge
working_directory: ~/
shell: /bin/bash -eo pipefail -l
- parallelism: 4
+ parallelism: 100
steps:
- attach_workspace:
at: /home/cassandra
@@ -348,10 +348,10 @@ jobs:
j11_cqlsh-dtests-py3-with-vnodes:
docker:
- image: apache/cassandra-testing-ubuntu2004-java11:20210304
- resource_class: medium
+ resource_class: xlarge
working_directory: ~/
shell: /bin/bash -eo pipefail -l
- parallelism: 4
+ parallelism: 100
steps:
- attach_workspace:
at: /home/cassandra
@@ -428,10 +428,10 @@ jobs:
j11_cqlsh-dtests-py3-no-vnodes:
docker:
- image: apache/cassandra-testing-ubuntu2004-java11:20210304
- resource_class: medium
+ resource_class: xlarge
working_directory: ~/
shell: /bin/bash -eo pipefail -l
- parallelism: 4
+ parallelism: 100
steps:
- attach_workspace:
at: /home/cassandra
@@ -508,10 +508,10 @@ jobs:
j11_cqlsh-dtests-py38-with-vnodes:
docker:
- image: apache/cassandra-testing-ubuntu2004-java11:20210304
- resource_class: medium
+ resource_class: xlarge
working_directory: ~/
shell: /bin/bash -eo pipefail -l
- parallelism: 4
+ parallelism: 100
steps:
- attach_workspace:
at: /home/cassandra
@@ -588,10 +588,10 @@ jobs:
j8_cqlsh-dtests-py3-with-vnodes:
docker:
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:20210304
- resource_class: medium
+ resource_class: xlarge
working_directory: ~/
shell: /bin/bash -eo pipefail -l
- parallelism: 4
+ parallelism: 100
steps:
- attach_workspace:
at: /home/cassandra
@@ -667,10 +667,10 @@ jobs:
j8_cqlsh-dtests-py2-no-vnodes:
docker:
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:20210304
- resource_class: medium
+ resource_class: xlarge
working_directory: ~/
shell: /bin/bash -eo pipefail -l
- parallelism: 4
+ parallelism: 100
steps:
- attach_workspace:
at: /home/cassandra
@@ -746,10 +746,10 @@ jobs:
j11_cqlsh-dtests-py2-with-vnodes:
docker:
- image: apache/cassandra-testing-ubuntu2004-java11:20210304
- resource_class: medium
+ resource_class: xlarge
working_directory: ~/
shell: /bin/bash -eo pipefail -l
- parallelism: 4
+ parallelism: 100
steps:
- attach_workspace:
at: /home/cassandra
@@ -826,10 +826,10 @@ jobs:
j11_dtests-with-vnodes:
docker:
- image: apache/cassandra-testing-ubuntu2004-java11:20210304
- resource_class: medium
+ resource_class: xlarge
working_directory: ~/
shell: /bin/bash -eo pipefail -l
- parallelism: 4
+ parallelism: 100
steps:
- attach_workspace:
at: /home/cassandra
@@ -909,10 +909,10 @@ jobs:
j8_dtests-no-vnodes:
docker:
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:20210304
- resource_class: medium
+ resource_class: xlarge
working_directory: ~/
shell: /bin/bash -eo pipefail -l
- parallelism: 4
+ parallelism: 100
steps:
- attach_workspace:
at: /home/cassandra
@@ -969,10 +969,10 @@ jobs:
j8_upgradetests-no-vnodes:
docker:
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:20210304
- resource_class: medium
+ resource_class: xlarge
working_directory: ~/
shell: /bin/bash -eo pipefail -l
- parallelism: 4
+ parallelism: 100
steps:
- attach_workspace:
at: /home/cassandra
@@ -1029,7 +1029,7 @@ jobs:
utests_stress:
docker:
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:20210304
- resource_class: medium
+ resource_class: xlarge
working_directory: ~/
shell: /bin/bash -eo pipefail -l
parallelism: 1
@@ -1076,10 +1076,10 @@ jobs:
j8_unit_tests:
docker:
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:20210304
- resource_class: medium
+ resource_class: xlarge
working_directory: ~/
shell: /bin/bash -eo pipefail -l
- parallelism: 4
+ parallelism: 100
steps:
- attach_workspace:
at: /home/cassandra
@@ -1169,10 +1169,10 @@ jobs:
j11_jvm_dtests:
docker:
- image: apache/cassandra-testing-ubuntu2004-java11:20210304
- resource_class: medium
+ resource_class: xlarge
working_directory: ~/
shell: /bin/bash -eo pipefail -l
- parallelism: 1
+ parallelism: 2
steps:
- attach_workspace:
at: /home/cassandra
@@ -1346,10 +1346,10 @@ jobs:
j11_cqlsh-dtests-py2-no-vnodes:
docker:
- image: apache/cassandra-testing-ubuntu2004-java11:20210304
- resource_class: medium
+ resource_class: xlarge
working_directory: ~/
shell: /bin/bash -eo pipefail -l
- parallelism: 4
+ parallelism: 100
steps:
- attach_workspace:
at: /home/cassandra
@@ -1465,10 +1465,10 @@ jobs:
j8_dtests-with-vnodes:
docker:
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:20210304
- resource_class: medium
+ resource_class: xlarge
working_directory: ~/
shell: /bin/bash -eo pipefail -l
- parallelism: 4
+ parallelism: 100
steps:
- attach_workspace:
at: /home/cassandra
@@ -1525,10 +1525,10 @@ jobs:
j11_cqlsh-dtests-py38-no-vnodes:
docker:
- image: apache/cassandra-testing-ubuntu2004-java11:20210304
- resource_class: medium
+ resource_class: xlarge
working_directory: ~/
shell: /bin/bash -eo pipefail -l
- parallelism: 4
+ parallelism: 100
steps:
- attach_workspace:
at: /home/cassandra
@@ -1605,10 +1605,10 @@ jobs:
j8_jvm_dtests:
docker:
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:20210304
- resource_class: medium
+ resource_class: xlarge
working_directory: ~/
shell: /bin/bash -eo pipefail -l
- parallelism: 1
+ parallelism: 5
steps:
- attach_workspace:
at: /home/cassandra
@@ -1780,10 +1780,10 @@ jobs:
j8_cqlsh-dtests-py3-no-vnodes:
docker:
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:20210304
- resource_class: medium
+ resource_class: xlarge
working_directory: ~/
shell: /bin/bash -eo pipefail -l
- parallelism: 4
+ parallelism: 100
steps:
- attach_workspace:
at: /home/cassandra
@@ -1859,10 +1859,10 @@ jobs:
j8_cqlsh-dtests-py38-with-vnodes:
docker:
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:20210304
- resource_class: medium
+ resource_class: xlarge
working_directory: ~/
shell: /bin/bash -eo pipefail -l
- parallelism: 4
+ parallelism: 100
steps:
- attach_workspace:
at: /home/cassandra
@@ -1938,7 +1938,7 @@ jobs:
utests_long:
docker:
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:20210304
- resource_class: medium
+ resource_class: xlarge
working_directory: ~/
shell: /bin/bash -eo pipefail -l
parallelism: 1
@@ -1985,10 +1985,10 @@ jobs:
utests_system_keyspace_directory:
docker:
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:20210304
- resource_class: medium
+ resource_class: xlarge
working_directory: ~/
shell: /bin/bash -eo pipefail -l
- parallelism: 4
+ parallelism: 100
steps:
- attach_workspace:
at: /home/cassandra
@@ -2116,7 +2116,7 @@ jobs:
utests_fqltool:
docker:
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:20210304
- resource_class: medium
+ resource_class: xlarge
working_directory: ~/
shell: /bin/bash -eo pipefail -l
parallelism: 1
@@ -2163,10 +2163,10 @@ jobs:
j11_dtests-no-vnodes:
docker:
- image: apache/cassandra-testing-ubuntu2004-java11:20210304
- resource_class: medium
+ resource_class: xlarge
working_directory: ~/
shell: /bin/bash -eo pipefail -l
- parallelism: 4
+ parallelism: 100
steps:
- attach_workspace:
at: /home/cassandra
@@ -2246,10 +2246,10 @@ jobs:
utests_compression:
docker:
- image: apache/cassandra-testing-ubuntu2004-java11-w-dependencies:20210304
- resource_class: medium
+ resource_class: xlarge
working_directory: ~/
shell: /bin/bash -eo pipefail -l
- parallelism: 4
+ parallelism: 100
steps:
- attach_workspace:
at: /home/cassandra
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org
[cassandra] 03/07: Fix condition in shadow round check
Posted by br...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
brandonwilliams pushed a commit to branch CASSANDRA-16588-trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git
commit c0571fe6f5a48f20d92d82f9393590d39d7c27f3
Author: Sam Tunnicliffe <sa...@beobal.com>
AuthorDate: Thu Apr 15 15:03:04 2021 +0100
Fix condition in shadow round check
---
src/java/org/apache/cassandra/gms/Gossiper.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/java/org/apache/cassandra/gms/Gossiper.java b/src/java/org/apache/cassandra/gms/Gossiper.java
index 4fde131..34bdb1b 100644
--- a/src/java/org/apache/cassandra/gms/Gossiper.java
+++ b/src/java/org/apache/cassandra/gms/Gossiper.java
@@ -1974,7 +1974,7 @@ public class Gossiper implements IFailureDetectionEventListener, GossiperMBean
// it is possible for a previously queued ack to be sent to us when we come back up in shadow
EndpointState localState = epStateMap.get(FBUtilities.getBroadcastAddressAndPort());
// return false if response doesn't contain state necessary for safety check
- return localState != null && localState.containsApplicationState(ApplicationState.HOST_ID);
+ return localState == null || localState.containsApplicationState(ApplicationState.HOST_ID);
}
protected void maybeFinishShadowRound(InetAddressAndPort respondent, boolean isInShadowRound, Map<InetAddressAndPort, EndpointState> epStateMap)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org
[cassandra] 05/07: Filter out dead states
Posted by br...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
brandonwilliams pushed a commit to branch CASSANDRA-16588-trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git
commit 8fa270d26a25f862a5bcccc90ec73a2c3435edfc
Author: Brandon Williams <br...@apache.org>
AuthorDate: Fri Apr 16 14:13:13 2021 -0500
Filter out dead states
---
src/java/org/apache/cassandra/gms/Gossiper.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/java/org/apache/cassandra/gms/Gossiper.java b/src/java/org/apache/cassandra/gms/Gossiper.java
index 34bdb1b..e54fbc0 100644
--- a/src/java/org/apache/cassandra/gms/Gossiper.java
+++ b/src/java/org/apache/cassandra/gms/Gossiper.java
@@ -1974,7 +1974,7 @@ public class Gossiper implements IFailureDetectionEventListener, GossiperMBean
// it is possible for a previously queued ack to be sent to us when we come back up in shadow
EndpointState localState = epStateMap.get(FBUtilities.getBroadcastAddressAndPort());
// return false if response doesn't contain state necessary for safety check
- return localState == null || localState.containsApplicationState(ApplicationState.HOST_ID);
+ return localState == null || isDeadState(localState) || localState.containsApplicationState(ApplicationState.HOST_ID);
}
protected void maybeFinishShadowRound(InetAddressAndPort respondent, boolean isInShadowRound, Map<InetAddressAndPort, EndpointState> epStateMap)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org
[cassandra] 02/07: Check for specific app states in shadow round
Posted by br...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
brandonwilliams pushed a commit to branch CASSANDRA-16588-trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git
commit 13b66fe9d5b08c31fd6b6ed0a9d5929ca742dcd2
Author: Sam Tunnicliffe <sa...@beobal.com>
AuthorDate: Thu Apr 15 11:46:21 2021 +0100
Check for specific app states in shadow round
---
src/java/org/apache/cassandra/gms/Gossiper.java | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/src/java/org/apache/cassandra/gms/Gossiper.java b/src/java/org/apache/cassandra/gms/Gossiper.java
index 923ffc8..4fde131 100644
--- a/src/java/org/apache/cassandra/gms/Gossiper.java
+++ b/src/java/org/apache/cassandra/gms/Gossiper.java
@@ -1969,16 +1969,12 @@ public class Gossiper implements IFailureDetectionEventListener, GossiperMBean
return (scheduledGossipTask != null) && (!scheduledGossipTask.isCancelled());
}
- public boolean isShadowRoundStateMap(Map<InetAddressAndPort, EndpointState> epStateMap)
+ public boolean sufficientForStartupSafetyCheck(Map<InetAddressAndPort, EndpointState> epStateMap)
{
// it is possible for a previously queued ack to be sent to us when we come back up in shadow
EndpointState localState = epStateMap.get(FBUtilities.getBroadcastAddressAndPort());
- if (localState != null && epStateMap.size() == 1) // response only contains our IP
- {
- logger.debug("Not exiting shadow round because received bogus ACK {} -> {}", FBUtilities.getBroadcastAddressAndPort(), localState);
- return false;
- }
- return true;
+ // return false if response doesn't contain state necessary for safety check
+ return localState != null && localState.containsApplicationState(ApplicationState.HOST_ID);
}
protected void maybeFinishShadowRound(InetAddressAndPort respondent, boolean isInShadowRound, Map<InetAddressAndPort, EndpointState> epStateMap)
@@ -1987,8 +1983,12 @@ public class Gossiper implements IFailureDetectionEventListener, GossiperMBean
{
if (!isInShadowRound)
{
- if (!isShadowRoundStateMap(epStateMap))
+ if (!sufficientForStartupSafetyCheck(epStateMap))
+ {
+ logger.debug("Not exiting shadow round because received ACK with insufficient states {} -> {}",
+ FBUtilities.getBroadcastAddressAndPort(), epStateMap.get(FBUtilities.getBroadcastAddressAndPort()));
return;
+ }
if (!seeds.contains(respondent))
logger.warn("Received an ack from {}, who isn't a seed. Ensure your seed list includes a live node. Exiting shadow round",
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org
[cassandra] 07/07: Update testDelayedResponse
Posted by br...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
brandonwilliams pushed a commit to branch CASSANDRA-16588-trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git
commit 7edd0376e0e9372159f53a3f1a7e5de169ae4c4c
Author: Brandon Williams <br...@apache.org>
AuthorDate: Mon Apr 19 08:47:17 2021 -0500
Update testDelayedResponse
---
test/unit/org/apache/cassandra/gms/ShadowRoundTest.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/test/unit/org/apache/cassandra/gms/ShadowRoundTest.java b/test/unit/org/apache/cassandra/gms/ShadowRoundTest.java
index 7dcf3bc..4b76e0c 100644
--- a/test/unit/org/apache/cassandra/gms/ShadowRoundTest.java
+++ b/test/unit/org/apache/cassandra/gms/ShadowRoundTest.java
@@ -118,8 +118,8 @@ public class ShadowRoundTest
assertEquals("Unable to contact any seeds!", e.getMessage());
}
- // we expect one SYN for each seed during shadow round + additional SYNs after gossiper has been enabled
- assertTrue(spySyn.messagesIntercepted > noOfSeeds);
+ // we expect one SYN for each seed during shadow round
+ assertEquals(spySyn.messagesIntercepted, noOfSeeds);
// we don't expect to emit any GOSSIP_DIGEST_ACK2 or SCHEMA_PULL messages
assertEquals(0, spyAck2.messagesIntercepted);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org
[cassandra] 06/07: Update tests
Posted by br...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
brandonwilliams pushed a commit to branch CASSANDRA-16588-trunk
in repository https://gitbox.apache.org/repos/asf/cassandra.git
commit d80340302cec9a320c2e4da2c934d85efa009ac4
Author: Brandon Williams <br...@apache.org>
AuthorDate: Fri Apr 16 14:13:26 2021 -0500
Update tests
---
.../org/apache/cassandra/gms/ShadowRoundTest.java | 70 ++++++++++++++++++++--
1 file changed, 65 insertions(+), 5 deletions(-)
diff --git a/test/unit/org/apache/cassandra/gms/ShadowRoundTest.java b/test/unit/org/apache/cassandra/gms/ShadowRoundTest.java
index f5d436f..7dcf3bc 100644
--- a/test/unit/org/apache/cassandra/gms/ShadowRoundTest.java
+++ b/test/unit/org/apache/cassandra/gms/ShadowRoundTest.java
@@ -19,7 +19,12 @@
package org.apache.cassandra.gms;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
import org.junit.After;
@@ -34,6 +39,7 @@ import org.apache.cassandra.db.Keyspace;
import org.apache.cassandra.db.commitlog.CommitLog;
import org.apache.cassandra.exceptions.ConfigurationException;
import org.apache.cassandra.locator.IEndpointSnitch;
+import org.apache.cassandra.locator.InetAddressAndPort;
import org.apache.cassandra.locator.PropertyFileSnitch;
import org.apache.cassandra.net.Message;
import org.apache.cassandra.net.MockMessagingService;
@@ -132,14 +138,31 @@ public class ShadowRoundTest
{
while (!Gossiper.instance.isEnabled()) ;
}
+ InetAddressAndPort junkaddr;
+ try
+ {
+ junkaddr = InetAddressAndPort.getByName("1.1.1.1");
+ }
+ catch (UnknownHostException e)
+ {
+ throw new RuntimeException(e);
+ }
HeartBeatState hb = new HeartBeatState(123, 456);
EndpointState state = new EndpointState(hb);
- GossipDigestAck payload = new GossipDigestAck(
- Collections.singletonList(new GossipDigest(FBUtilities.getBroadcastAddressAndPort(), hb.getGeneration(), hb.getHeartBeatVersion())),
- Collections.singletonMap(FBUtilities.getBroadcastAddressAndPort(), state));
-
- logger.warn("Simulating bad digest ACK reply");
+ List<GossipDigest> gDigests = new ArrayList<GossipDigest>();
+ gDigests.add(new GossipDigest(FBUtilities.getBroadcastAddressAndPort(), hb.getGeneration(), hb.getHeartBeatVersion()));
+ gDigests.add(new GossipDigest(junkaddr, hb.getGeneration(), hb.getHeartBeatVersion()));
+ Map<InetAddressAndPort, EndpointState> smap = new HashMap<InetAddressAndPort, EndpointState>()
+ {
+ {
+ put(FBUtilities.getBroadcastAddressAndPort(), state);
+ put(junkaddr, state);
+ }
+ };
+ GossipDigestAck payload = new GossipDigestAck(gDigests, smap);
+
+ logger.debug("Simulating bad digest ACK reply");
return Message.builder(Verb.GOSSIP_DIGEST_ACK, payload)
.from(to)
.build();
@@ -157,4 +180,41 @@ public class ShadowRoundTest
}
}
+ @Test
+ public void testPreviouslyAssassinatedInShadow()
+ {
+ final AtomicBoolean ackSend = new AtomicBoolean(false);
+ MockMessagingSpy spySyn = MockMessagingService.when(verb(Verb.GOSSIP_DIGEST_SYN))
+ .respondN((msgOut, to) ->
+ {
+ // ACK with self assassinated in shadow round
+ if (!ackSend.compareAndSet(false, true))
+ {
+ while (!Gossiper.instance.isEnabled()) ;
+ }
+ HeartBeatState hb = new HeartBeatState(123, 456);
+ EndpointState state = new EndpointState(hb);
+ state.addApplicationState(ApplicationState.STATUS_WITH_PORT, VersionedValue.unsafeMakeVersionedValue(VersionedValue.STATUS_LEFT, 1));
+ GossipDigestAck payload = new GossipDigestAck(
+ Collections.singletonList(new GossipDigest(FBUtilities.getBroadcastAddressAndPort(), hb.getGeneration(), hb.getHeartBeatVersion())),
+ Collections.singletonMap(FBUtilities.getBroadcastAddressAndPort(), state));
+
+ logger.debug("Simulating bad digest ACK reply");
+ return Message.builder(Verb.GOSSIP_DIGEST_ACK, payload)
+ .from(to)
+ .build();
+ }, 1);
+
+
+ System.setProperty(Config.PROPERTY_PREFIX + "auto_bootstrap", "false");
+ try
+ {
+ StorageService.instance.initServer();
+ }
+ catch (Exception e)
+ {
+ assertEquals("Unable to gossip with any peers", e.getMessage());
+ }
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org