Support for setting diskLimit from CacheModule bindings
For some persistent caches we may want a larger default diskLimit than
the overall default of 128MiB.
Change-Id: I9f8c85d7187d2edfe5ba48ea27c7b5f5e37e7abe
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 8141dfb..f7381a3 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
@@ -178,7 +178,7 @@
public <K, V> LoadingCache<K, V> build(
CacheBinding<K, V> def,
CacheLoader<K, V> loader) {
- long limit = config.getLong("cache", def.name(), "diskLimit", 128 << 20);
+ long limit = config.getLong("cache", def.name(), "diskLimit", def.diskLimit());
if (cacheDir == null || limit <= 0) {
return defaultFactory.build(def, loader);
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/cache/CacheBinding.java b/gerrit-server/src/main/java/com/google/gerrit/server/cache/CacheBinding.java
index 7062871..343827c 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/cache/CacheBinding.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/cache/CacheBinding.java
@@ -26,6 +26,9 @@
/** Set the total size of the cache. */
CacheBinding<K, V> maximumWeight(long weight);
+ /** Set the total on-disk limit of the cache */
+ CacheBinding<K, V> diskLimit(long limit);
+
/** Set the time an element lives before being expired. */
CacheBinding<K, V> expireAfterWrite(long duration, TimeUnit durationUnits);
@@ -39,6 +42,7 @@
TypeLiteral<K> keyType();
TypeLiteral<V> valueType();
long maximumWeight();
+ long diskLimit();
@Nullable Long expireAfterWrite(TimeUnit unit);
@Nullable Weigher<K, V> weigher();
@Nullable CacheLoader<K, V> loader();
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/cache/CacheProvider.java b/gerrit-server/src/main/java/com/google/gerrit/server/cache/CacheProvider.java
index 6d9ae0f..c73760c 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/cache/CacheProvider.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/cache/CacheProvider.java
@@ -38,6 +38,7 @@
private final TypeLiteral<V> valType;
private boolean persist;
private long maximumWeight;
+ private long diskLimit;
private Long expireAfterWrite;
private Provider<CacheLoader<K, V>> loader;
private Provider<Weigher<K, V>> weigher;
@@ -86,6 +87,15 @@
}
@Override
+ public CacheBinding<K, V> diskLimit(long limit) {
+ Preconditions.checkState(!frozen, "binding frozen, cannot be modified");
+ Preconditions.checkState(persist,
+ "diskLimit supported for persistent caches only");
+ diskLimit = limit;
+ return this;
+ }
+
+ @Override
public CacheBinding<K, V> expireAfterWrite(long duration, TimeUnit unit) {
Preconditions.checkState(!frozen, "binding frozen, cannot be modified");
expireAfterWrite = SECONDS.convert(duration, unit);
@@ -130,6 +140,14 @@
}
@Override
+ public long diskLimit() {
+ if (diskLimit > 0) {
+ return diskLimit;
+ }
+ return 128 << 20;
+ }
+
+ @Override
@Nullable
public Long expireAfterWrite(TimeUnit unit) {
return expireAfterWrite != null