Package org.apache.hadoop.hbase.snapshot
Class SnapshotDescriptionUtils
java.lang.Object
org.apache.hadoop.hbase.snapshot.SnapshotDescriptionUtils
Utility class to help manage
SnapshotDesriptions.
Snapshots are laid out on disk like this:
/hbase/.snapshots
/.tmp <---- working directory
/[snapshot name] <----- completed snapshot
A completed snapshot named 'completed' then looks like (multiple regions, servers, files, etc.
signified by '...' on the same directory depth).
/hbase/.snapshots/completed
.snapshotinfo <--- Description of the snapshot
.tableinfo <--- Copy of the tableinfo
/.logs
/[server_name]
/... [log files]
...
/[region name] <---- All the region's information
.regioninfo <---- Copy of the HRegionInfo
/[column family name]
/[hfile name] <--- name of the hfile in the real region
...
...
...
Utility methods in this class are useful for getting the correct locations for different parts of
the snapshot, as well as moving completed snapshots into place (see completeSnapshot(org.apache.hadoop.fs.Path, org.apache.hadoop.fs.Path, org.apache.hadoop.fs.FileSystem, org.apache.hadoop.fs.FileSystem, org.apache.hadoop.conf.Configuration),
and writing the SnapshotProtos.SnapshotDescription to the working snapshot directory.-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classFilter that only accepts completed snapshot directories -
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final longBy default, wait 300 seconds for a snapshot to completeprivate static final org.slf4j.Loggerstatic final Stringstatic final longDefault value if no start time is specifiedprivate static final longstatic final Stringstatic final intVersion of the fs layout for a snapshot.static final StringTemporary directory under the snapshot directory to store in-progress snapshotsstatic final StringThe configuration property that determines the filepath of the snapshot base working directorystatic final StringThe file contains the snapshot basic information and it is under the directory of a snapshot. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic voidcompleteSnapshot(org.apache.hadoop.fs.Path snapshotDir, org.apache.hadoop.fs.Path workingDir, org.apache.hadoop.fs.FileSystem fs, org.apache.hadoop.fs.FileSystem workingDirFs, org.apache.hadoop.conf.Configuration conf) Commits the snapshot process by moving the working snapshot to the finalized filepathstatic org.apache.hadoop.fs.PathgetCompletedSnapshotDir(String snapshotName, org.apache.hadoop.fs.Path rootDir) Get the directory for a completed snapshot.static org.apache.hadoop.fs.PathgetCompletedSnapshotDir(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription snapshot, org.apache.hadoop.fs.Path rootDir) Get the directory for a specified snapshot.static org.apache.hadoop.fs.PathgetCorruptedFlagFileForSnapshot(org.apache.hadoop.fs.Path workingDir) Get the flag file path if the snapshot is corruptedprivate static org.apache.hadoop.fs.PathgetDefaultWorkingSnapshotDir(org.apache.hadoop.fs.Path rootDir) Get the default working directory for snapshots - where they are built, where they are temporarily copied on export, etc.static longgetMaxMasterTimeout(org.apache.hadoop.conf.Configuration conf, org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription.Type type, long defaultMaxWaitTime) static org.apache.hadoop.fs.PathgetSnapshotRootDir(org.apache.hadoop.fs.Path rootDir) Get the snapshot root directory.static final org.apache.hadoop.fs.PathgetSnapshotsDir(org.apache.hadoop.fs.Path rootDir) private static final org.apache.hadoop.fs.PathgetSpecifiedSnapshotDir(org.apache.hadoop.fs.Path snapshotsDir, String snapshotName) Get the directory within the given filepath to store the snapshot instancestatic org.apache.hadoop.fs.PathgetWorkingSnapshotDir(String snapshotName, org.apache.hadoop.fs.Path rootDir, org.apache.hadoop.conf.Configuration conf) Get the directory to build a snapshot, before it is finalizedstatic org.apache.hadoop.fs.PathgetWorkingSnapshotDir(org.apache.hadoop.fs.Path rootDir, org.apache.hadoop.conf.Configuration conf) Get the general working directory for snapshots - where they are built, where they are temporarily copied on export, etc.static org.apache.hadoop.fs.PathgetWorkingSnapshotDir(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription snapshot, org.apache.hadoop.fs.Path rootDir, org.apache.hadoop.conf.Configuration conf) Get the directory to build a snapshot, before it is finalizedstatic booleanisExpiredSnapshot(long snapshotTtl, long snapshotCreatedTime, long currentTime) Method to check whether TTL has expired for specified snapshot creation time and snapshot ttl.static booleanisSecurityAvailable(org.apache.hadoop.conf.Configuration conf) static booleanisSnapshotOwner(SnapshotDescription snapshot, User user) Check if the user is this table snapshot's ownerstatic booleanisSubDirectoryOf(org.apache.hadoop.fs.Path workingDir, org.apache.hadoop.fs.Path rootDir) Determines if the given workingDir is a subdirectory of the given "root directory"static booleanisWithinDefaultWorkingDir(org.apache.hadoop.fs.Path workingDir, org.apache.hadoop.conf.Configuration conf) Determines if the given workingDir is a subdirectory of the default working snapshot directorystatic org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescriptionreadSnapshotInfo(org.apache.hadoop.fs.FileSystem fs, org.apache.hadoop.fs.Path snapshotDir) Read in theSnapshotProtos.SnapshotDescriptionstored for the snapshot in the passed directory(package private) static booleanshouldSkipRenameSnapshotDirectories(URI workingURI, URI rootURI) static org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescriptionvalidate(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription snapshot, org.apache.hadoop.conf.Configuration conf) Convert the passed snapshot description into a 'full' snapshot description based on default parameters, if none have been supplied.private static org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescriptionwriteAclToSnapshotDescription(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription snapshot, org.apache.hadoop.conf.Configuration conf) static voidwriteSnapshotInfo(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription snapshot, org.apache.hadoop.fs.Path workingDir, org.apache.hadoop.fs.FileSystem fs) Write the snapshot description into the working directory of a snapshot
-
Field Details
-
LOG
-
SNAPSHOT_LAYOUT_VERSION
Version of the fs layout for a snapshot. Future snapshots may have different file layouts, which we may need to read in differently.- See Also:
-
SNAPSHOTINFO_FILE
The file contains the snapshot basic information and it is under the directory of a snapshot.- See Also:
-
SNAPSHOT_TMP_DIR_NAME
Temporary directory under the snapshot directory to store in-progress snapshots- See Also:
-
SNAPSHOT_WORKING_DIR
The configuration property that determines the filepath of the snapshot base working directory- See Also:
-
NO_SNAPSHOT_START_TIME_SPECIFIED
Default value if no start time is specified- See Also:
-
NO_SNAPSHOT_TTL_SPECIFIED
- See Also:
-
MASTER_SNAPSHOT_TIMEOUT_MILLIS
- See Also:
-
DEFAULT_MAX_WAIT_TIME
By default, wait 300 seconds for a snapshot to complete- See Also:
-
SNAPSHOT_CORRUPTED_FILE
- See Also:
-
-
Constructor Details
-
SnapshotDescriptionUtils
private SnapshotDescriptionUtils()
-
-
Method Details
-
getMaxMasterTimeout
public static long getMaxMasterTimeout(org.apache.hadoop.conf.Configuration conf, org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription.Type type, long defaultMaxWaitTime) - Parameters:
conf-Configurationfrom which to check for the timeouttype- type of snapshot being takendefaultMaxWaitTime- Default amount of time to wait, if none is in the configuration- Returns:
- the max amount of time the master should wait for a snapshot to complete
-
getSnapshotRootDir
Get the snapshot root directory. All the snapshots are kept under this directory, i.e. ${hbase.rootdir}/.snapshot- Parameters:
rootDir- hbase root directory- Returns:
- the base directory in which all snapshots are kept
-
getCompletedSnapshotDir
public static org.apache.hadoop.fs.Path getCompletedSnapshotDir(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription snapshot, org.apache.hadoop.fs.Path rootDir) Get the directory for a specified snapshot. This directory is a sub-directory of snapshot root directory and all the data files for a snapshot are kept under this directory.- Parameters:
snapshot- snapshot being takenrootDir- hbase root directory- Returns:
- the final directory for the completed snapshot
-
getCompletedSnapshotDir
public static org.apache.hadoop.fs.Path getCompletedSnapshotDir(String snapshotName, org.apache.hadoop.fs.Path rootDir) Get the directory for a completed snapshot. This directory is a sub-directory of snapshot root directory and all the data files for a snapshot are kept under this directory.- Parameters:
snapshotName- name of the snapshot being takenrootDir- hbase root directory- Returns:
- the final directory for the completed snapshot
-
getWorkingSnapshotDir
public static org.apache.hadoop.fs.Path getWorkingSnapshotDir(org.apache.hadoop.fs.Path rootDir, org.apache.hadoop.conf.Configuration conf) Get the general working directory for snapshots - where they are built, where they are temporarily copied on export, etc.- Parameters:
rootDir- root directory of the HBase installationconf- Configuration of the HBase instance- Returns:
- Path to the snapshot tmp directory, relative to the passed root directory
-
getWorkingSnapshotDir
public static org.apache.hadoop.fs.Path getWorkingSnapshotDir(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription snapshot, org.apache.hadoop.fs.Path rootDir, org.apache.hadoop.conf.Configuration conf) Get the directory to build a snapshot, before it is finalized- Parameters:
snapshot- snapshot that will be builtrootDir- root directory of the hbase installationconf- Configuration of the HBase instance- Returns:
Pathwhere one can build a snapshot
-
getWorkingSnapshotDir
public static org.apache.hadoop.fs.Path getWorkingSnapshotDir(String snapshotName, org.apache.hadoop.fs.Path rootDir, org.apache.hadoop.conf.Configuration conf) Get the directory to build a snapshot, before it is finalized- Parameters:
snapshotName- name of the snapshotrootDir- root directory of the hbase installationconf- Configuration of the HBase instance- Returns:
Pathwhere one can build a snapshot
-
getCorruptedFlagFileForSnapshot
public static org.apache.hadoop.fs.Path getCorruptedFlagFileForSnapshot(org.apache.hadoop.fs.Path workingDir) Get the flag file path if the snapshot is corrupted- Parameters:
workingDir- the directory where we build the specific snapshot- Returns:
Pathsnapshot corrupted flag file path
-
getSpecifiedSnapshotDir
private static final org.apache.hadoop.fs.Path getSpecifiedSnapshotDir(org.apache.hadoop.fs.Path snapshotsDir, String snapshotName) Get the directory within the given filepath to store the snapshot instance- Parameters:
snapshotsDir- directory to store snapshot directory withinsnapshotName- name of the snapshot to take- Returns:
- the final directory for the snapshot in the given filepath
-
getSnapshotsDir
- Parameters:
rootDir- hbase root directory- Returns:
- the directory for all completed snapshots;
-
isSubDirectoryOf
public static boolean isSubDirectoryOf(org.apache.hadoop.fs.Path workingDir, org.apache.hadoop.fs.Path rootDir) Determines if the given workingDir is a subdirectory of the given "root directory"- Parameters:
workingDir- a directory to checkrootDir- root directory of the HBase installation- Returns:
- true if the given workingDir is a subdirectory of the given root directory, false otherwise
-
isWithinDefaultWorkingDir
public static boolean isWithinDefaultWorkingDir(org.apache.hadoop.fs.Path workingDir, org.apache.hadoop.conf.Configuration conf) throws IOException Determines if the given workingDir is a subdirectory of the default working snapshot directory- Parameters:
workingDir- a directory to checkconf- configuration for the HBase cluster- Returns:
- true if the given workingDir is a subdirectory of the default working directory for snapshots, false otherwise
- Throws:
IOException- if we can't get the root dir
-
getDefaultWorkingSnapshotDir
private static org.apache.hadoop.fs.Path getDefaultWorkingSnapshotDir(org.apache.hadoop.fs.Path rootDir) Get the default working directory for snapshots - where they are built, where they are temporarily copied on export, etc.- Parameters:
rootDir- root directory of the HBase installation- Returns:
- Path to the default snapshot tmp directory, relative to the passed root directory
-
validate
public static org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription validate(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription snapshot, org.apache.hadoop.conf.Configuration conf) throws IllegalArgumentException, IOException Convert the passed snapshot description into a 'full' snapshot description based on default parameters, if none have been supplied. This resolves any 'optional' parameters that aren't supplied to their default values.- Parameters:
snapshot- general snapshot descriptorconf- Configuration to read configured snapshot defaults if snapshot is not complete- Returns:
- a valid snapshot description
- Throws:
IllegalArgumentException- if theSnapshotProtos.SnapshotDescriptionis not a completeSnapshotProtos.SnapshotDescription.IOException
-
writeSnapshotInfo
public static void writeSnapshotInfo(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription snapshot, org.apache.hadoop.fs.Path workingDir, org.apache.hadoop.fs.FileSystem fs) throws IOException Write the snapshot description into the working directory of a snapshot- Parameters:
snapshot- description of the snapshot being takenworkingDir- working directory of the snapshotfs-FileSystemon which the snapshot should be taken- Throws:
IOException- if we can't reach the filesystem and the file cannot be cleaned up on failure
-
readSnapshotInfo
public static org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription readSnapshotInfo(org.apache.hadoop.fs.FileSystem fs, org.apache.hadoop.fs.Path snapshotDir) throws CorruptedSnapshotException Read in theSnapshotProtos.SnapshotDescriptionstored for the snapshot in the passed directory- Parameters:
fs- filesystem where the snapshot was takensnapshotDir- directory where the snapshot was stored- Returns:
- the stored snapshot description
- Throws:
CorruptedSnapshotException- if the snapshot cannot be read
-
completeSnapshot
public static void completeSnapshot(org.apache.hadoop.fs.Path snapshotDir, org.apache.hadoop.fs.Path workingDir, org.apache.hadoop.fs.FileSystem fs, org.apache.hadoop.fs.FileSystem workingDirFs, org.apache.hadoop.conf.Configuration conf) throws SnapshotCreationException, IOException Commits the snapshot process by moving the working snapshot to the finalized filepath- Parameters:
snapshotDir- The file path of the completed snapshotsworkingDir- The file path of the in progress snapshotsfs- The file system of the completed snapshotsworkingDirFs- The file system of the in progress snapshotsconf- Configuration- Throws:
SnapshotCreationException- if the snapshot could not be movedIOException- the filesystem could not be reached
-
shouldSkipRenameSnapshotDirectories
-
isSnapshotOwner
Check if the user is this table snapshot's owner- Parameters:
snapshot- the table snapshot descriptionuser- the user- Returns:
- true if the user is the owner of the snapshot, false otherwise or the snapshot owner field is not present.
-
isSecurityAvailable
public static boolean isSecurityAvailable(org.apache.hadoop.conf.Configuration conf) throws IOException - Throws:
IOException
-
writeAclToSnapshotDescription
private static org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription writeAclToSnapshotDescription(org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription snapshot, org.apache.hadoop.conf.Configuration conf) throws IOException - Throws:
IOException
-
isExpiredSnapshot
public static boolean isExpiredSnapshot(long snapshotTtl, long snapshotCreatedTime, long currentTime) Method to check whether TTL has expired for specified snapshot creation time and snapshot ttl. NOTE: For backward compatibility (after the patch deployment on HMaster), any snapshot with ttl 0 is to be considered as snapshot to keep FOREVER. Default ttl value specified byHConstants.DEFAULT_SNAPSHOT_TTL- Returns:
- true if ttl has expired, or, false, otherwise
-