org.apache.cassandra.db

## Class Directories

- java.lang.Object
- - org.apache.cassandra.db.Directories

-     public class Directories
      extends java.lang.Object

  Encapsulate handling of paths to the data files. The directory layout is the following: //ks/cf1/ks-cf1-hb-1-Data.db /cf2/ks-cf2-hb-1-Data.db ... In addition, more that one 'root' data directory can be specified so that potentially represents multiple locations. Note that in the case of multiple locations, the manifest for the leveled compaction is only in one of the location. Snapshots (resp. backups) are always created along the sstables thare are snapshoted (resp. backuped) but inside a subdirectory named 'snapshots' (resp. backups) (and snapshots are furter inside a subdirectory of the name of the snapshot). This class abstracts all those details from the rest of the code.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static class` | `Directories.DataDirectory`
    `class` | `Directories.SSTableLister`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static java.lang.String` | `BACKUPS_SUBDIR`
    `static Directories.DataDirectory[]` | `dataFileLocations`
    `static java.lang.String` | `SECONDARY_INDEX_NAME_SEPARATOR`
    `static java.lang.String` | `SNAPSHOT_SUBDIR`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `clearSnapshot(java.lang.String snapshotName)`
    `static Directories` | `create(java.lang.String tablename, java.lang.String cfname)`
    `static java.io.File` | `getBackupsDirectory(Descriptor desc)`
    `java.io.File` | `getDirectoryForNewSSTables()`
    `java.io.File` | `getLocationForDisk(Directories.DataDirectory dataDirectory)` Returns SSTable location which is inside given data directory.
    `java.io.File` | `getOrCreateLeveledManifest()`
    `static java.io.File` | `getSnapshotDirectory(Descriptor desc, java.lang.String snapshotName)`
    `Directories.DataDirectory` | `getWriteableLocation()`
    `java.io.File` | `getWriteableLocationAsFile()`
    `static void` | `migrateSSTables()` Move sstables from the pre-#2749 layout to their new location/names.
    `long` | `snapshotCreationTime(java.lang.String snapshotName)`
    `boolean` | `snapshotExists(java.lang.String snapshotName)`
    `void` | `snapshotLeveledManifest(java.lang.String snapshotName)`
    `Directories.SSTableLister` | `sstableLister()`
    `static boolean` | `sstablesNeedsMigration()` To check if sstables needs migration, we look at the System directory.
    `java.io.File` | `tryGetLeveledManifest()`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### BACKUPS_SUBDIR

          public static final java.lang.String BACKUPS_SUBDIR

      See Also:
        Constant Field Values

    - #### SNAPSHOT_SUBDIR

          public static final java.lang.String SNAPSHOT_SUBDIR

      See Also:
        Constant Field Values

    - #### SECONDARY_INDEX_NAME_SEPARATOR

          public static final java.lang.String SECONDARY_INDEX_NAME_SEPARATOR

      See Also:
        Constant Field Values

    - #### dataFileLocations

          public static final Directories.DataDirectory[] dataFileLocations

  - ### Method Detail

    - #### create

          public static Directories create(java.lang.String tablename,
                           java.lang.String cfname)

    - #### getLocationForDisk

          public java.io.File getLocationForDisk(Directories.DataDirectory dataDirectory)

      Returns SSTable location which is inside given data directory.
      Parameters:
        `dataDirectory` -
      Returns:
        SSTable location

    - #### getDirectoryForNewSSTables

          public java.io.File getDirectoryForNewSSTables()

    - #### getWriteableLocationAsFile

          public java.io.File getWriteableLocationAsFile()

    - #### getWriteableLocation

          public Directories.DataDirectory getWriteableLocation()

      Returns:
        a non-blacklisted directory with the most free space and least current tasks.
      Throws:
        `java.io.IOError` - if all directories are blacklisted.

    - #### getSnapshotDirectory

          public static java.io.File getSnapshotDirectory(Descriptor desc,
                                          java.lang.String snapshotName)

    - #### getBackupsDirectory

          public static java.io.File getBackupsDirectory(Descriptor desc)

    - #### sstableLister

          public Directories.SSTableLister sstableLister()

    - #### tryGetLeveledManifest

          public java.io.File tryGetLeveledManifest()

    - #### getOrCreateLeveledManifest

          public java.io.File getOrCreateLeveledManifest()

    - #### snapshotLeveledManifest

          public void snapshotLeveledManifest(java.lang.String snapshotName)

    - #### snapshotExists

          public boolean snapshotExists(java.lang.String snapshotName)

    - #### clearSnapshot

          public void clearSnapshot(java.lang.String snapshotName)

    - #### snapshotCreationTime

          public long snapshotCreationTime(java.lang.String snapshotName)

    - #### sstablesNeedsMigration

          public static boolean sstablesNeedsMigration()

      To check if sstables needs migration, we look at the System directory. If it does not contain a directory for the schema cfs, we'll attempt a sstable migration. Note that it is mostly harmless to try a migration uselessly, except maybe for some wasted cpu cycles.

    - #### migrateSSTables

          public static void migrateSSTables()

      Move sstables from the pre-#2749 layout to their new location/names. This involves: - moving each sstable to their CF specific directory - rename the sstable to include the keyspace in the filename Note that this also move leveled manifests, snapshots and backups.

Copyright © 2014 The Apache Software Foundation