`owners-*` CI and 3.14

81 views
Skip to first unread message

Winter M

unread,
Jul 13, 2026, 4:37:30 PM (8 days ago) Jul 13
to repo-d...@googlegroups.com
Hi all,

I'm trying to install `owners` on 3.14 via the plugin manager. It
seems to at the very least install the `owners.jar` file, but I get an
odd error:

```
[2026-07-13T16:19:51.519-04:00] [HTTP PUT /a/plugins/owners.jar (admin
from 127.0.0.1)] WARN com.google.gerrit.server.plugins.PluginLoader :
Plugin provides its own name: <owners>, use it instead of the input
name: <owners.jar> [CONTEXT TRACE_ID="1783973991211-3c4cdf54"
request="REST /plugins/*" ] [2026-07-13T16:19:51.528-04:00] [HTTP PUT
/a/plugins/owners.jar (admin from 127.0.0.1)] INFO
com.google.gerrit.server.plugins.PluginLoader : Installed plugin
owners-api [CONTEXT TRACE_ID="1783973991211-3c4cdf54" request="REST
/plugins/*" ] [2026-07-13T16:19:51.531-04:00] [HTTP PUT
/a/plugins/owners.jar (admin from 127.0.0.1)] ERROR
com.google.gerrit.httpd.restapi.RestApiServlet : Error in PUT
/a/plugins/owners.jar (view: plugins.InstallPlugin.Create):
NullPointerException [CONTEXT TRACE_ID="1783973991211-3c4cdf54"
request="REST /plugins/*" ] java.lang.NullPointerException: Cannot
invoke "com.google.gerrit.server.plugins.Plugin.getName()" because "p"
is null at com.google.gerrit.server.plugins.ListPlugins.toPluginInfo(ListPlugins.java:154)
at com.google.gerrit.server.plugins.InstallPlugin.apply(InstallPlugin.java:67)
at com.google.gerrit.server.plugins.InstallPlugin$Create.apply(InstallPlugin.java:114)
at com.google.gerrit.server.plugins.InstallPlugin$Create.apply(InstallPlugin.java:97)
at com.google.gerrit.httpd.restapi.RestApiServlet.lambda$invokeRestCollectionCreateViewWithRetry$7(RestApiServlet.java:882)
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:617)
at com.google.gerrit.server.update.RetryHelper.execute(RetryHelper.java:557)
at com.google.gerrit.server.update.RetryableAction.call(RetryableAction.java:192)
at com.google.gerrit.httpd.restapi.RestApiServlet.invokeRestEndpointWithRetry(RestApiServlet.java:940)
at com.google.gerrit.httpd.restapi.RestApiServlet.invokeRestCollectionCreateViewWithRetry(RestApiServlet.java:877)
at com.google.gerrit.httpd.restapi.RestApiServlet.service(RestApiServlet.java:561)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) at
com.google.gerrit.httpd.plugins.HttpPluginServlet.service(HttpPluginServlet.java:215)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:750) at
com.google.inject.servlet.ServletDefinition.doServiceImpl(ServletDefinition.java:293)
at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:283)
at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:184)
at com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:89)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:85)
at com.google.gerrit.httpd.raw.StaticModule$PolyGerritFilter.doFilter(StaticModule.java:443)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at com.google.gerrit.httpd.GetUserFilter.doFilter(GetUserFilter.java:92)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at com.google.gerrit.httpd.RunAsFilter.doFilter(RunAsFilter.java:117)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at com.google.gerrit.httpd.RequireIdentifiedUserFilter.doFilter(RequireIdentifiedUserFilter.java:50)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at com.google.gerrit.httpd.EnableTracingFilter.doFilter(EnableTracingFilter.java:57)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at com.google.gerrit.httpd.SetThreadNameFilter.doFilter(SetThreadNameFilter.java:62)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at com.google.gerrit.httpd.AllRequestFilter$FilterProxy$1.doFilter(AllRequestFilter.java:139)
at com.google.gerrit.httpd.AllowRenderInFrameFilter.doFilter(AllowRenderInFrameFilter.java:56)
at com.google.gerrit.httpd.AllRequestFilter$FilterProxy$1.doFilter(AllRequestFilter.java:135)
at com.google.gerrit.httpd.AllRequestFilter$FilterProxy.doFilter(AllRequestFilter.java:141)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at com.google.gerrit.httpd.RequestCleanupFilter.doFilter(RequestCleanupFilter.java:60)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at com.google.gerrit.httpd.ProjectBasicAuthFilter.doFilter(ProjectBasicAuthFilter.java:111)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at com.google.gerrit.httpd.RequestMetricsFilter.doFilter(RequestMetricsFilter.java:92)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at com.google.gerrit.httpd.RequestContextFilter.doFilter(RequestContextFilter.java:64)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:121)
at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:133)
at org.eclipse.jetty.ee8.servlet.FilterHolder.doFilter(FilterHolder.java:171)
at org.eclipse.jetty.ee8.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1350)
at org.eclipse.jetty.ee8.servlet.ServletHandler.doHandle(ServletHandler.java:454)
at org.eclipse.jetty.ee8.nested.ScopedHandler.nextHandle(ScopedHandler.java:179)
at org.eclipse.jetty.ee8.nested.SessionHandler.doHandle(SessionHandler.java:519)
at org.eclipse.jetty.ee8.nested.ScopedHandler.nextHandle(ScopedHandler.java:179)
at org.eclipse.jetty.ee8.nested.ContextHandler.doHandle(ContextHandler.java:887)
at org.eclipse.jetty.ee8.nested.ScopedHandler.nextScope(ScopedHandler.java:150)
at org.eclipse.jetty.ee8.servlet.ServletHandler.doScope(ServletHandler.java:423)
at org.eclipse.jetty.ee8.nested.ScopedHandler.nextScope(ScopedHandler.java:148)
at org.eclipse.jetty.ee8.nested.SessionHandler.doScope(SessionHandler.java:503)
at org.eclipse.jetty.ee8.nested.ScopedHandler.nextScope(ScopedHandler.java:148)
at org.eclipse.jetty.ee8.nested.ContextHandler.doScope(ContextHandler.java:826)
at org.eclipse.jetty.ee8.nested.ScopedHandler.handle(ScopedHandler.java:115)
at org.eclipse.jetty.ee8.nested.ContextHandler.handle(ContextHandler.java:1455)
at org.eclipse.jetty.ee8.nested.HttpChannel$RequestDispatchable.dispatch(HttpChannel.java:1307)
at org.eclipse.jetty.ee8.nested.HttpChannel.dispatch(HttpChannel.java:628)
at org.eclipse.jetty.ee8.nested.HttpChannel.handle(HttpChannel.java:468)
at org.eclipse.jetty.ee8.nested.ContextHandler$CoreContextHandler$CoreToNestedHandler.handle(ContextHandler.java:2540)
at org.eclipse.jetty.server.handler.ContextHandler.handle(ContextHandler.java:1253)
at org.eclipse.jetty.server.Server.handle(Server.java:197) at
org.eclipse.jetty.server.internal.HttpChannelState$HandlerInvoker.run(HttpChannelState.java:804)
at org.eclipse.jetty.server.internal.HttpConnection.onFillable(HttpConnection.java:420)
at org.eclipse.jetty.server.internal.HttpConnection$FillableCallback.succeeded(HttpConnection.java:1790)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:54)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:492)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.epcRunTask(AdaptiveExecutionStrategy.java:428)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:401)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:255)
at org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.run(AdaptiveExecutionStrategy.java:204)
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:317)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:1009)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1240)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1194)
at java.base/java.lang.Thread.run(Thread.java:1474)
[2026-07-13T16:19:56.840-04:00] [PluginScanner] INFO
com.google.gerrit.server.plugins.PluginLoader : Reloading plugin
owners-api [2026-07-13T16:19:56.845-04:00] [PluginScanner] INFO
com.google.gerrit.server.plugins.PluginLoader : Unloading plugin
owners-api, version v3.0-303-g75e9eb0940
[2026-07-13T16:19:56.846-04:00] [PluginScanner] INFO
com.google.gerrit.server.plugins.PluginLoader : Reloaded plugin
owners-api, version v3.0-303-g75e9eb0940
[2026-07-13T16:20:56.853-04:00] [WorkQueue-1[Plugin Cleaner (waiting
for 1 plugins)]] INFO com.google.gerrit.server.plugins.CleanupHandle :
Cleaned plugin plugin_owners-api_260713_2019_6709454259565898065.jar
```

