Svyatoslav Kushnarev created CASSANDRA-21545:
------------------------------------------------
Summary: CQL load interference with Cassandra 6 cold startup
Key: CASSANDRA-21545
URL: https://issues.apache.org/jira/browse/CASSANDRA-21545
Project: Apache Cassandra
Issue Type: Bug
Components: Cluster/Membership
Reporter: Svyatoslav Kushnarev
_*{{CQL}}*_ traffic during first cold start can fail _*TCM/CMS*_ election with
empty {{{_}ReplicaGroups{_}.}}
{{}}
On first cold start, while Cassandra is still running _*TCM/CMS*_ election,
concurrent client _*CQL*_ load can cause *_Paxos_* prepare failures against
empty ownership metadata:
{{}}
{{_IllegalStateException: Could not find range for token -9223372036854775808
in ReplicaGroups: ReplicaGroups{}_}}
{{}}
That failure then surfaces as *{{WriteFailureException}}* in
*{{DistributedMetadataLogKeyspace}}* CAS, and TCM election fails so the node
errors out.
{{}}
With no concurrent _*CQL*_ client traffic during cold start, the same
_*Cassandra 6.0-alpha2*_ start completes successfully.
{{}}
h3. Steps to reproduce:
# Start a fresh *_Cassandra 6.0-alpha2_* node/cluster (first CMS
initialisation).
# While it is still booting, repeatedly issue light *_CQL_* against the native
port
# Paxos prepare fails on empty {{{}ReplicaGroups{}{}}},
{{DistributedMetadataLogKeyspace}} CAS fails, and first-CMS initialization /
election aborts.
{*}Error log below{*}:
{code:java}
INFO o.apache.cassandra.tcm.log.LocalLog Enacted PreInitialize. New tail is
Epoch{epoch=1} ERROR o.a.c.s.paxos.PaxosRequestCallback Failed to apply
Prepare(823cca62-596f-11f1-94a1-186780f5f064) locally
java.lang.IllegalStateException: Could not find range for token
-9223372036854775808 in ReplicaGroups: ReplicaGroups{} at
org.apache.cassandra.tcm.ownership.ReplicaGroups.forRange(ReplicaGroups.java:150)
at
org.apache.cassandra.tcm.ownership.ReplicaGroups.forToken(ReplicaGroups.java:155)
at
org.apache.cassandra.locator.EndpointsForToken.natural(EndpointsForToken.java:167)
at
org.apache.cassandra.service.paxos.Paxos.isInRangeAndShouldProcess(Paxos.java:1181)
at
org.apache.cassandra.service.paxos.PaxosPrepare$RequestHandler.execute(PaxosPrepare.java:1120)
at
org.apache.cassandra.service.paxos.PaxosRequestCallback.executeOnSelf(PaxosRequestCallback.java:61)
at
org.apache.cassandra.service.paxos.PaxosPrepare.lambda$start$0(PaxosPrepare.java:429)
at
org.apache.cassandra.concurrent.ExecutionFailure$1.run(ExecutionFailure.java:138)
at org.apache.cassandra.concurrent.SEPWorker.run(SEPWorker.java:156) at
io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.base/java.lang.Thread.run(Thread.java:840) ERROR
o.a.c.s.DistributedMetadataLogKeyspace Caught an exception while trying to CAS
org.apache.cassandra.exceptions.WriteFailureException: Operation failed -
received 0 responses and 1 failures: UNKNOWN from /100.29.27.6:7000 at
org.apache.cassandra.service.paxos.Paxos$MaybeFailure.markAndThrowAsTimeoutOrFailure(Paxos.java:640)
at org.apache.cassandra.service.paxos.Paxos.begin(Paxos.java:1150) at
org.apache.cassandra.service.paxos.Paxos.cas(Paxos.java:734) at
org.apache.cassandra.service.StorageProxy.cas(StorageProxy.java:393) at
org.apache.cassandra.cql3.statements.ModificationStatement.executeWithCondition(ModificationStatement.java:700)
at
org.apache.cassandra.cql3.statements.ModificationStatement.execute(ModificationStatement.java:658)
at org.apache.cassandra.cql3.QueryProcessor.execute(QueryProcessor.java:601)
at org.apache.cassandra.cql3.QueryProcessor.execute(QueryProcessor.java:584) at
org.apache.cassandra.schema.DistributedMetadataLogKeyspace.initialize(DistributedMetadataLogKeyspace.java:90)
at
org.apache.cassandra.schema.DistributedMetadataLogKeyspace.tryCommit(DistributedMetadataLogKeyspace.java:127)
at
org.apache.cassandra.tcm.PaxosBackedProcessor.tryCommitOne(PaxosBackedProcessor.java:69)
at
org.apache.cassandra.tcm.AbstractLocalProcessor.commit(AbstractLocalProcessor.java:99)
at
org.apache.cassandra.tcm.ClusterMetadataService$SwitchableProcessor.commit(ClusterMetadataService.java:973)
at org.apache.cassandra.tcm.Processor.commit(Processor.java:50) at
org.apache.cassandra.tcm.ClusterMetadataService.commit(ClusterMetadataService.java:613)
at
org.apache.cassandra.tcm.ClusterMetadataService.commit(ClusterMetadataService.java:578)
at org.apache.cassandra.tcm.Startup.initializeAsFirstCMSNode(Startup.java:153)
at org.apache.cassandra.tcm.migration.Election.finish(Election.java:139) at
org.apache.cassandra.tcm.migration.Election.nominateSelf(Election.java:99) at
org.apache.cassandra.tcm.Startup.initializeForDiscovery(Startup.java:239) at
org.apache.cassandra.tcm.Startup.initialize(Startup.java:122) at
org.apache.cassandra.tcm.Startup.initialize(Startup.java:97) at
org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:280) at
org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:839)
at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:993)
ERROR o.a.c.s.paxos.PaxosRequestCallback Failed to apply
Prepare(825d4ab2-596f-11f1-eb80-c8da9957f64b) locally
java.lang.IllegalStateException: Could not find range for token
-9223372036854775808 in ReplicaGroups: ReplicaGroups{} at
org.apache.cassandra.tcm.ownership.ReplicaGroups.forRange(ReplicaGroups.java:150)
at
org.apache.cassandra.tcm.ownership.ReplicaGroups.forToken(ReplicaGroups.java:155)
at
org.apache.cassandra.locator.EndpointsForToken.natural(EndpointsForToken.java:167)
at
org.apache.cassandra.service.paxos.Paxos.isInRangeAndShouldProcess(Paxos.java:1181)
at
org.apache.cassandra.service.paxos.PaxosPrepare$RequestHandler.execute(PaxosPrepare.java:1120)
at
org.apache.cassandra.service.paxos.PaxosRequestCallback.executeOnSelf(PaxosRequestCallback.java:61)
at
org.apache.cassandra.service.paxos.PaxosPrepare.lambda$start$0(PaxosPrepare.java:429)
at
org.apache.cassandra.concurrent.ExecutionFailure$1.run(ExecutionFailure.java:138)at
org.apache.cassandra.concurrent.SEPWorker.run(SEPWorker.java:156) at
io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)at
java.base/java.lang.Thread.run(Thread.java:840) {code}
h3. Expectations:
External factors (client CQL traffic during cold start) must not break
bootstrap. Cassandra should tolerate concurrent client traffic during TCM/CMS
initialisation on cold start (especially CQL hitting the native port early).
{{}}
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]