Hey everyone,

We're trying to migrate a cassandra cluster from a bunch of Windows machines to a bunch of (newer and more powerful) Linux machines.

Our initial plan was to simply bootstrap the Linux servers into the cluster one by one, and then decommission the old servers one by one. However, when we try to join a Linux server to the cluster, we get the following error:

ERROR 11:52:22,959 Fatal exception in thread Thread[Thread-21,5,main]
java.lang.AssertionError: Filename must include parent directory.
        at org.apache.cassandra.io.sstable.Descriptor.fromFilename(Descriptor.java:148)
        at org.apache.cassandra.streaming.PendingFile$PendingFileSerializer.deserialize(PendingFile.java:138)
        at org.apache.cassandra.streaming.StreamHeader$StreamHeaderSerializer.deserialize(StreamHeader.java:88)
        at org.apache.cassandra.streaming.StreamHeader$StreamHeaderSerializer.deserialize(StreamHeader.java:70)
        at org.apache.cassandra.net.IncomingTcpConnection.run(IncomingTcpConnection.java:80)

A quick googling reveals that the cause is the simple fact that Cassandra is transmitting the full path of the datafiles with the native directory separator, "\", and the Linux servers expect it to be "/", and get confused as a result.

We're running version 1.0.8. Is this fixed in a later release? Will this be fixed in a later release?

Are there any other ways of doing the migration? What happens if we join the new servers without bootstrapping and run repair? Are there any other ugly hacks or workaround we can do? We're not looking to run a mixed cluster, we just want to migrate all the data as painlessly as possible.


/Henrik