This also results in the plugin manager not thinking it installed it
correctly (and only `owners-api` being loaded).

This may or may not be related to the fact that I don't see a job for
`owners-autoassign` for 3.14, but it also looks like that was only
just recently (last ~month) split out into its own repo, so maybe it's
unrelated. Am I just holding something wrong here?

Cheers,
Winter

Luca Milanesio

unread,
Jul 13, 2026, 5:14:37 PM (8 days ago) Jul 13
to repo-d...@googlegroups.com, Luca Milanesio


> On 13 Jul 2026, at 21:33, 'Winter M' via Repo and Gerrit Discussion <repo-d...@googlegroups.com> wrote:
>
> Hi all,
>
> I'm trying to install `owners` on 3.14 via the plugin manager.


That won’t work, because the owners plugin was still a mono-repo on stable-3.14 and therefore did not provide a single plugin jar but multiple ones.

You can download the invidual plugins’ jar at [1], [2] and [3].

HTH

Luca.

[1] https://gerrit-ci.gerritforge.com/job/plugin-owners-bazel-stable-3.14/lastSuccessfulBuild/artifact/bazel-bin/plugins/owners/owners-api.jar
[2] https://gerrit-ci.gerritforge.com/job/plugin-owners-bazel-stable-3.14/lastSuccessfulBuild/artifact/bazel-bin/plugins/owners/owners-autoassign.jar
[3] https://gerrit-ci.gerritforge.com/job/plugin-owners-bazel-stable-3.14/lastSuccessfulBuild/artifact/bazel-bin/plugins/owners/owners.jar
> --
> --
> To unsubscribe, email repo-discuss...@googlegroups.com
> More info at http://groups.google.com/group/repo-discuss?hl=en
>
> ---
> You received this message because you are subscribed to the Google Groups "Repo and Gerrit Discussion" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to repo-discuss...@googlegroups.com.
> To view this discussion visit https://groups.google.com/d/msgid/repo-discuss/CACFB7i9%2BzbcU1LWMoHoFzpNcccsgXqmF5cH_3%3D7yzevpEpxQZQ%40mail.gmail.com.

