Hi
I've recently tried to update our test instance from 3.10 to 3.12 directly. My steps were:
- Shutdown gerrit
- delete all files in /cache (I did not want to use any migration tool, as simply rebuilding the cache is much easier and can be done in <10mins on our system)
- Upgrade to 3.12.3
- run "init" and let it finish (performing offline update)
- start Gerrit
Afterwards I got various errors in the Logs, probably there's something wrong with the cache migration code?
[2025-11-28T22:33:49.681+01:00] [DiskCache-Prune-1[Disk Cache Pruner (modified_files-v2)]] WARN com.google.gerrit.server.cache.h2.H2CacheImpl : Cannot prune cache jdbc:h2:file:///var/gerrit/cache/modified_files-v2
org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "DATA" already exists; SQL statement:
CREATE CACHED TABLE "PUBLIC"."DATA"(
"K" JAVA_OBJECT SELECTIVITY 100 NOT NULL,
"V" JAVA_OBJECT SELECTIVITY 60 NOT NULL,
"CREATED" TIMESTAMP SELECTIVITY 95 NOT NULL,
"ACCESSED" TIMESTAMP SELECTIVITY 88 NOT NULL,
"SPACE" BIGINT GENERATED ALWAYS AS (OCTET_LENGTH("K") + OCTET_LENGTH("V")) SELECTIVITY 43,
"VERSION" INTEGER DEFAULT 0 SELECTIVITY 1 NOT NULL
) [42101-232]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:514)
at org.h2.message.DbException.getJdbcSQLException(DbException.java:489)
at org.h2.message.DbException.get(DbException.java:223)
at org.h2.message.DbException.get(DbException.java:199)
at org.h2.command.ddl.CreateTable.update(CreateTable.java:91)
at org.h2.engine.MetaRecord.prepareAndExecute(MetaRecord.java:77)
at org.h2.engine.Database.executeMeta(Database.java:665)
at org.h2.engine.Database.executeMeta(Database.java:637)
at org.h2.engine.Database.<init>(Database.java:359)
at org.h2.engine.Engine.openSession(Engine.java:92)
at org.h2.engine.Engine.openSession(Engine.java:222)
at org.h2.engine.Engine.createSession(Engine.java:201)
at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:344)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:124)
at org.h2.Driver.connect(Driver.java:59)
at com.google.gerrit.server.cache.h2.H2CacheImpl$SqlHandle.<init>(H2CacheImpl.java:744)
at com.google.gerrit.server.cache.h2.H2CacheImpl$SqlStore.acquire(H2CacheImpl.java:716)
at com.google.gerrit.server.cache.h2.H2CacheImpl$SqlStore.prune(H2CacheImpl.java:632)
at com.google.gerrit.server.cache.h2.H2CacheImpl.prune(H2CacheImpl.java:225)
at com.google.gerrit.server.cache.h2.H2CacheFactory$PeriodicCachePruner.run(H2CacheFactory.java:74)
at com.google.gerrit.server.logging.LoggingContextAwareRunnable.run(LoggingContextAwareRunnable.java:113)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
at com.google.gerrit.server.git.WorkQueue$Task.run(WorkQueue.java:912)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at java.base/java.lang.Thread.run(Thread.java:1583)