David Capwell created CASSANDRA-18934:
-----------------------------------------

             Summary: 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


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 -> {})
        .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}



--
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