Class MasterSnapshotVerifier
This is a light-weight verification mechanism for all the files in a snapshot. It doesn't attempt to verify that the files are exact copies (that would be paramount to taking the snapshot again!), but instead just attempts to ensure that the files match the expected files and are the same length.
Taking an online snapshots can race against other operations and this is an last line of defense. For example, if meta changes between when snapshots are taken not all regions of a table may be present. This can be caused by a region split (daughters present on this scan, but snapshot took parent), or move (snapshots only checks lists of region servers, a move could have caused a region to be skipped or done twice).
Current snapshot files checked:
- SnapshotDescription is readable
- Table info is readable
- Regions
- Matching regions in the snapshot as currently in the table
RegionInfo
matches the current and stored regions- All referenced hfiles have valid names
- All the hfiles are present (either in .archive directory in the region)
- All recovered.edits files are present (by name) and have the correct file size
-
Field Summary
Modifier and TypeFieldDescriptionprivate static final org.slf4j.Logger
private MasterServices
private org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription
private TableName
private org.apache.hadoop.fs.FileSystem
-
Constructor Summary
ConstructorDescriptionMasterSnapshotVerifier
(MasterServices services, org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription snapshot, org.apache.hadoop.fs.FileSystem workingDirFs) -
Method Summary
Modifier and TypeMethodDescriptionprivate void
verifyRegionInfo
(RegionInfo region, org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest manifest) Verify that the regionInfo is validprivate void
verifyRegions
(SnapshotManifest manifest, boolean verifyRegions) Check that all the regions in the snapshot are valid, and accounted for.void
verifySnapshot
(org.apache.hadoop.fs.Path snapshotDir, boolean verifyRegions) Verify that the snapshot in the directory is a valid snapshotprivate void
verifySnapshotDescription
(org.apache.hadoop.fs.Path snapshotDir) Check that the snapshot description written in the filesystem matches the current snapshotprivate void
verifyTableInfo
(SnapshotManifest manifest) Check that the table descriptor for the snapshot is a valid table descriptor
-
Field Details
-
LOG
-
snapshot
private org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription snapshot -
workingDirFs
-
tableName
-
services
-
-
Constructor Details
-
MasterSnapshotVerifier
public MasterSnapshotVerifier(MasterServices services, org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotDescription snapshot, org.apache.hadoop.fs.FileSystem workingDirFs) - Parameters:
services
- services for the mastersnapshot
- snapshot to checkworkingDirFs
- the file system containing the temporary snapshot information
-
-
Method Details
-
verifySnapshot
public void verifySnapshot(org.apache.hadoop.fs.Path snapshotDir, boolean verifyRegions) throws CorruptedSnapshotException, IOException Verify that the snapshot in the directory is a valid snapshot- Parameters:
snapshotDir
- snapshot directory to check- Throws:
CorruptedSnapshotException
- if the snapshot is invalidIOException
- if there is an unexpected connection issue to the filesystem
-
verifySnapshotDescription
private void verifySnapshotDescription(org.apache.hadoop.fs.Path snapshotDir) throws CorruptedSnapshotException Check that the snapshot description written in the filesystem matches the current snapshot- Parameters:
snapshotDir
- snapshot directory to check- Throws:
CorruptedSnapshotException
-
verifyTableInfo
Check that the table descriptor for the snapshot is a valid table descriptor- Parameters:
manifest
- snapshot manifest to inspect- Throws:
IOException
-
verifyRegions
Check that all the regions in the snapshot are valid, and accounted for.- Parameters:
manifest
- snapshot manifest to inspect- Throws:
IOException
- if we can't reach hbase:meta or read the files from the FS
-
verifyRegionInfo
private void verifyRegionInfo(RegionInfo region, org.apache.hadoop.hbase.shaded.protobuf.generated.SnapshotProtos.SnapshotRegionManifest manifest) throws IOException Verify that the regionInfo is valid- Parameters:
region
- the region to checkmanifest
- snapshot manifest to inspect- Throws:
IOException
-