[ https://issues.apache.org/jira/browse/CASSANDRA-18934?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Benjamin Lerer updated CASSANDRA-18934: --------------------------------------- Fix Version/s: 5.0-beta (was: 5.0.x) > Downgrade to 4.1 fails due to schema changes > -------------------------------------------- > > Key: CASSANDRA-18934 > URL: https://issues.apache.org/jira/browse/CASSANDRA-18934 > Project: Cassandra > Issue Type: Bug > Components: Local/Startup and Shutdown > Reporter: David Capwell > Priority: Normal > Fix For: 5.0-beta, 5.x > > > We are required to support 5.0 downgrading to 4.1 as a migration step, but we > don’t have tests to show this is working… I wrote a quick test to make sure a > change we needed in Accord wouldn’t block the downgrade and see that we fail > right now. > {code} > ERROR 20:56:39 Exiting due to error while processing commit log during > initialization. > org.apache.cassandra.db.commitlog.CommitLogReadHandler$CommitLogReadException: > Unexpected error deserializing mutation; saved to > /var/folders/h1/s_3p1x3s3hl0hltbpck67m0h0000gn/T/mutation4184214444767150092dat. > This may be caused by replaying a mutation against a table with the same > name but incompatible schema. Exception follows: java.lang.RuntimeException: > Unknown column compaction_properties during deserialization > at > org.apache.cassandra.db.commitlog.CommitLogReader.readMutation(CommitLogReader.java:464) > at > org.apache.cassandra.db.commitlog.CommitLogReader.readSection(CommitLogReader.java:397) > at > org.apache.cassandra.db.commitlog.CommitLogReader.readCommitLogSegment(CommitLogReader.java:244) > at > org.apache.cassandra.db.commitlog.CommitLogReader.readCommitLogSegment(CommitLogReader.java:147) > at > org.apache.cassandra.db.commitlog.CommitLogReplayer.replayFiles(CommitLogReplayer.java:191) > at > org.apache.cassandra.db.commitlog.CommitLog.recoverFiles(CommitLog.java:223) > at > org.apache.cassandra.db.commitlog.CommitLog.recoverSegmentsOnDisk(CommitLog.java:204) > {code} > This was caused by a schema change in CASSANDRA-18061 > {code} > /* > * Licensed to the Apache Software Foundation (ASF) under one > * or more contributor license agreements. See the NOTICE file > * distributed with this work for additional information > * regarding copyright ownership. The ASF licenses this file > * to you under the Apache License, Version 2.0 (the > * "License"); you may not use this file except in compliance > * with the License. You may obtain a copy of the License at > * > * http://www.apache.org/licenses/LICENSE-2.0 > * > * Unless required by applicable law or agreed to in writing, software > * distributed under the License is distributed on an "AS IS" BASIS, > * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. > * See the License for the specific language governing permissions and > * limitations under the License. > */ > package org.apache.cassandra.distributed.upgrade; > import java.io.IOException; > import java.io.File; > import java.util.concurrent.atomic.AtomicBoolean; > import org.junit.Test; > import org.apache.cassandra.distributed.api.IUpgradeableInstance; > public class DowngradeTest extends UpgradeTestBase > { > @Test > public void test() throws Throwable > { > AtomicBoolean first = new AtomicBoolean(true); > new TestCase() > .nodes(1) > .withConfig(c -> { > if (first.compareAndSet(true, false)) > c.set("storage_compatibility_mode", "CASSANDRA_4"); > }) > .downgradeTo(v41) > .setup(cluster -> {}) > // Uncomment if you want to test what happens after reading the commit log, > which fails right now > // .runBeforeNodeRestart((cluster, nodeId) -> { > // IUpgradeableInstance inst = cluster.get(nodeId); > // File f = new File((String) > inst.config().get("commitlog_directory")); > // deleteRecursive(f); > // }) > .runAfterClusterUpgrade(cluster -> {}) > .run(); > } > private void deleteRecursive(File f) > { > if (f.isDirectory()) > { > File[] children = f.listFiles(); > if (children != null) > { > for (File c : children) > deleteRecursive(c); > } > } > f.delete(); > } > } > {code} > {code} > diff --git > a/test/distributed/org/apache/cassandra/distributed/upgrade/UpgradeTestBase.java > > b/test/distributed/org/apache/cassandra/distributed/upgrade/UpgradeTestBase.java > index 5ee8780204..b4111e3b44 100644 > --- > a/test/distributed/org/apache/cassandra/distributed/upgrade/UpgradeTestBase.java > +++ > b/test/distributed/org/apache/cassandra/distributed/upgrade/UpgradeTestBase.java > @@ -226,6 +226,12 @@ public class UpgradeTestBase extends DistributedTestBase > return this; > } > + public TestCase downgradeTo(Semver to) > + { > + upgrade.add(new TestVersions(versions.getLatest(CURRENT), > Collections.singletonList(versions.getLatest(to)))); > + return this; > + } > + > /** > * performs all supported upgrade paths that exist in between from > and to that include the current version. > * This call is equivalent to calling {@code upgradesTo(from, > CURRENT).upgradesFrom(CURRENT, to)}. > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org