Hi all,
I'm using the official Gerrit Docker image. Yesterday, I upgraded to 3.5.2, and have been trying to run copy-approvals as instructed.
If I run via ssh, I see:
gerrit_1 | [2022-09-08T04:27:52.712Z] [SSH gerrit copy-approvals (chungwu)] ERROR com.google.gerrit.sshd.BaseCommand : Internal server error (user chungwu account 1000000) during gerrit copy-approvals
gerrit_1 | java.lang.IllegalArgumentException: Approval that should be copied is not copied.
gerrit_1 | at com.google.common.base.Preconditions.checkArgument(Preconditions.java:142)
gerrit_1 | at com.google.gerrit.server.notedb.ChangeUpdate.putCopiedApproval(ChangeUpdate.java:285)
gerrit_1 | at com.google.gerrit.server.approval.ApprovalsUtil.persistCopiedApprovals(ApprovalsUtil.java:390)
gerrit_1 | at com.google.gerrit.server.approval.RecursiveApprovalCopier$PersistCopiedVotesOp.updateChange(RecursiveApprovalCopier.java:105)
gerrit_1 | at com.google.gerrit.server.update.BatchUpdate.executeChangeOps(BatchUpdate.java:680)
gerrit_1 | at com.google.gerrit.server.update.BatchUpdate.execute(BatchUpdate.java:147)
gerrit_1 | at com.google.gerrit.server.update.BatchUpdate.execute(BatchUpdate.java:434)
gerrit_1 | at com.google.gerrit.server.approval.RecursiveApprovalCopier.persist(RecursiveApprovalCopier.java:77)
gerrit_1 | at com.google.gerrit.sshd.commands.CopyApprovalsCommand.run(CopyApprovalsCommand.java:75)
gerrit_1 | at com.google.gerrit.sshd.SshCommand.lambda$start$1(SshCommand.java:79)
gerrit_1 | at com.google.gerrit.sshd.BaseCommand$TaskThunk.run(BaseCommand.java:494)
gerrit_1 | at com.google.gerrit.server.logging.LoggingContextAwareRunnable.run(LoggingContextAwareRunnable.java:113)
gerrit_1 | at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
gerrit_1 | at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
gerrit_1 | at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
gerrit_1 | at com.google.gerrit.server.git.WorkQueue$Task.run(WorkQueue.java:612)
gerrit_1 | at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
gerrit_1 | at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
gerrit_1 | at java.base/java.lang.Thread.run(Thread.java:829)
If I bash into the running gerrit container, and run it with `gerrit.war`, I see:
at com.google.inject.internal.InternalProvisionException.toProvisionException(InternalProvisionException.java:251)
at com.google.inject.internal.InjectorImpl$1.get(InjectorImpl.java:1103)
at com.google.inject.assistedinject.FactoryProvider2.invoke(FactoryProvider2.java:878)
at com.sun.proxy.$Proxy28.create(Unknown Source)
at com.google.gerrit.server.index.SingleVersionModule$SingleVersionListener.start(SingleVersionModule.java:98)
at com.google.gerrit.server.index.SingleVersionModule$SingleVersionListener.start(SingleVersionModule.java:79)
at com.google.gerrit.lifecycle.LifecycleManager.start(LifecycleManager.java:95)
at com.google.gerrit.pgm.CopyApprovals.run(CopyApprovals.java:70)
at com.google.gerrit.pgm.util.AbstractProgram.main(AbstractProgram.java:61)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at com.google.gerrit.launcher.GerritLauncher.invokeProgram(GerritLauncher.java:224)
at com.google.gerrit.launcher.GerritLauncher.mainImpl(GerritLauncher.java:120)
at com.google.gerrit.launcher.GerritLauncher.main(GerritLauncher.java:65)
at Main.main(Main.java:28)
Caused by: org.apache.lucene.store.LockObtainFailedException: Lock held by another program: /var/gerrit/index/accounts_0011/write.lock
at org.apache.lucene.store.NativeFSLockFactory.obtainFSLock(NativeFSLockFactory.java:118)
at org.apache.lucene.store.FSLockFactory.obtainLock(FSLockFactory.java:41)
at org.apache.lucene.store.BaseDirectory.obtainLock(BaseDirectory.java:45)
at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:800)
at com.google.gerrit.lucene.AutoCommitWriter.<init>(AutoCommitWriter.java:35)
at com.google.gerrit.lucene.AutoCommitWriter.<init>(AutoCommitWriter.java:31)
at com.google.gerrit.lucene.AbstractLuceneIndex.<init>(AbstractLuceneIndex.java:138)
at com.google.gerrit.lucene.LuceneAccountIndex.<init>(LuceneAccountIndex.java:101)
at com.google.gerrit.lucene.LuceneAccountIndex$$FastClassByGuice$$199127807.GUICE$TRAMPOLINE(<generated>)
at com.google.gerrit.lucene.LuceneAccountIndex$$FastClassByGuice$$199127807.apply(<generated>)
at com.google.inject.internal.DefaultConstructionProxyFactory$FastClassProxy.newInstance(DefaultConstructionProxyFactory.java:82)
at com.google.inject.internal.ConstructorInjector.provision(ConstructorInjector.java:114)
at com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:91)
at com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:296)
at com.google.inject.internal.InjectorImpl$1.get(InjectorImpl.java:1100)
... 15 more
(maybe because Gerrit is running at the time?)
I'm not sure how to use the Docker image to run copy-approvals without also starting the Gerrit service...
Any ideas how I should proceed?
Thanks!
Chung