[
https://issues.apache.org/jira/browse/CASSANDRA-8535?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14277358#comment-14277358
]
Joshua McKenzie commented on CASSANDRA-8535:
--------------------------------------------
Looks like the problem is in the logic for SSTableRewriter on Windows. During
finishAndMaybeThrow, we switchWriter(...) which closes our SSTableWriter (ifile
and dfile) and opens a reader to the file. Shortly after, we attempt to close
the SSTableWriter again, this time with the finishType to attempt a rename.
Problem is, we now have an SSTR with that ifile and dfile open on tmpfiles so
the rename fails.
This doesn't happen on trunk as we're using FileChannels and nio in
RandomAccessReader instead of RandomAccessFile, meaning we can safely rename
files with open handles. I'll see if I can't get a Windows-specific workaround
for SSTableRewriter in for this ticket for 2.1; isolating the fix to windows
means I'm comfortable with it being on the 2.1 branch and we'll need it on 3.0
for mmap support anyway.
> java.lang.RuntimeException: Failed to rename XXX to YYY
> -------------------------------------------------------
>
> Key: CASSANDRA-8535
> URL: https://issues.apache.org/jira/browse/CASSANDRA-8535
> Project: Cassandra
> Issue Type: Bug
> Environment: Windows 2008 X64
> Reporter: Leonid Shalupov
> Assignee: Joshua McKenzie
> Fix For: 2.1.3
>
>
> {code}
> java.lang.RuntimeException: Failed to rename
> build\test\cassandra\data;0\system\schema_keyspaces-b0f2235744583cdb9631c43e59ce3676\system-schema_keyspaces-tmp-ka-5-Index.db
> to
> build\test\cassandra\data;0\system\schema_keyspaces-b0f2235744583cdb9631c43e59ce3676\system-schema_keyspaces-ka-5-Index.db
> at
> org.apache.cassandra.io.util.FileUtils.renameWithConfirm(FileUtils.java:170)
> ~[main/:na]
> at
> org.apache.cassandra.io.util.FileUtils.renameWithConfirm(FileUtils.java:154)
> ~[main/:na]
> at
> org.apache.cassandra.io.sstable.SSTableWriter.rename(SSTableWriter.java:569)
> ~[main/:na]
> at
> org.apache.cassandra.io.sstable.SSTableWriter.rename(SSTableWriter.java:561)
> ~[main/:na]
> at
> org.apache.cassandra.io.sstable.SSTableWriter.close(SSTableWriter.java:535)
> ~[main/:na]
> at
> org.apache.cassandra.io.sstable.SSTableWriter.finish(SSTableWriter.java:470)
> ~[main/:na]
> at
> org.apache.cassandra.io.sstable.SSTableRewriter.finishAndMaybeThrow(SSTableRewriter.java:349)
> ~[main/:na]
> at
> org.apache.cassandra.io.sstable.SSTableRewriter.finish(SSTableRewriter.java:324)
> ~[main/:na]
> at
> org.apache.cassandra.io.sstable.SSTableRewriter.finish(SSTableRewriter.java:304)
> ~[main/:na]
> at
> org.apache.cassandra.db.compaction.CompactionTask.runMayThrow(CompactionTask.java:200)
> ~[main/:na]
> at
> org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28)
> ~[main/:na]
> at
> org.apache.cassandra.db.compaction.CompactionTask.executeInternal(CompactionTask.java:75)
> ~[main/:na]
> at
> org.apache.cassandra.db.compaction.AbstractCompactionTask.execute(AbstractCompactionTask.java:59)
> ~[main/:na]
> at
> org.apache.cassandra.db.compaction.CompactionManager$BackgroundCompactionTask.run(CompactionManager.java:226)
> ~[main/:na]
> at
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
> ~[na:1.7.0_45]
> at java.util.concurrent.FutureTask.run(FutureTask.java:262)
> ~[na:1.7.0_45]
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
> ~[na:1.7.0_45]
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
> [na:1.7.0_45]
> at java.lang.Thread.run(Thread.java:744) [na:1.7.0_45]
> Caused by: java.nio.file.FileSystemException:
> build\test\cassandra\data;0\system\schema_keyspaces-b0f2235744583cdb9631c43e59ce3676\system-schema_keyspaces-tmp-ka-5-Index.db
> ->
> build\test\cassandra\data;0\system\schema_keyspaces-b0f2235744583cdb9631c43e59ce3676\system-schema_keyspaces-ka-5-Index.db:
> The process cannot access the file because it is being used by another
> process.
> at
> sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86)
> ~[na:1.7.0_45]
> at
> sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
> ~[na:1.7.0_45]
> at sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:301)
> ~[na:1.7.0_45]
> at
> sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287)
> ~[na:1.7.0_45]
> at java.nio.file.Files.move(Files.java:1345) ~[na:1.7.0_45]
> at
> org.apache.cassandra.io.util.FileUtils.atomicMoveWithFallback(FileUtils.java:184)
> ~[main/:na]
> at
> org.apache.cassandra.io.util.FileUtils.renameWithConfirm(FileUtils.java:166)
> ~[main/:na]
> ... 18 common frames omitted
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)