Page MenuHomePhabricator

Verify Jenkins Gearman plugin works with Java 17
Closed, ResolvedPublic

Description

As part of running Jenkins under Java 17 (T359795) we need to verify the Jenkins Gearman plugin ( https://github.com/jenkinsci/gearman-plugin/ ) works with it as well as the the Gearman protocol library it depends on ( https://gerrit.wikimedia.org/g/integration/gearman-java ). Last time I have discovered the 10+ years old code was aiming at Java 5 and ended up hitting a breaking change introduced in Java 11 (JDK-8200458 / T271683).

Event Timeline

The Jenkins plugin is maintained on the upstream GitHub organization, I have sent a patch to have CI test it with Java 17 instead of Java 8 https://github.com/jenkinsci/gearman-plugin/commit/41b31b5f2bc86a2133bf8021cb3cb4db982995e8 :

  buildPlugin(
	  platforms: ['linux'],
- 	jdkVersions: [8, 11],
+ 	jdkVersions: [11, 17],
  )

Unfortunately it failed at https://github.com/jenkinsci/gearman-plugin/runs/29251175597 due to:

[2024-08-26T12:16:51.377Z] [WARNING] The POM for org.wikimedia.gearman:gearman-java:jar:0.10 is missing, no dependency information available
build_log
[2024-08-26T12:16:40.634Z] + mvn --batch-mode --show-version --errors --no-transfer-progress --update-snapshots -Dmaven.repo.local=/home/jenkins/agent/workspace/earman-plugin_jenkinsfile-java17@tmp/m2repo -Dmaven.test.failure.ignore -Dspotbugs.failOnError=false -Dcheckstyle.failOnViolation=false -Dcheckstyle.failsOnError=false -Dpmd.failOnViolation=false -Penable-jacoco clean install
[2024-08-26T12:16:41.437Z] -XX:G1ConcRefinementThreads=4 -XX:GCDrainStackTargetSize=64 -XX:InitialHeapSize=261822272 -XX:MaxHeapSize=4189156352 -XX:+PrintCommandLineFlags -XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseG1GC 
[2024-08-26T12:16:42.842Z] Apache Maven 3.9.9 (8e8579a9e76f7d015ee5ec7bfcdc97d260186937)
[2024-08-26T12:16:42.842Z] Maven home: /home/jenkins/agent/tools/hudson.tasks.Maven_MavenInstallation/mvn
[2024-08-26T12:16:42.843Z] Java version: 11.0.24, vendor: Eclipse Adoptium, runtime: /opt/jdk-11
[2024-08-26T12:16:42.843Z] Default locale: en_US, platform encoding: UTF-8
[2024-08-26T12:16:42.844Z] OS name: "linux", version: "6.5.0-1025-azure", arch: "amd64", family: "unix"
[2024-08-26T12:16:44.348Z] [INFO] Error stacktraces are turned on.
[2024-08-26T12:16:44.349Z] [INFO] Scanning for projects...
[2024-08-26T12:16:48.963Z] [INFO] 
[2024-08-26T12:16:48.963Z] [INFO] ---------------< org.jenkins-ci.plugins:gearman-plugin >----------------
[2024-08-26T12:16:48.964Z] [INFO] Building Gearman Plugin 0.6.1-SNAPSHOT
[2024-08-26T12:16:48.964Z] [INFO]   from pom.xml
[2024-08-26T12:16:48.964Z] [INFO] --------------------------------[ hpi ]---------------------------------
[2024-08-26T12:16:49.069Z] [WARNING] Parameter 'showDeprecation' is unknown for plugin 'maven-hpi-plugin:3.17:validate (default-validate)'
[2024-08-26T12:16:49.069Z] [WARNING] Parameter 'showDeprecation' is unknown for plugin 'maven-hpi-plugin:3.17:validate-hpi (default-validate-hpi)'
[2024-08-26T12:16:49.070Z] [WARNING] Parameter 'showDeprecation' is unknown for plugin 'maven-hpi-plugin:3.17:insert-test (default-insert-test)'
[2024-08-26T12:16:49.070Z] [WARNING] Parameter 'showDeprecation' is unknown for plugin 'maven-hpi-plugin:3.17:test-hpl (default-test-hpl)'
[2024-08-26T12:16:49.071Z] [WARNING] Parameter 'showDeprecation' is unknown for plugin 'maven-hpi-plugin:3.17:resolve-test-dependencies (default-resolve-test-dependencies)'
[2024-08-26T12:16:49.171Z] [WARNING] Parameter 'showDeprecation' is unknown for plugin 'maven-hpi-plugin:3.17:hpi (default-hpi)'
[2024-08-26T12:16:51.377Z] [WARNING] The POM for org.wikimedia.gearman:gearman-java:jar:0.10 is missing, no dependency information available
[2024-08-26T12:17:02.502Z] [INFO] ------------------------------------------------------------------------
[2024-08-26T12:17:02.502Z] [INFO] BUILD FAILURE
[2024-08-26T12:17:02.502Z] [INFO] ------------------------------------------------------------------------
[2024-08-26T12:17:02.503Z] [INFO] Total time:  18.180 s
[2024-08-26T12:17:02.503Z] [INFO] Finished at: 2024-08-26T12:17:02Z
[2024-08-26T12:17:02.503Z] [INFO] ------------------------------------------------------------------------
[2024-08-26T12:17:02.504Z] [ERROR] Failed to execute goal on project gearman-plugin: Could not resolve dependencies for project org.jenkins-ci.plugins:gearman-plugin:hpi:0.6.1-SNAPSHOT
[2024-08-26T12:17:02.504Z] [ERROR] dependency: org.wikimedia.gearman:gearman-java:jar:0.10 (compile)
[2024-08-26T12:17:02.504Z] [ERROR] 	Could not find artifact org.wikimedia.gearman:gearman-java:jar:0.10 in azure-internal (http://artifact-caching-proxy.privatelink.azurecr.io:8080/)
[2024-08-26T12:17:02.505Z] [ERROR] -> [Help 1]
[2024-08-26T12:17:02.505Z] org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal on project gearman-plugin: Could not resolve dependencies for project org.jenkins-ci.plugins:gearman-plugin:hpi:0.6.1-SNAPSHOT
[2024-08-26T12:17:02.505Z] dependency: org.wikimedia.gearman:gearman-java:jar:0.10 (compile)
[2024-08-26T12:17:02.506Z] 	Could not find artifact org.wikimedia.gearman:gearman-java:jar:0.10 in azure-internal (http://artifact-caching-proxy.privatelink.azurecr.io:8080/)
[2024-08-26T12:17:02.506Z] 
[2024-08-26T12:17:02.506Z]     at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies (LifecycleDependencyResolver.java:243)
[2024-08-26T12:17:02.506Z]     at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies (LifecycleDependencyResolver.java:136)
[2024-08-26T12:17:02.507Z]     at org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved (MojoExecutor.java:355)
[2024-08-26T12:17:02.507Z]     at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:313)
[2024-08-26T12:17:02.507Z]     at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
[2024-08-26T12:17:02.508Z]     at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
[2024-08-26T12:17:02.508Z]     at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
[2024-08-26T12:17:02.508Z]     at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
[2024-08-26T12:17:02.508Z]     at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
[2024-08-26T12:17:02.509Z]     at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
[2024-08-26T12:17:02.509Z]     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
[2024-08-26T12:17:02.509Z]     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
[2024-08-26T12:17:02.510Z]     at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
[2024-08-26T12:17:02.510Z]     at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
[2024-08-26T12:17:02.510Z]     at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
[2024-08-26T12:17:02.510Z]     at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
[2024-08-26T12:17:02.511Z]     at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
[2024-08-26T12:17:02.511Z]     at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906)
[2024-08-26T12:17:02.511Z]     at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
[2024-08-26T12:17:02.511Z]     at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
[2024-08-26T12:17:02.511Z]     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
[2024-08-26T12:17:02.512Z]     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
[2024-08-26T12:17:02.512Z]     at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
[2024-08-26T12:17:02.512Z]     at java.lang.reflect.Method.invoke (Method.java:566)
[2024-08-26T12:17:02.512Z]     at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:255)
[2024-08-26T12:17:02.513Z]     at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:201)
[2024-08-26T12:17:02.513Z]     at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:361)
[2024-08-26T12:17:02.513Z]     at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:314)
[2024-08-26T12:17:02.513Z] Caused by: org.apache.maven.project.DependencyResolutionException: Could not resolve dependencies for project org.jenkins-ci.plugins:gearman-plugin:hpi:0.6.1-SNAPSHOT
[2024-08-26T12:17:02.513Z] dependency: org.wikimedia.gearman:gearman-java:jar:0.10 (compile)
[2024-08-26T12:17:02.514Z] 	Could not find artifact org.wikimedia.gearman:gearman-java:jar:0.10 in azure-internal (http://artifact-caching-proxy.privatelink.azurecr.io:8080/)
[2024-08-26T12:17:02.514Z] 
[2024-08-26T12:17:02.514Z]     at org.apache.maven.project.DefaultProjectDependenciesResolver.resolve (DefaultProjectDependenciesResolver.java:191)
[2024-08-26T12:17:02.515Z]     at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.getDependencies (LifecycleDependencyResolver.java:224)
[2024-08-26T12:17:02.515Z]     at org.apache.maven.lifecycle.internal.LifecycleDependencyResolver.resolveProjectDependencies (LifecycleDependencyResolver.java:136)
[2024-08-26T12:17:02.515Z]     at org.apache.maven.lifecycle.internal.MojoExecutor.ensureDependenciesAreResolved (MojoExecutor.java:355)
[2024-08-26T12:17:02.515Z]     at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:313)
[2024-08-26T12:17:02.515Z]     at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
[2024-08-26T12:17:02.516Z]     at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
[2024-08-26T12:17:02.516Z]     at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
[2024-08-26T12:17:02.516Z]     at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
[2024-08-26T12:17:02.516Z]     at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
[2024-08-26T12:17:02.516Z]     at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
[2024-08-26T12:17:02.516Z]     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
[2024-08-26T12:17:02.517Z]     at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
[2024-08-26T12:17:02.517Z]     at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
[2024-08-26T12:17:02.518Z]     at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
[2024-08-26T12:17:02.518Z]     at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
[2024-08-26T12:17:02.518Z]     at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
[2024-08-26T12:17:02.518Z]     at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
[2024-08-26T12:17:02.518Z]     at org.apache.maven.cli.MavenCli.execute (MavenCli.java:906)
[2024-08-26T12:17:02.519Z]     at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:283)
[2024-08-26T12:17:02.519Z]     at org.apache.maven.cli.MavenCli.main (MavenCli.java:206)
[2024-08-26T12:17:02.519Z]     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
[2024-08-26T12:17:02.519Z]     at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
[2024-08-26T12:17:02.520Z]     at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
[2024-08-26T12:17:02.520Z]     at java.lang.reflect.Method.invoke (Method.java:566)
[2024-08-26T12:17:02.520Z]     at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:255)
[2024-08-26T12:17:02.520Z]     at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:201)
[2024-08-26T12:17:02.521Z]     at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:361)
[2024-08-26T12:17:02.521Z]     at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:314)
[2024-08-26T12:17:02.521Z] [ERROR] 
[2024-08-26T12:17:02.521Z] [ERROR] Re-run Maven using the -X switch to enable full debug logging.
[2024-08-26T12:17:02.521Z] [ERROR] 
[2024-08-26T12:17:02.522Z] [ERROR] For more information about the errors and possible solutions, please read the following articles:
[2024-08-26T12:17:02.522Z] [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException

The reason is the Gearman Java library ( hosted at https://gerrit.wikimedia.org/g/integration/gearman-java ) was released on https://archiva.wikimedia.org/ which now yields 404 for requests. It apparently has been decommissioned with no back compatibility archive

Change #1068709 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/gearman-java@master] pom: ignore 'missing' javadoc added by Java 17

https://gerrit.wikimedia.org/r/1068709

Change #1068730 had a related patch set uploaded (by Hashar; author: Hashar):

[integration/config@master] Add Java 17 to integration/gearman-java

https://gerrit.wikimedia.org/r/1068730

Change #1068730 merged by jenkins-bot:

[integration/config@master] Add Java 17 to integration/gearman-java

https://gerrit.wikimedia.org/r/1068730

Change #1068709 merged by jenkins-bot:

[integration/gearman-java@master] pom: add Java 17 javadoc support

https://gerrit.wikimedia.org/r/1068709

I have positively tested the Gearman plugin under Java 17.

I have started the C language Gearman server (sudo apt install gearman-job-server).

Ran Jenkins from a clone of https://github.com/jenkinsci/gearman-plugin/ (the extra option is for T133737):

mvn -Dhudson.model.ParametersAction.keepUndefinedParameters=true hpi:run

I have created a Freestyle job named freestyle which runs a single shell script:

echo "It works"
/usr/bin/env|egrep ^ZUUL

I can see the Jenkins jobs have been registered as Gearman fuctions:

$ gearadmin --workers
38 127.0.0.1 172.16.0.1_exec-1 : build:freestyle
39 127.0.0.1 172.16.0.1_manager : set_description:172.16.0.1 stop:172.16.0.1
40 127.0.0.1 172.16.0.1_exec-0 : build:freestyle
.

Then I trigger a build:

$ gearman -s -f build:freestyle '{"ZUUL_UUID":"xb1911"}'
number":11,"node_labels":["built-in"],"manager":"172.16.0.1","name":"freestyle","node_name":"","worker":"172.16.0.1_exec-1"}9% Complete
{"result":"SUCCESS","number":11,"node_labels":["built-in"],"manager":"172.16.0.1","name":"freestyle","node_name":"","worker":"172.16.0.1_exec-1"}

And the job output ends with:

+ /usr/bin/env
+ egrep ^ZUUL
ZUUL_UUID=xb1911
Finished: SUCCESS

I am keeping this open since I'd like to polish up:

gearman-java to be buildable under Java 17

The only fixed needed was Javadoc https://gerrit.wikimedia.org/r/c/integration/gearman-java/+/1068709

The Gearman plugin https://github.com/jenkinsci/gearman-plugin/pull/18

I have merged that and I have released version 0.7.0 of the plugin using:

mvn release:perform -Darguments="-DskipTests -Dfindbugs.skip=true -Dspotbugs.skip=true" -DskipTests -Dfindbugs.skip=true -Dspotbugs.skip=true

(tests take time, spotbugs has some pending failures)

I have published the release on GitHub https://github.com/jenkinsci/gearman-plugin/releases/tag/gearman-plugin-0.7.0

Those are not strictly needed, it was done merely in order to build both projects with Java 17. The actual testing happened above ( T373351#10109757 )