From: elgekko Date: Tue, 5 Sep 2023 19:30:14 +0000 (+0200) Subject: Minor fixes (non-tested) X-Git-Url: http://git.useribm.hu/?a=commitdiff_plain;h=c9b4f898edba8abee103d78f7431a61f6bcccec7;p=mediacube.git Minor fixes (non-tested) --- diff --git a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/FileOperations.java b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/FileOperations.java new file mode 100644 index 00000000..6dd1b539 --- /dev/null +++ b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/FileOperations.java @@ -0,0 +1,30 @@ +package hu.user.mediacube.integration.safedelete; + +import lombok.extern.log4j.Log4j2; + +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; + +@Log4j2 +public class FileOperations { + + static public void silentDelete(Path path) { + try { + Files.delete(path); + } catch (Exception e) { + log.catching(e); + } + + } + + static public void silentRename(Path source, String prefix) { + try { + String fileName = String.format("%s%s", prefix, source.getFileName().toString()); + Path target = Paths.get(source.getParent().toAbsolutePath().toString(), fileName); + Files.move(source, target); + } catch (Exception e) { + log.catching(e); + } + } +} diff --git a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/SafeDeleteCommand.java b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/SafeDeleteCommand.java index 151e32c1..fee217ff 100644 --- a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/SafeDeleteCommand.java +++ b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/SafeDeleteCommand.java @@ -15,6 +15,8 @@ import java.nio.file.Paths; @Component @Log4j2 public class SafeDeleteCommand { + private static final String ERROR_FILENAME_PREFIX = "ERROR-"; + @Autowired MediaCubeDatabaseService mediaCubeDatabaseService; @@ -26,9 +28,10 @@ public class SafeDeleteCommand { Path inputPath = Paths.get(directory); try (DirectoryStream stream = Files.newDirectoryStream(inputPath)) { for (Path filePath : stream) { - if (!Files.isDirectory(filePath)) { - processInputFile(filePath, forceDeleteArchived); + if (Files.isDirectory(filePath) || filePath.getFileName().toString().startsWith(ERROR_FILENAME_PREFIX)) { + continue; } + processInputFile(filePath, forceDeleteArchived); } } } @@ -45,15 +48,12 @@ public class SafeDeleteCommand { tsmService.verify(source, status); if (forceDeleteArchived && status.isFileSizeEquals() && status.isHashEquals()) { - try { - Files.delete(source); - } catch (Exception e) { - log.catching(e); - } + FileOperations.silentDelete(source); } } catch (Exception e) { log.catching(e); + FileOperations.silentRename(source, ERROR_FILENAME_PREFIX); } } } diff --git a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/SafeDeleteMainEntry.java b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/SafeDeleteMainEntry.java index d6054731..9d1b5520 100644 --- a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/SafeDeleteMainEntry.java +++ b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/SafeDeleteMainEntry.java @@ -13,7 +13,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @Log4j2 @SpringBootApplication() -@MapperScan({"hu.user.mediacube.rdb"}) +@MapperScan({"hu.user.mediacube.rdb", "hu.user.mediacube.integration.safedelete.db"}) public class SafeDeleteMainEntry implements CommandLineRunner { @Autowired SafeDeleteCommand safeDeleteCommand; diff --git a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/SafeDeleteProperties.java b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/SafeDeleteProperties.java index a0048d3a..dec25000 100644 --- a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/SafeDeleteProperties.java +++ b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/SafeDeleteProperties.java @@ -1,11 +1,13 @@ package hu.user.mediacube.integration.safedelete; import lombok.Getter; +import lombok.Setter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; @Configuration @Getter +@Setter @ConfigurationProperties(prefix = "tsm") public class SafeDeleteProperties { private String nodeName; diff --git a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/db/MediaCubeRecordMapper.java b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/db/MediaCubeRecordMapper.java index 38b383c3..7cb61d3f 100644 --- a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/db/MediaCubeRecordMapper.java +++ b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/db/MediaCubeRecordMapper.java @@ -11,7 +11,7 @@ import java.util.List; @Mapper() public interface MediaCubeRecordMapper { - @SelectProvider(type = MediaCubeRecord.class, method = "getByFileName") + @SelectProvider(type = MediaCubeRecordProvider.class, method = "getByFileName") @Results({ @Result(property = "item.id", column = "itemid", jdbcType = JdbcType.BIGINT, id = true), @Result(property = "media.id", column = "mediaid", jdbcType = JdbcType.BIGINT, id = true), @@ -26,8 +26,8 @@ public interface MediaCubeRecordMapper { SQL sql = new SQL(); sql.SELECT("i.id item", "m.id mediaid", "m.archived", "mf.id mediafilefid", "mf.lastmodified"); sql.FROM("mediafile mf"); - sql.LEFT_OUTER_JOIN("media m ON (m.id = mf.mediaid)"); - sql.LEFT_OUTER_JOIN("item i ON (i.id = m.itemid)"); + sql.INNER_JOIN("media m ON (m.id = mf.mediaid)"); + sql.INNER_JOIN("item i ON (i.id = m.itemid)"); sql.WHERE("mf.relativepath = #{fileName}"); return sql.toString(); } diff --git a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/verifier/MediaCubeDatabaseService.java b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/verifier/MediaCubeDatabaseService.java index 4ca0f69c..073a5b40 100644 --- a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/verifier/MediaCubeDatabaseService.java +++ b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/verifier/MediaCubeDatabaseService.java @@ -18,7 +18,7 @@ public class MediaCubeDatabaseService { public void verify(String fileName, ArchiveFileStatus status) throws Exception { List dbRecords = mediaCubeRecordMapper.getByFileName(fileName); if (dbRecords.size() != 1) { - throw new Exception("Database records count mismatch. Expected 1 found " + dbRecords.size()); + throw new Exception(String.format("Database record count mismatch. Expected 1 found %d", dbRecords.size())); } status.setMetadataExists(true); } diff --git a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/verifier/TSMService.java b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/verifier/TSMService.java index 856410bc..17eaccca 100644 --- a/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/verifier/TSMService.java +++ b/mc-intergator/mc-safe-delete/src/main/java/hu/user/mediacube/integration/safedelete/verifier/TSMService.java @@ -1,6 +1,7 @@ package hu.user.mediacube.integration.safedelete.verifier; import hu.user.mediacube.integration.safedelete.ArchiveFileStatus; +import hu.user.mediacube.integration.safedelete.FileOperations; import hu.user.mediacube.integration.safedelete.SafeDeleteProperties; import lombok.extern.log4j.Log4j2; import org.apache.commons.codec.digest.DigestUtils; @@ -56,20 +57,30 @@ public class TSMService { } public void verify(Path source, ArchiveFileStatus status) throws Exception { - Path restored = restore(source.getFileName().toString()); - long restoredLength = restored.toFile().length(); - long originalLength = source.toFile().length(); - if (originalLength != restoredLength) { - throw new Exception(String.format("File size mismatch. Expected %d, found %d", originalLength, restoredLength)); - } - status.setFileSizeEquals(true); + Path restored = null; + try { + restored = restore(source.getFileName().toString()); + long restoredLength = restored.toFile().length(); + long originalLength = source.toFile().length(); + if (originalLength != restoredLength) { + throw new Exception(String.format("File size mismatch. Expected %d, found %d", originalLength, restoredLength)); + } + status.setFileSizeEquals(true); - String originalMD5 = createMD5Hash(source); - String restoredMD5 = createMD5Hash(restored); - if (!StringUtils.equals(originalMD5, restoredMD5)) { - throw new Exception(String.format("File MD5 hash mismatch. Expected %d, found %d", originalMD5, restoredMD5)); + String originalMD5 = createMD5Hash(source); + String restoredMD5 = createMD5Hash(restored); + if (!StringUtils.equals(originalMD5, restoredMD5)) { + throw new Exception(String.format("File MD5 hash mismatch. Expected %d, found %d", originalMD5, restoredMD5)); + } + status.setHashEquals(true); + } catch (Exception e) { + throw e; + } finally { + if (Objects.nonNull(restored)) { + FileOperations.silentDelete(restored); + FileOperations.silentDelete(restored.getParent()); + } } - status.setHashEquals(true); } private String createMD5Hash(Path filePath) throws IOException {