Buffalo
Buffalo

Reputation: 4052

Upgrading Cassandra 1.2.9 to 2.0.x

I'm trying to upgrade a single-node Cassandra cluster from 1.1.5 to 2.0.x.

My production server is running on Linux. I pulled the data folder to my Windows box, keeping the system keyspace, along with a particular one I'm interested in, and dropping the rest after getting Cassandra up.

I upgraded and tested:

Ran:

Everything looks good with 1.x versions.

When trying to upgrade to 2.0.7, I run into an issue (I saw the recommended upgrade path is 1.2.9 -> 2.0.7):

INFO 16:43:01,758 Opening C:\path\mykeyspace-mytable-ic-655 (97902117 bytes)
ERROR 16:43:12,443 Exception encountered during startup
java.lang.RuntimeException: Incompatible SSTable found.  Current version jb is unable to read file: C:\path\mykeyspace\mytable\mykeyspace-mytable.mytable_location_idx-he-647.  Please run upgradesstables.
        at org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:409)
        at org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:391)
        at org.apache.cassandra.db.index.AbstractSimplePerColumnSecondaryIndex.init(AbstractSimplePerColumnSecondaryIndex.java:52)
        at org.apache.cassandra.db.index.SecondaryIndexManager.addIndexedColumn(SecondaryIndexManager.java:292)
        at org.apache.cassandra.db.ColumnFamilyStore.<init>(ColumnFamilyStore.java:277)
        at org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:415)
        at org.apache.cassandra.db.ColumnFamilyStore.createColumnFamilyStore(ColumnFamilyStore.java:386)
        at org.apache.cassandra.db.Keyspace.initCf(Keyspace.java:309)
        at org.apache.cassandra.db.Keyspace.<init>(Keyspace.java:266)
        at org.apache.cassandra.db.Keyspace.open(Keyspace.java:110)
        at org.apache.cassandra.db.Keyspace.open(Keyspace.java:88)
        at org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:290)
        at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:480)
        at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:569)

I did run upgradesstables from 1.2.9/bin, after starting 1.2.9/bin/cassandra. Any idea what's wrong?

Upvotes: 1

Views: 699

Answers (2)

Buffalo
Buffalo

Reputation: 4052

The problem lied in the fact that I had only partially migrated my production cluster to my local environment. I had copied the entire system keyspace files and only some of the data files for just one of my keyspaces.

I fixed the problem by redoing everything:

  • set up 1.1.5 locally
  • used cqlsh to connect to it, dropped all other keyspaces and tables I didn't have available locally
  • migrated (not sure which ones did the trick, assume I did them all): 1.1.5 -> 1.2.0 -> 1.2.8 -> 1.2.9 -> 2.0.0 -> 2.0.1 -> 2.0.7.
  • possibly deleted any mismatching index files Cassandra was complaining about when starting up (not sure if I encountered any when doing the last magically working upgrades, but this let me advance through versions during previous attempts). My guess is Cassandra looks at all of them, but upgradesstables occasionally leaves some behind.

Upvotes: 1

Chris Lohfink
Chris Lohfink

Reputation: 16420

mytable_location_idx-he-647 is a 1.1.5 sstable (he is the version, h is 1.1 and e is the 5th version of h). Run upgradesstables again and verify all the sstables get migrated. the version of the sstable should start with an i for 1.2, and you want it to be at ic before upgrading to 2.0.

Upvotes: 3

Related Questions