[ https://issues.apache.org/jira/browse/CASSANDRA-17955?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17622512#comment-17622512 ]
Cameron Zemek commented on CASSANDRA-17955: ------------------------------------------- So clearSnapshotExecutor was added as part of CASSANDRA-17168 . Instead of adding more tasks to this executor why not pass it back to ANTI_ENTROPY stage. Snapshotting messages already take place through this stage, and I think its cleaner and makes more sense to clear the snapshot there. Note this stage already is only 1 thread so concerns about single threaded snapshots has always been the case. As [~brandon.williams] mentioned its mostly just hard linking (other then it having to block for a flush). The argument for having more threads could be made but I think that is seperate to getting clearing and creating snapshots happening in the same thread pool. > Race condition on repair snapshots > ---------------------------------- > > Key: CASSANDRA-17955 > URL: https://issues.apache.org/jira/browse/CASSANDRA-17955 > Project: Cassandra > Issue Type: Bug > Components: Consistency/Repair, Local/Snapshots > Reporter: Cameron Zemek > Assignee: Stefan Miklosovic > Priority: Normal > Labels: 4.0 > Fix For: 4.0.x, 4.1-rc, 4.x > > Attachments: signature.asc > > Time Spent: 50m > Remaining Estimate: 0h > > If an endpoint is convicted and that endpoint is a coordinator then > ActiveRepairService::removeParentRepairSession is called. > The issue is that this occurs on clearSnapshotExecutor and can happen while > RepairMessageVerbHandler is in process of taking a snapshot. So then you get > a race condition and clearSnapshot will throw a > java.nio.file.DirectoryNotEmptyException > > {code:java} > public static void deleteRecursiveWithThrottle(File dir, RateLimiter > rateLimiter) > { > if (dir.isDirectory()) > { > String[] children = dir.list(); > for (String child : children) > deleteRecursiveWithThrottle(new File(dir, child), rateLimiter); > } > // The directory is now empty so now it can be smoked > deleteWithConfirmWithThrottle(dir, rateLimiter); > } {code} > Due to the directory not being empty when it goes to remove the directory at > the end. -- This message was sent by Atlassian Jira (v8.20.10#820010) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org