[
https://issues.apache.org/jira/browse/CASSANDRA-19580?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18135931#comment-18135931
]
Brandon Williams edited comment on CASSANDRA-19580 at 10/31/26, 9:50 PM:
-------------------------------------------------------------------------
bq. it does look like the problem is with this patch
This patch changed the behavior around announcing shutdown such that there are
two paths and thus different exception messages depending on the timing of
whether the shutdown message has been seen or not, so the test needs to handle
both, fixed [in this
commit|https://github.com/driftx/cassandra/commit/09da2c53198f268f40ed8b41f93d37c00eaff6a7].
This was the source of flakiness in the test.
||Branch||CI||
|[4.0|https://github.com/driftx/cassandra/tree/CASSANDRA-19580-4.0]|[summary|^4.0-ci_summary.html]|
|[4.1|https://github.com/driftx/cassandra/tree/CASSANDRA-19580-4.1]|[summary|^4.1-ci_summary.html]|
|[5.0|https://github.com/driftx/cassandra/tree/CASSANDRA-19580-5.0]|[summary|^5.0-ci_summary.html]|
No failures related to this. For 4.0 and 4.1 I used CASSANDRA-21629 and ran
everything using CASSANDRA-21647
was (Author: brandon.williams):
bq. it does look like the problem is with this patch
This patch changed the behavior around announcing shutdown such that there are
two paths and thus different exception messages depending on the timing of
whether the shutdown message has been seen or not, fixed [in this
commit|https://github.com/driftx/cassandra/commit/09da2c53198f268f40ed8b41f93d37c00eaff6a7].
This was the source of flakiness in the test.
||Branch||CI||
|[4.0|https://github.com/driftx/cassandra/tree/CASSANDRA-19580-4.0]|[summary|^4.0-ci_summary.html]|
|[4.1|https://github.com/driftx/cassandra/tree/CASSANDRA-19580-4.1]|[summary|^4.1-ci_summary.html]|
|[5.0|https://github.com/driftx/cassandra/tree/CASSANDRA-19580-5.0]|[summary|^5.0-ci_summary.html]|
No failures related to this. For 4.0 and 4.1 I used CASSANDRA-21629 and ran
everything using CASSANDRA-21647
> Unable to contact any seeds with node in hibernate status
> ---------------------------------------------------------
>
> Key: CASSANDRA-19580
> URL: https://issues.apache.org/jira/browse/CASSANDRA-19580
> Project: Apache Cassandra
> Issue Type: Bug
> Components: Cluster/Gossip
> Reporter: Cameron Zemek
> Assignee: Szymon Miezal
> Priority: Normal
> Fix For: 4.0.x, 4.1.x, 5.0.x
>
> Attachments: 4.0-ci_summary.html, 4.0-results_details.tar.xz,
> 4.1-ci_summary.html, 4.1-results_details.tar.xz, 5.0-ci_summary.html,
> 5.0-results_details.tar.xz
>
> Time Spent: 1h
> Remaining Estimate: 0h
>
> We have customer running into the error 'Unable to contact any seeds!' . I
> have been able to reproduce this issue if I kill Cassandra as its joining
> which will put the node into hibernate status. Once a node is in hibernate it
> will no longer receive any SYN messages from other nodes during startup and
> as it sends only itself as digest in outbound SYN messages it never receives
> any states in any of the ACK replies. So once it gets to the check
> `seenAnySeed` in it fails as the endpointStateMap is empty.
>
> A workaround is copying the system.peers table from other node but this is
> less than ideal. I tested modifying maybeGossipToSeed as follows:
> {code:java}
> /* Possibly gossip to a seed for facilitating partition healing */
> private void maybeGossipToSeed(MessageOut<GossipDigestSyn> prod)
> {
> int size = seeds.size();
> if (size > 0)
> {
> if (size == 1 &&
> seeds.contains(FBUtilities.getBroadcastAddress()))
> {
> return;
> }
> if (liveEndpoints.size() == 0)
> {
> List<GossipDigest> gDigests = prod.payload.gDigests;
> if (gDigests.size() == 1 &&
> gDigests.get(0).endpoint.equals(FBUtilities.getBroadcastAddress()))
> {
> gDigests = new ArrayList<GossipDigest>();
> GossipDigestSyn digestSynMessage = new
> GossipDigestSyn(DatabaseDescriptor.getClusterName(),
>
> DatabaseDescriptor.getPartitionerName(),
>
> gDigests);
> MessageOut<GossipDigestSyn> message = new
> MessageOut<GossipDigestSyn>(MessagingService.Verb.GOSSIP_DIGEST_SYN,
>
> digestSynMessage,
>
> GossipDigestSyn.serializer);
> sendGossip(message, seeds);
> }
> else
> {
> sendGossip(prod, seeds);
> }
> }
> else
> {
> /* Gossip with the seed with some probability. */
> double probability = seeds.size() / (double)
> (liveEndpoints.size() + unreachableEndpoints.size());
> double randDbl = random.nextDouble();
> if (randDbl <= probability)
> sendGossip(prod, seeds);
> }
> }
> }
> {code}
> Only problem is this is the same as SYN from shadow round. It does resolve
> the issue however as then receive an ACK with all the states.
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]