Same is true if started from 1.2.9 version to 2.0.x
Seems like Cassandra-5383 is the related issue.

The code in the function mutateLevel  (from 1.2.5 to 1.2.9 and later ) is 
indirectly using the java file::renameTo function. And that will not work on 
Windows if the file already exists. Don't know about Linux, but even the java 
function description is already telling that the behavior of the function can 
be machine dependent. So even on linux based systems, and even if that 
functions returns with success, still does not confirm that actually the old 
file name/content was removed and the new file name/content is used as 
replacement.


From: Marcus Eriksson [mailto:krum...@gmail.com]
Sent: woensdag 25 september 2013 10:02
To: user@cassandra.apache.org
Subject: Re: Migration LCS from 1.2.X to 2.0.x exception

this is the issue:
https://issues.apache.org/jira/browse/CASSANDRA-5383

guess it fell between chairs, will poke around

On Tue, Sep 24, 2013 at 4:26 PM, Nate McCall 
<n...@thelastpickle.com<mailto:n...@thelastpickle.com>> wrote:
What version of 1.2.x?

Unfortunately, you must go through 1.2.9 first. See 
https://github.com/apache/cassandra/blob/cassandra-2.0.0/NEWS.txt#L19-L24

On Tue, Sep 24, 2013 at 8:57 AM, Desimpel, Ignace 
<ignace.desim...@nuance.com<mailto:ignace.desim...@nuance.com>> wrote:
Tested on WINDOWS : On startup of the 2.0.0 version from 1.2.x files I get an 
error as listed below.

This is due to the code in LeveledManifest:: mutateLevel. The method already 
has a comment saying that it is scary ...
On windows, one cannot use the File::rename if the target file name already 
exists.
Also, even on Linux, I'm not sure if a rename would actually 
'overwrite/implicit-delete' the content of the target file.

Anyway, adding code (below) before the FileUtils.renameWithConfirm should work 
in both cases (maybe even rename the fromFile to be able to recover...)
File oTo = new File(filename);
                if ( oTo.exists() ) oTo.delete();


java.lang.RuntimeException: Failed to rename 
.....xxx\Function-ic-10-Statistics.db-tmp to 
.....xxx\Function-ic-10-Statistics.db
                at 
org.apache.cassandra.io.util.FileUtils.renameWithConfirm(FileUtils.java:136) 
~[main/:na]
                at 
org.apache.cassandra.io.util.FileUtils.renameWithConfirm(FileUtils.java:125) 
~[main/:na]
                at 
org.apache.cassandra.db.compaction.LeveledManifest.mutateLevel(LeveledManifest.java:601)
 ~[main/:na]
                at 
org.apache.cassandra.db.compaction.LegacyLeveledManifest.migrateManifests(LegacyLeveledManifest.java:103)
 ~[main/:na]
                at 
org.apache.cassandra.service.CassandraDaemon.setup(CassandraDaemon.java:247) 
~[main/:na]
                at 
org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:443) 
~[main/:na]

Regards,

Ignace Desimpel


Reply via email to