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]

Reply via email to