Convert H2CacheFactory to use Path
Change-Id: I8528d95e2464c4dd0845cdfa5a7b0b1e52902375
diff --git a/gerrit-cache-h2/src/main/java/com/google/gerrit/server/cache/h2/H2CacheFactory.java b/gerrit-cache-h2/src/main/java/com/google/gerrit/server/cache/h2/H2CacheFactory.java
index 5870f91..54a2246 100644
--- a/gerrit-cache-h2/src/main/java/com/google/gerrit/server/cache/h2/H2CacheFactory.java
+++ b/gerrit-cache-h2/src/main/java/com/google/gerrit/server/cache/h2/H2CacheFactory.java
@@ -37,7 +37,9 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
@@ -51,7 +53,7 @@
private final DefaultCacheFactory defaultFactory;
private final Config config;
- private final File cacheDir;
+ private final Path cacheDir;
private final List<H2CacheImpl<?, ?>> caches;
private final DynamicMap<Cache<?, ?>> cacheMap;
private final ExecutorService executor;
@@ -65,23 +67,7 @@
DynamicMap<Cache<?, ?>> cacheMap) {
defaultFactory = defaultCacheFactory;
config = cfg;
-
- File loc = site.resolve(cfg.getString("cache", null, "directory"));
- if (loc == null) {
- cacheDir = null;
- } else if (loc.exists() || loc.mkdirs()) {
- if (loc.canWrite()) {
- log.info("Enabling disk cache " + loc.getAbsolutePath());
- cacheDir = loc;
- } else {
- log.warn("Can't write to disk cache: " + loc.getAbsolutePath());
- cacheDir = null;
- }
- } else {
- log.warn("Can't create disk cache: " + loc.getAbsolutePath());
- cacheDir = null;
- }
-
+ cacheDir = getCacheDir(site, cfg.getString("cache", null, "directory"));
caches = Lists.newLinkedList();
this.cacheMap = cacheMap;
@@ -103,6 +89,27 @@
}
}
+ private static Path getCacheDir(SitePaths site, String name) {
+ if (name == null) {
+ return null;
+ }
+ Path loc = site.resolve(name).toPath();
+ if (!Files.exists(loc)) {
+ try {
+ Files.createDirectories(loc);
+ } catch (IOException e) {
+ log.warn("Can't create disk cache: " + loc.toAbsolutePath());
+ return null;
+ }
+ }
+ if (!Files.isWritable(loc)) {
+ log.warn("Can't write to disk cache: " + loc.toAbsolutePath());
+ return null;
+ }
+ log.info("Enabling disk cache " + loc.toAbsolutePath());
+ return loc;
+ }
+
@Override
public void start() {
if (executor != null) {
@@ -213,8 +220,7 @@
TypeLiteral<K> keyType,
long maxSize,
Long expireAfterWrite) {
- File db = new File(cacheDir, name).getAbsoluteFile();
- String url = "jdbc:h2:" + db.toURI().toString();
+ String url = "jdbc:h2:" + cacheDir.resolve(name).toUri();
return new SqlStore<>(url, keyType, maxSize,
expireAfterWrite == null ? 0 : expireAfterWrite.longValue());
}