From c35fbd6b315d3e2bbdb1f1269a8f4e0737bf2562 Mon Sep 17 00:00:00 2001 From: at055612 <22818309+at055612@users.noreply.github.com> Date: Mon, 3 Feb 2025 16:39:16 +0000 Subject: [PATCH] Make TestListDbMigrations cope with .attach_pid file changes --- .../db/migration/TestListDbMigrations.java | 81 ++++++++++++++----- 1 file changed, 63 insertions(+), 18 deletions(-) diff --git a/stroom-app/src/test/java/stroom/db/migration/TestListDbMigrations.java b/stroom-app/src/test/java/stroom/db/migration/TestListDbMigrations.java index 2af8fe7f21..f6e8e999c2 100644 --- a/stroom-app/src/test/java/stroom/db/migration/TestListDbMigrations.java +++ b/stroom-app/src/test/java/stroom/db/migration/TestListDbMigrations.java @@ -23,15 +23,19 @@ import com.google.common.base.Strings; import jakarta.validation.constraints.NotNull; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.parallel.Isolated; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; +import java.nio.file.FileVisitResult; +import java.nio.file.FileVisitor; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; +import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; @@ -48,6 +52,7 @@ import static stroom.util.ConsoleColour.RED; import static stroom.util.ConsoleColour.YELLOW; +@Disabled // Manual running only as it is just listing stuff, not really a test @Isolated // This is walking the file tree so doesn't like it if another test is mutating // the file tree at the same time. public class TestListDbMigrations { @@ -327,27 +332,58 @@ private void inspectModule(final Path moduleDir) { } final Path projectRootDirFinal = projectRootDir; - try (Stream stream = Files.walk(moduleDir)) { - stream - .filter(Files::isRegularFile) - .filter(path -> - MIGRATION_PATH_REGEX_PATTERN.asMatchPredicate().test(path.toString())) - .map(path -> - new Script( - moduleName, - path.getFileName().toString(), - projectRootDirFinal.relativize(path), - path.toAbsolutePath().normalize())) - .filter(script -> - MIGRATION_FILE_REGEX_PATTERN.asMatchPredicate().test(script.fileName())) - .sorted(Comparator.comparing(Script::fileName, fileNameComparator)) - .forEach(tuple -> { - moduleToScriptMap.computeIfAbsent(moduleName, k -> new ArrayList<>()) - .add(tuple); - }); + final List migrationFiles = new ArrayList<>(); + + // For some reason when we used Files.walk() it would fail with a NoSuchFileException + // on an .attach_pid file, so have to do this. + try { + Files.walkFileTree(moduleDir, new FileVisitor<>() { + @Override + public FileVisitResult preVisitDirectory(final Path dir, final BasicFileAttributes attrs) { + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult visitFile(final Path file, final BasicFileAttributes attrs) { + if (Files.isRegularFile(file) + && MIGRATION_PATH_REGEX_PATTERN.matcher(file.toString()).matches() + && MIGRATION_FILE_REGEX_PATTERN.matcher(file.getFileName().toString()).matches()) { + migrationFiles.add(file); + } else { + LOGGER.debug("No match {}", file); + } + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult visitFileFailed(final Path file, final IOException exc) { + LOGGER.warn("Error visiting file {}", file, exc); + return FileVisitResult.CONTINUE; + } + + @Override + public FileVisitResult postVisitDirectory(final Path dir, final IOException exc) { + return FileVisitResult.CONTINUE; + } + }); } catch (IOException e) { throw new RuntimeException(e); } + + migrationFiles.stream() + .map(path -> + new Script( + moduleName, + path.getFileName().toString(), + projectRootDirFinal.relativize(path), + path.toAbsolutePath().normalize())) + .filter(script -> + MIGRATION_FILE_REGEX_PATTERN.asMatchPredicate().test(script.fileName())) + .sorted(Comparator.comparing(Script::fileName, fileNameComparator)) + .forEach(tuple -> { + moduleToScriptMap.computeIfAbsent(moduleName, k -> new ArrayList<>()) + .add(tuple); + }); } @NotNull @@ -412,4 +448,13 @@ Version getVersion() { } } } + + private boolean isNotAttachePidFile(final Path path) { + if (path.getFileName().toString().startsWith(".attach_pid")) { + LOGGER.info("Ignoring: {}", path); + return false; + } else { + return true; + } + } }