Winter M

unread,
Jul 14, 2026, 3:49:03 PM (7 days ago) Jul 14
to Repo and Gerrit Discussion
Thanks, Luca.

> That won't work, because the owners plugin was still a mono-repo...

Does this mean that for 3.15, one will need to manually grab owners-api, owners, and/or owners-autoassign from the plugin manager?

It looks like this doesn't quite work, unfortunately:

[2026-07-14T15:40:23.777-04:00] [main] INFO com.google.gerrit.server.plugins.PluginLoader : Removing stale plugin file: plugin_owners-autoassign_260714_1939_11203190176416256840.jar
[...]
[2026-07-14T15:40:23.950-04:00] [main] INFO com.google.gerrit.server.plugins.PluginLoader : Loaded plugin owners-api, version v3.0-303-g75e9eb0940 [2026-07-14T15:40:23.957-04:00] [main] INFO com.google.gerrit.server.config.FileBasedGlobalPluginConfigProvider : No /home/winter/gerrit/etc/owners-autoassign.config; assuming defaults [2026-07-14T15:40:23.967-04:00] [main] WARN com.google.gerrit.server.plugins.PluginLoader : Cannot load plugin owners-autoassign com.google.inject.ProvisionException: Unable to provision, see the following errors: 1) [Guice/ErrorInjectingConstructor]: NoClassDefFoundError: com/googlesource/gerrit/owners/api/OwnersAttentionSet at AutoassignModule.<init>(AutoassignModule.java:40) while locating AutoassignModule Learn more: https://github.com/google/guice/wiki/ERROR_INJECTING_CONSTRUCTOR 1 error ====================== Full classname legend: ====================== AutoassignModule: "com.googlesource.gerrit.owners.common.AutoassignModule" ======================== End of classname legend: ======================== at com.google.inject.internal.InternalProvisionException.toProvisionException(InternalProvisionException.java:251) at com.google.inject.internal.InjectorImpl$1.get(InjectorImpl.java:1151) at com.google.inject.internal.InjectorImpl.getInstance(InjectorImpl.java:1186) at com.google.gerrit.server.plugins.ServerPlugin.startPlugin(ServerPlugin.java:232) at com.google.gerrit.server.plugins.ServerPlugin.start(ServerPlugin.java:195) at com.google.gerrit.server.plugins.PluginLoader.runPlugin(PluginLoader.java:523) at com.google.gerrit.server.plugins.PluginLoader.rescan(PluginLoader.java:444) at com.google.gerrit.server.plugins.PluginLoader.start(PluginLoader.java:344) at com.google.gerrit.lifecycle.LifecycleManager.start(LifecycleManager.java:95) at com.google.gerrit.pgm.Daemon.start(Daemon.java:433) at com.google.gerrit.pgm.Daemon.run(Daemon.java:319) at com.google.gerrit.pgm.util.AbstractProgram.main(AbstractProgram.java:62) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) at java.base/java.lang.reflect.Method.invoke(Method.java:565) at com.google.gerrit.launcher.GerritLauncher.invokeProgram(GerritLauncher.java:251) at com.google.gerrit.launcher.GerritLauncher.mainImpl(GerritLauncher.java:147) at com.google.gerrit.launcher.GerritLauncher.main(GerritLauncher.java:92) at Main.main(Main.java:30) Caused by: java.lang.NoClassDefFoundError: com/googlesource/gerrit/owners/api/OwnersAttentionSet at java.base/java.lang.ClassLoader.defineClass1(Native Method) at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:962) at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:144) at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:454) at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:367) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:557) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:490) at com.googlesource.gerrit.owners.common.AutoassignModule.<init>(AutoassignModule.java:40) at com.googlesource.gerrit.owners.common.AutoassignModule$$FastClassByGuice$$4c6cbc36.GUICE$TRAMPOLINE(<generated>) at com.googlesource.gerrit.owners.common.AutoassignModule$$FastClassByGuice$$4c6cbc36.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:300) at com.google.inject.internal.InjectorImpl$1.get(InjectorImpl.java:1148) ... 16 more Caused by: java.lang.ClassNotFoundException: com.googlesource.gerrit.owners.api.OwnersAttentionSet at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:377) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:557) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:490) ... 31 more

