You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "ConfX (Jira)" <ji...@apache.org> on 2024/07/01 20:05:00 UTC
[jira] [Commented] (CASSANDRA-19735) Cannot correctly create keyspace statement with replication during schemaChange
[ https://issues.apache.org/jira/browse/CASSANDRA-19735?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17861260#comment-17861260 ]
ConfX commented on CASSANDRA-19735:
-----------------------------------
Thanks for the reply [~smiklosovic].
I didn't reproduce this outside the dtest environment, but at least in the dtest environment, for upgrade tests and normal distributed tests, the behavior should be consistent.
In the upgrade testing framework, the apply() function that is used to change schema is called twice and causes the failure.
> Cannot correctly create keyspace statement with replication during schemaChange
> -------------------------------------------------------------------------------
>
> Key: CASSANDRA-19735
> URL: https://issues.apache.org/jira/browse/CASSANDRA-19735
> Project: Cassandra
> Issue Type: Bug
> Components: Cluster/Schema
> Reporter: ConfX
> Priority: Normal
> Fix For: 4.1.x, 5.0.x, 5.x
>
>
> h3. What happened
> A specific schema change for creating keyspace with replications failed during Cassandra upgrade testing, but can pass under Cassandra distributed testing (non-upgrade).
> h3. How to reproduce:
> Put the following test under {{{}cassandra/test/distributed/org/apache/cassandra/distributed/upgrade/{}}}, and build dtest jars for any versions within [4.1.3, 5.0-alpha2].
> {code:java}
> package org.apache.cassandra.distributed.upgrade;
> public class demoUpgradeTest extends UpgradeTestBase
> @Test
> public void demoTest() throws Throwable {
> new TestCase()
> .nodes(1)
> .nodesToUpgrade(1)
> .withConfig(config -> config.with(NETWORK, GOSSIP, NATIVE_PROTOCOL))
> .upgradesToCurrentFrom(v41)
> .setup((cluster) -> {
> cluster.schemaChange(withKeyspace("CREATE KEYSPACE %s WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 2}"));
> }).runAfterNodeUpgrade((cluster, node) -> {
> // let's do nothing here.
> }).run();
> }
> } {code}
> Run the test with
> {code:java}
> $ ant test-jvm-dtest-some-Duse.jdk11=true -Dtest.name=org.apache.cassandra.distributed.upgrade.demoUpgradeTest {code}
> You will see the following failure:
> {code:java}
> [junit-timeout] Testcase: demoTest(org.apache.cassandra.distributed.upgrade.demoUpgradeTest)-_jdk11: Caused an ERROR
> [junit-timeout] Cannot add existing keyspace "distributed_test_keyspace"
> [junit-timeout] org.apache.cassandra.exceptions.AlreadyExistsException: Cannot add existing keyspace "distributed_test_keyspace"
> [junit-timeout] at org.apache.cassandra.cql3.statements.schema.CreateKeyspaceStatement.apply(CreateKeyspaceStatement.java:78)
> [junit-timeout] at org.apache.cassandra.schema.DefaultSchemaUpdateHandler.apply(DefaultSchemaUpdateHandler.java:230)
> [junit-timeout] at org.apache.cassandra.schema.Schema.transform(Schema.java:597)
> [junit-timeout] at org.apache.cassandra.cql3.statements.schema.AlterSchemaStatement.execute(AlterSchemaStatement.java:114)
> [junit-timeout] at org.apache.cassandra.cql3.statements.schema.AlterSchemaStatement.execute(AlterSchemaStatement.java:60)
> [junit-timeout] at org.apache.cassandra.distributed.impl.Coordinator.unsafeExecuteInternal(Coordinator.java:122)
> [junit-timeout] at org.apache.cassandra.distributed.impl.Coordinator.unsafeExecuteInternal(Coordinator.java:103)
> [junit-timeout] at org.apache.cassandra.distributed.impl.Coordinator.lambda$executeWithResult$0(Coordinator.java:66)
> [junit-timeout] at org.apache.cassandra.concurrent.FutureTask.call(FutureTask.java:61)
> [junit-timeout] at org.apache.cassandra.concurrent.FutureTask.run(FutureTask.java:71)
> [junit-timeout] at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
> [junit-timeout] at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
> [junit-timeout] at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
> [junit-timeout] at java.base/java.lang.Thread.run(Thread.java:829) {code}
> I have tested version pairs 4.1.3_4.1.4, 4.1.4_4.1.5, 4.1.5_5.0-alpha1, and 5.0-alpha1_5.0-alpha2. All of them have the same issue.
> I wrote a very similar test with Cassandra distributed test framework (non-upgrade test) as below:
> {code:java}
> package org.apache.cassandra.distributed.test.streaming;public class LCSStreamingKeepLevelTest extends TestBaseImpl
> {
> @Test
> public void demoTest() throws IOException
> {
> try (Cluster cluster = builder().withNodes(1)
> .withConfig(config -> config.with(NETWORK, GOSSIP, NATIVE_PROTOCOL))
> .start())
> {
> cluster.schemaChange(withKeyspace("CREATE KEYSPACE %s WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 2}"));
> }
> }
> } {code}
> This distributed test would pass successfully without any issues.
>
> The expected behavior should be that the upgrade test above can also perform cluster.schemaChange() successfully.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org