reftable: add random suffix to table names
In some circumstances (eg. compacting a stack that has deletions), the
result may have a {min, max} range that already exists. In these
cases, we would rename onto an already existing file, which does not
work on Windows. By adding a random suffix, we disambiguate the files,
and avoid this failure scenario.
Change-Id: I0273f99bb845cfbdbd8cdd582b55d3c310505d29
Signed-off-by: Han-Wen Nienhuys <hanwen@google.com>
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileReftableStack.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileReftableStack.java
index db454b9..e422767 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileReftableStack.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/storage/file/FileReftableStack.java
@@ -21,6 +21,7 @@
import java.io.InputStreamReader;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
+import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
@@ -65,6 +66,8 @@
private final Runnable onChange;
+ private final SecureRandom random = new SecureRandom();
+
private final Supplier<Config> configSupplier;
// Used for stats & testing.
@@ -365,8 +368,9 @@
}
private String filename(long low, long high) {
- return String.format("%012x-%012x", //$NON-NLS-1$
- Long.valueOf(low), Long.valueOf(high));
+ return String.format("%012x-%012x-%08x", //$NON-NLS-1$
+ Long.valueOf(low), Long.valueOf(high),
+ random.nextInt());
}
/**