Faster startup by only scanning each directory for temporary files once

patch by Jeff Jirsa; reviewed by Joel Knighton for CASSANDRA-12114
This commit is contained in:
Jeff Jirsa 2016-07-05 23:19:12 -07:00 committed by Aleksey Yeschenko
parent 904137c384
commit 864e009b08
2 changed files with 9 additions and 2 deletions

View File

@ -1,4 +1,5 @@
3.0.9
* Faster startup by only scanning each directory for temporary files once (CASSANDRA-12114)
* Respond with v1/v2 protocol header when responding to driver that attempts
to connect with too low of a protocol version (CASSANDRA-11464)
* NullPointerExpception when reading/compacting table (CASSANDRA-11988)

View File

@ -581,6 +581,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
public static void scrubDataDirectories(CFMetaData metadata)
{
Directories directories = new Directories(metadata, initialDirectories);
Set<File> cleanedDirectories = new HashSet<>();
// clear ephemeral snapshots that were not properly cleared last session (CASSANDRA-7357)
clearEphemeralSnapshots(directories);
@ -594,10 +595,15 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
for (Map.Entry<Descriptor,Set<Component>> sstableFiles : directories.sstableLister(Directories.OnTxnErr.IGNORE).list().entrySet())
{
Descriptor desc = sstableFiles.getKey();
File directory = desc.directory;
Set<Component> components = sstableFiles.getValue();
for (File tmpFile : desc.getTemporaryFiles())
tmpFile.delete();
if (!cleanedDirectories.contains(directory))
{
cleanedDirectories.add(directory);
for (File tmpFile : desc.getTemporaryFiles())
tmpFile.delete();
}
File dataFile = new File(desc.filenameFor(Component.DATA));
if (components.contains(Component.DATA) && dataFile.length() > 0)