ai-code-review plugin: java.lang.NullPointerException: Null id

88 views
Skip to first unread message

Fabio Porcedda

unread,
Jul 2, 2025, 10:13:46 AM7/2/25
to Repo and Gerrit Discussion
I've done a fresh install in developer mode of Gerrit 3.11.3 and installed just the ai-code-review plugin but each time a change is sent for a review I get from the error_log a "java.lang.NullPointerException: Null id" error, no feedback is visible from the plugin on the change in Gerrit.

Any idea on how to fix it?

My setup is:
Ubuntu 22.04
Java 21
gerrit-3.11.3.war
Installed trough the plugin manager the default ai-code-plugin version cd2b9d896327e13b2d10d25bdd39e48c57ec13cc

error_log:

[2025-07-02T15:14:22.163+02:00] [ReceiveCommits-1[receive-commits]-for-SSH git-receive-pack /test (admin)] INFO  com.googlesource.gerrit.plugins.aicodereview.listener.GerritListener : Processing event: com.google.gerrit.server.events.PatchSetCreatedEvent@3ffb1ad3
[2025-07-02T15:14:22.165+02:00] [ReceiveCommits-1[receive-commits]-for-SSH git-receive-pack /test (admin)] WARN  com.google.gerrit.server.plugincontext.PluginContext : Failure in class com.googlesource.gerrit.plugins.aicodereview.listener.GerritListener of plugin ai-code-review [CONTEXT PLUGIN="gerrit" RECEIVE_ID="test-1751462061865-1a2f493d" project="test" request="GIT_RECEIVE" ]
java.lang.NullPointerException: Null id
at com.google.gerrit.server.account.externalids.$AutoValue_ExternalId_Key.<init>($AutoValue_ExternalId_Key.java:22)
at com.google.gerrit.server.account.externalids.AutoValue_ExternalId_Key.<init>(AutoValue_ExternalId_Key.java:29)
at com.google.gerrit.server.account.externalids.ExternalId$Key.create(ExternalId.java:169)
at com.google.gerrit.server.account.externalids.ExternalIdKeyFactory.create(ExternalIdKeyFactory.java:84)
at com.google.gerrit.server.account.externalids.ExternalIdKeyFactory.create(ExternalIdKeyFactory.java:68)
at com.google.gerrit.server.account.AccountCacheImpl.getByUsername(AccountCacheImpl.java:182)
at com.googlesource.gerrit.plugins.aicodereview.config.ConfigCreator.getAccount(ConfigCreator.java:107)
at com.googlesource.gerrit.plugins.aicodereview.config.ConfigCreator.createConfig(ConfigCreator.java:91)
at com.googlesource.gerrit.plugins.aicodereview.listener.GerritListener.onEvent(GerritListener.java:66)
at com.google.gerrit.server.events.EventBroker.lambda$fireEventForUnrestrictedListeners$0(EventBroker.java:113)
at com.google.gerrit.server.plugincontext.PluginContext.runLogExceptions(PluginContext.java:214)
at com.google.gerrit.server.plugincontext.PluginSetContext.lambda$runEach$1(PluginSetContext.java:148)
at java.base/java.lang.Iterable.forEach(Iterable.java:75)
at com.google.gerrit.server.plugincontext.PluginSetContext.runEach(PluginSetContext.java:148)
at com.google.gerrit.server.events.EventBroker.fireEventForUnrestrictedListeners(EventBroker.java:113)
at com.google.gerrit.server.events.EventBroker.fireEvent(EventBroker.java:124)
at com.google.gerrit.server.events.EventBroker.postEvent(EventBroker.java:93)
at com.google.gerrit.server.events.StreamEventsApiListener.lambda$onRevisionCreated$6(StreamEventsApiListener.java:312)
at com.google.gerrit.server.plugincontext.PluginContext.runLogExceptions(PluginContext.java:214)
at com.google.gerrit.server.plugincontext.PluginItemContext.run(PluginItemContext.java:131)
at com.google.gerrit.server.events.StreamEventsApiListener.onRevisionCreated(StreamEventsApiListener.java:312)
at com.google.gerrit.server.extensions.events.RevisionCreated.lambda$fire$0(RevisionCreated.java:85)
at com.google.gerrit.server.plugincontext.PluginContext.runLogExceptions(PluginContext.java:214)
at com.google.gerrit.server.plugincontext.PluginSetContext.lambda$runEach$1(PluginSetContext.java:148)
at java.base/java.lang.Iterable.forEach(Iterable.java:75)
at com.google.gerrit.server.plugincontext.PluginSetContext.runEach(PluginSetContext.java:148)
at com.google.gerrit.server.extensions.events.RevisionCreated.fire(RevisionCreated.java:85)
at com.google.gerrit.server.git.receive.ReplaceOp.postUpdate(ReplaceOp.java:540)
at com.google.gerrit.server.update.BatchUpdate.executePostOps(BatchUpdate.java:805)
at com.google.gerrit.server.update.BatchUpdates.execute(BatchUpdates.java:141)
at com.google.gerrit.server.update.BatchUpdate.execute(BatchUpdate.java:372)
at com.google.gerrit.server.git.receive.ReceiveCommits.insertChangesAndPatchSets(ReceiveCommits.java:1273)
at com.google.gerrit.server.git.receive.ReceiveCommits.lambda$insertChangesAndPatchSets$19(ReceiveCommits.java:1175)
at com.google.gerrit.server.update.RetryableChangeAction.lambda$new$0(RetryableChangeAction.java:48)
at com.google.gerrit.server.update.RetryableAction.lambda$new$0(RetryableAction.java:94)
at com.github.rholder.retry.AttemptTimeLimiters$NoAttemptTimeLimit.call(AttemptTimeLimiters.java:78)
at com.github.rholder.retry.Retryer.call(Retryer.java:160)
at com.google.gerrit.server.update.RetryHelper.executeWithTimeoutCount(RetryHelper.java:598)
at com.google.gerrit.server.update.RetryHelper.execute(RetryHelper.java:541)
at com.google.gerrit.server.update.RetryableAction.call(RetryableAction.java:192)
at com.google.gerrit.server.update.RetryableChangeAction.call(RetryableChangeAction.java:84)
at com.google.gerrit.server.git.receive.ReceiveCommits.insertChangesAndPatchSets(ReceiveCommits.java:1180)
at com.google.gerrit.server.git.receive.ReceiveCommits.processCommandsUnsafe(ReceiveCommits.java:921)
at com.google.gerrit.server.git.receive.ReceiveCommits.processCommands(ReceiveCommits.java:730)
at com.google.gerrit.server.git.receive.AsyncReceiveCommits.lambda$preReceive$2(AsyncReceiveCommits.java:386)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:572)
at com.google.gerrit.server.util.RequestScopePropagator.lambda$cleanup$1(RequestScopePropagator.java:187)
at com.google.gerrit.server.util.RequestScopePropagator.lambda$context$0(RequestScopePropagator.java:174)
at com.google.gerrit.server.util.ThreadLocalRequestScopePropagator.lambda$wrapImpl$0(ThreadLocalRequestScopePropagator.java:47)
at com.google.gerrit.server.util.RequestScopePropagator$1.call(RequestScopePropagator.java:85)
at com.google.gerrit.server.util.RequestScopePropagator$2.run(RequestScopePropagator.java:116)
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)
[2025-07-02T15:14:22.170+02:00] [SSH git-receive-pack /test (admin)] INFO  com.google.gerrit.server.git.MultiProgressMonitor : Processing changes: refs: 1, updated: 1 [CONTEXT ratelimit_period="1 MINUTES" ]

Thanks
Fabio

Fabio Porcedda

unread,
Jul 2, 2025, 10:15:50 AM7/2/25
to Repo and Gerrit Discussion
I've already opened an issue about that.


Thanks
Fabio

Aaron Smith

unread,
Jul 7, 2025, 12:34:12 PM7/7/25
to Repo and Gerrit Discussion
I saw the same error message when I configured this plugin last week. I had to update my configuration to fix it, but I don't remember exactly what configuration item was the problem. Here's my redacted config -- will you share yours?
[plugin "ai-code-review"]
        aiToken = <removed>
        gerritUserName = <removed>
        aiMode = stateful
        aiReviewPatchSet = true
        globalEnable = true
        enableMessageDebugging = true

I'm now working through a different error, but that's a different topic.

Trevor Getty

unread,
Jul 7, 2025, 4:55:57 PM7/7/25
to Repo and Gerrit Discussion
I have commented on the ticket,  with more information, but this issue is usually environmental configuration, when it doesnt find the gerritUsername account id when its looking up the user to make the review as.

As such refer to my information in the raised issue tracker ticket:-

We can keep future replies to the issue tracker to keep a conversation thread together. 

Regards, 
trevor. 
Reply all
Reply to author
Forward
0 new messages