init: delete cache if not empty

As the the cache may be stale during update, offer the option
to delete it during init.

The default is  set to not delete the cache, so batch usage should
be safe.

Change-Id: I51cc6d8aeeed52d2e47aaea97cba625ee0d506fc
This commit is contained in:
Björn Pedersen 2016-10-06 14:17:57 +02:00
parent ca40aad0b9
commit 61b8c842bd

View File

@ -15,6 +15,7 @@
package com.google.gerrit.pgm.init;
import com.google.gerrit.common.FileUtil;
import com.google.gerrit.pgm.init.api.ConsoleUI;
import com.google.gerrit.pgm.init.api.InitStep;
import com.google.gerrit.pgm.init.api.Section;
import com.google.gerrit.server.config.SitePaths;
@ -22,21 +23,30 @@ import com.google.inject.Inject;
import com.google.inject.Singleton;
import java.nio.file.Path;
import java.io.IOException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.List;
/** Initialize the {@code cache} configuration section. */
@Singleton
class InitCache implements InitStep {
private final ConsoleUI ui;
private final SitePaths site;
private final Section cache;
@Inject
InitCache(final SitePaths site, final Section.Factory sections) {
InitCache(final ConsoleUI ui, final SitePaths site,
final Section.Factory sections) {
this.ui = ui;
this.site = site;
this.cache = sections.get("cache", null);
}
@Override
public void run() {
ui.header("Cache");
String path = cache.get("directory");
if (path != null && path.isEmpty()) {
@ -53,6 +63,27 @@ class InitCache implements InitStep {
Path loc = site.resolve(path);
FileUtil.mkdirsOrDie(loc, "cannot create cache.directory");
List<Path> cacheFiles = new ArrayList<>();
try (DirectoryStream<Path> stream =
Files.newDirectoryStream(loc, "*.{lock,h2,trace}.db")) {
for (Path entry : stream) {
cacheFiles.add(entry);
}
} catch (IOException e) {
ui.message("IO error during cache directory scan");
return;
}
if (!cacheFiles.isEmpty()) {
for (Path entry : cacheFiles) {
if (ui.yesno(false, "Delete cache file %s", entry)) {
try {
Files.deleteIfExists(entry);
} catch (IOException e) {
ui.message("Could not delete " + entry);
}
}
}
}
}
@Override