Avoid updating disk caches with accessed time during offline reindex
The added contention among threads trying to update the accessed time
outweighs any benefits it may be providing.
Release-Notes: Improved offline reindex performance when disk caches have many hits
Change-Id: I7a3218ec3840ce3946c404541c76098d209f973b
diff --git a/java/com/google/gerrit/server/cache/h2/H2CacheFactory.java b/java/com/google/gerrit/server/cache/h2/H2CacheFactory.java
index fdd55ac..fd0bf31 100644
--- a/java/com/google/gerrit/server/cache/h2/H2CacheFactory.java
+++ b/java/com/google/gerrit/server/cache/h2/H2CacheFactory.java
@@ -231,7 +231,8 @@
maxSize,
expireAfterWrite,
refreshAfterWrite,
- buildBloomFilter);
+ buildBloomFilter,
+ isOfflineReindex);
}
private boolean has(String name, String var) {
diff --git a/java/com/google/gerrit/server/cache/h2/H2CacheImpl.java b/java/com/google/gerrit/server/cache/h2/H2CacheImpl.java
index 27a09ed..bda101e 100644
--- a/java/com/google/gerrit/server/cache/h2/H2CacheImpl.java
+++ b/java/com/google/gerrit/server/cache/h2/H2CacheImpl.java
@@ -367,6 +367,7 @@
private volatile BloomFilter<K> bloomFilter;
private int estimatedSize;
private boolean buildBloomFilter;
+ private boolean isOfflineReindex;
SqlStore(
String jdbcUrl,
@@ -377,7 +378,8 @@
long maxSize,
@Nullable Duration expireAfterWrite,
@Nullable Duration refreshAfterWrite,
- boolean buildBloomFilter) {
+ boolean buildBloomFilter,
+ boolean isOfflineReindex) {
this.url = jdbcUrl;
this.keyType = createKeyType(keyType, keySerializer);
this.valueSerializer = valueSerializer;
@@ -386,6 +388,7 @@
this.expireAfterWrite = expireAfterWrite;
this.refreshAfterWrite = refreshAfterWrite;
this.buildBloomFilter = buildBloomFilter;
+ this.isOfflineReindex = isOfflineReindex;
int cores = Runtime.getRuntime().availableProcessors();
int keep = Math.min(cores, 16);
@@ -509,7 +512,9 @@
ValueHolder<V> h = new ValueHolder<>(val, created.toInstant());
h.clean = true;
hitCount.incrementAndGet();
- touch(c, key);
+ if (!isOfflineReindex) {
+ touch(c, key);
+ }
return h;
} finally {
c.get.clearParameters();
diff --git a/javatests/com/google/gerrit/server/cache/h2/H2CacheTest.java b/javatests/com/google/gerrit/server/cache/h2/H2CacheTest.java
index 8c4eb08..b7f566db 100644
--- a/javatests/com/google/gerrit/server/cache/h2/H2CacheTest.java
+++ b/javatests/com/google/gerrit/server/cache/h2/H2CacheTest.java
@@ -72,7 +72,8 @@
1 << 20,
expireAfterWrite,
refreshAfterWrite,
- true);
+ true,
+ false);
}
@Test