From 4ece8d3a0de7fa11fc407d89f6e9496ae0482950 Mon Sep 17 00:00:00 2001 From: Matt Lehman Date: Wed, 1 May 2024 17:48:57 -0700 Subject: [PATCH] Move getBackupDirectories to BackupRestoreUtil and change its signature to cease requiring an IConfiguration but rather just take the data directory path as a String. --- .../netflix/priam/backup/AbstractBackup.java | 40 ------------------- .../priam/backup/BackupRestoreUtil.java | 36 +++++++++++++++++ .../priam/backup/IncrementalBackup.java | 3 +- .../priam/backupv2/SnapshotMetaTask.java | 4 +- .../priam/backupv2/TestBackupV2Service.java | 4 +- 5 files changed, 44 insertions(+), 43 deletions(-) diff --git a/priam/src/main/java/com/netflix/priam/backup/AbstractBackup.java b/priam/src/main/java/com/netflix/priam/backup/AbstractBackup.java index 8024b124d..78e5edb45 100644 --- a/priam/src/main/java/com/netflix/priam/backup/AbstractBackup.java +++ b/priam/src/main/java/com/netflix/priam/backup/AbstractBackup.java @@ -21,13 +21,7 @@ import com.netflix.priam.utils.SystemUtils; import java.io.File; import java.io.FileFilter; -import java.nio.file.DirectoryStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.util.HashSet; import java.util.Optional; -import java.util.Set; import javax.inject.Inject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -95,40 +89,6 @@ protected String getKeyspace(File backupDir) { */ protected abstract void processColumnFamily(File backupDir) throws Exception; - /** - * Get all the backup directories for Cassandra. - * - * @param config to get the location of the data folder. - * @param monitoringFolder folder where cassandra backup's are configured. - * @return Set of the path(s) containing the backup folder for each columnfamily. - * @throws Exception incase of IOException. - */ - public static Set getBackupDirectories(IConfiguration config, String monitoringFolder) - throws Exception { - HashSet backupPaths = new HashSet<>(); - if (config.getDataFileLocation() == null) return backupPaths; - Path dataPath = Paths.get(config.getDataFileLocation()); - if (Files.exists(dataPath) && Files.isDirectory(dataPath)) - try (DirectoryStream directoryStream = - Files.newDirectoryStream(dataPath, path -> Files.isDirectory(path))) { - for (Path keyspaceDirPath : directoryStream) { - try (DirectoryStream keyspaceStream = - Files.newDirectoryStream( - keyspaceDirPath, path -> Files.isDirectory(path))) { - for (Path columnfamilyDirPath : keyspaceStream) { - Path backupDirPath = - Paths.get(columnfamilyDirPath.toString(), monitoringFolder); - if (Files.exists(backupDirPath) && Files.isDirectory(backupDirPath)) { - logger.debug("Backup folder: {}", backupDirPath); - backupPaths.add(backupDirPath); - } - } - } - } - } - return backupPaths; - } - protected static File[] getSecondaryIndexDirectories(File backupDir) { FileFilter filter = (file) -> file.getName().startsWith(".") && isAReadableDirectory(file); return Optional.ofNullable(backupDir.listFiles(filter)).orElse(new File[] {}); diff --git a/priam/src/main/java/com/netflix/priam/backup/BackupRestoreUtil.java b/priam/src/main/java/com/netflix/priam/backup/BackupRestoreUtil.java index e165f6bc2..635d91b26 100644 --- a/priam/src/main/java/com/netflix/priam/backup/BackupRestoreUtil.java +++ b/priam/src/main/java/com/netflix/priam/backup/BackupRestoreUtil.java @@ -18,9 +18,13 @@ package com.netflix.priam.backup; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; import com.netflix.priam.backupv2.IMetaProxy; import com.netflix.priam.utils.DateUtil; +import java.nio.file.DirectoryStream; +import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; import java.util.*; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -130,4 +134,36 @@ public final boolean isFiltered(String keyspace, String columnFamilyDir) { || includeFilter.get(keyspace).contains(columnFamilyName))); return false; } + + /** + * Get all the backup directories for Cassandra. + * + * @param dataDirectory the location of the data folder. + * @param monitoringFolder folder where cassandra backup's are configured. + * @return Set of the path(s) containing the backup folder for each columnfamily. + * @throws Exception incase of IOException. + */ + public static ImmutableSet getBackupDirectories( + String dataDirectory, String monitoringFolder) throws Exception { + ImmutableSet.Builder backupPaths = ImmutableSet.builder(); + Path dataPath = Paths.get(dataDirectory); + if (Files.exists(dataPath) && Files.isDirectory(dataPath)) + try (DirectoryStream directoryStream = + Files.newDirectoryStream(dataPath, path -> Files.isDirectory(path))) { + for (Path keyspaceDirPath : directoryStream) { + try (DirectoryStream keyspaceStream = + Files.newDirectoryStream( + keyspaceDirPath, path -> Files.isDirectory(path))) { + for (Path columnfamilyDirPath : keyspaceStream) { + Path backupDirPath = + Paths.get(columnfamilyDirPath.toString(), monitoringFolder); + if (Files.exists(backupDirPath) && Files.isDirectory(backupDirPath)) { + backupPaths.add(backupDirPath); + } + } + } + } + } + return backupPaths.build(); + } } diff --git a/priam/src/main/java/com/netflix/priam/backup/IncrementalBackup.java b/priam/src/main/java/com/netflix/priam/backup/IncrementalBackup.java index c757db36e..37afc9376 100644 --- a/priam/src/main/java/com/netflix/priam/backup/IncrementalBackup.java +++ b/priam/src/main/java/com/netflix/priam/backup/IncrementalBackup.java @@ -77,7 +77,8 @@ public static TaskTimer getTimer( private static void cleanOldBackups(IConfiguration configuration) throws Exception { Set backupPaths = - AbstractBackup.getBackupDirectories(configuration, INCREMENTAL_BACKUP_FOLDER); + BackupRestoreUtil.getBackupDirectories( + configuration.getDataFileLocation(), INCREMENTAL_BACKUP_FOLDER); for (Path backupDirPath : backupPaths) { FileUtils.cleanDirectory(backupDirPath.toFile()); } diff --git a/priam/src/main/java/com/netflix/priam/backupv2/SnapshotMetaTask.java b/priam/src/main/java/com/netflix/priam/backupv2/SnapshotMetaTask.java index bc05c1874..639c85b86 100644 --- a/priam/src/main/java/com/netflix/priam/backupv2/SnapshotMetaTask.java +++ b/priam/src/main/java/com/netflix/priam/backupv2/SnapshotMetaTask.java @@ -146,7 +146,9 @@ public static TaskTimer getTimer(IBackupRestoreConfig config) throws IllegalArgu static void cleanOldBackups(IConfiguration config) throws Exception { // Clean up all the backup directories, if any. - Set backupPaths = AbstractBackup.getBackupDirectories(config, SNAPSHOT_FOLDER); + Set backupPaths = + BackupRestoreUtil.getBackupDirectories( + config.getDataFileLocation(), SNAPSHOT_FOLDER); for (Path backupDirPath : backupPaths) try (DirectoryStream directoryStream = Files.newDirectoryStream(backupDirPath, Files::isDirectory)) { diff --git a/priam/src/test/java/com/netflix/priam/backupv2/TestBackupV2Service.java b/priam/src/test/java/com/netflix/priam/backupv2/TestBackupV2Service.java index e017ef295..26f3409f9 100644 --- a/priam/src/test/java/com/netflix/priam/backupv2/TestBackupV2Service.java +++ b/priam/src/test/java/com/netflix/priam/backupv2/TestBackupV2Service.java @@ -22,6 +22,7 @@ import com.google.inject.Injector; import com.netflix.priam.backup.AbstractBackup; import com.netflix.priam.backup.BRTestModule; +import com.netflix.priam.backup.BackupRestoreUtil; import com.netflix.priam.config.IBackupRestoreConfig; import com.netflix.priam.config.IConfiguration; import com.netflix.priam.connection.JMXNodeTool; @@ -116,7 +117,8 @@ public void testBackupDisabled( // snapshot V2 name should not be there. Set backupPaths = - AbstractBackup.getBackupDirectories(configuration, AbstractBackup.SNAPSHOT_FOLDER); + BackupRestoreUtil.getBackupDirectories( + configuration.getDataFileLocation(), AbstractBackup.SNAPSHOT_FOLDER); for (Path backupPath : backupPaths) { Assert.assertFalse(Files.exists(Paths.get(backupPath.toString(), snapshotName))); Assert.assertTrue(Files.exists(Paths.get(backupPath.toString(), snapshotV1Name)));