Not quite sure what's going on here, these were all grabbed from the same Jenkins job: https://gerrit-ci.gerritforge.com/job/plugin-owners-bazel-stable-3.14/10/

Cheers,

Winter M

unread,
Jul 14, 2026, 3:54:46 PM (7 days ago) Jul 14
to Repo and Gerrit Discussion
Ah, okay, `owners-api` is supposed to go in `lib/`. How is this handled in the post-monorepo world, does the plugin manager handle this automatically? Would a CL for better docs to this extent (as in, `owners-api` should go in `lib/`) be appreciated?

Luca Milanesio

unread,
Jul 14, 2026, 3:57:32 PM (7 days ago) Jul 14
to Repo and Gerrit Discussion, Luca Milanesio


> On 14 Jul 2026, at 20:54, 'Winter M' via Repo and Gerrit Discussion <repo-d...@googlegroups.com> wrote:
>
> Ah, okay, `owners-api` is supposed to go in `lib/`. How is this handled in the post-monorepo world, does the plugin manager handle this automatically? Would a CL for better docs to this extent (as in, `owners-api` should go in `lib/`) be appreciated?

You need to install the common api module [1] into the $GERRIT_SITE/lib, as you were doing with the API.

I agree that the documentation isn’t clear enough, feel free to send a change for improving it :-)

Luca.

[1] https://gerrit-ci.gerritforge.com/job/plugin-owners-common-api-bazel-master/lastSuccessfulBuild/artifact/bazel-bin/plugins/owners-common-api/owners-common-api.jar
> To view this discussion visit https://groups.google.com/d/msgid/repo-discuss/6fda656d-9128-4e24-8b5f-0b4ef5446c95n%40googlegroups.com.


Reply all
Reply to author
Forward
0 new messages