From 9eb4614fa6e93ab0323783edfa5ba1f41ddecf1d Mon Sep 17 00:00:00 2001 From: Armin Braun Date: Mon, 11 Mar 2019 19:27:08 +0100 Subject: [PATCH] More Verbose Assertion in testSnapshotWithStuckNode (#39893) (#39928) * The test failure in #39852 is caused by a file in the initial repository when there should not be any * It seems that on a normal consistent file system no left-over file should exist ever here after the validation finishes and I can't reproduce or see any other path to a dangling file in the fresh respository => added a more verbose and strict assertion that will log what file is left over next time * Relates #39852 --- .../snapshots/AbstractSnapshotIntegTestCase.java | 13 +++++++++++++ .../DedicatedClusterSnapshotRestoreIT.java | 5 ++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/server/src/test/java/org/elasticsearch/snapshots/AbstractSnapshotIntegTestCase.java b/server/src/test/java/org/elasticsearch/snapshots/AbstractSnapshotIntegTestCase.java index d5409821bef..9fe7356877c 100644 --- a/server/src/test/java/org/elasticsearch/snapshots/AbstractSnapshotIntegTestCase.java +++ b/server/src/test/java/org/elasticsearch/snapshots/AbstractSnapshotIntegTestCase.java @@ -35,6 +35,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; @@ -74,6 +75,18 @@ public abstract class AbstractSnapshotIntegTestCase extends ESIntegTestCase { return failureCount; } + public static void assertFileCount(Path dir, int expectedCount) throws IOException { + final List found = new ArrayList<>(); + Files.walkFileTree(dir, new SimpleFileVisitor() { + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { + found.add(file); + return FileVisitResult.CONTINUE; + } + }); + assertEquals("Unexpected file count, found: [" + found + "].", expectedCount, found.size()); + } + public static int numberOfFiles(Path dir) throws IOException { final AtomicInteger count = new AtomicInteger(); Files.walkFileTree(dir, new SimpleFileVisitor() { diff --git a/server/src/test/java/org/elasticsearch/snapshots/DedicatedClusterSnapshotRestoreIT.java b/server/src/test/java/org/elasticsearch/snapshots/DedicatedClusterSnapshotRestoreIT.java index 416fa2ee0a6..b90bc39709c 100644 --- a/server/src/test/java/org/elasticsearch/snapshots/DedicatedClusterSnapshotRestoreIT.java +++ b/server/src/test/java/org/elasticsearch/snapshots/DedicatedClusterSnapshotRestoreIT.java @@ -454,7 +454,7 @@ public class DedicatedClusterSnapshotRestoreIT extends AbstractSnapshotIntegTest // Remove it from the list of available nodes nodes.remove(blockedNode); - int numberOfFilesBeforeSnapshot = numberOfFiles(repo); + assertFileCount(repo, 0); logger.info("--> snapshot"); client.admin().cluster().prepareCreateSnapshot("test-repo", "test-snap") .setWaitForCompletion(false) @@ -490,8 +490,7 @@ public class DedicatedClusterSnapshotRestoreIT extends AbstractSnapshotIntegTest // (2) index-0 (because we keep the previous version) and // (3) index-latest // (4) incompatible-snapshots - assertThat("not all files were deleted during snapshot cancellation", - numberOfFilesBeforeSnapshot, equalTo(numberOfFiles(repo) - 4)); + assertFileCount(repo, 4); logger.info("--> done"); }