Hi Rasmus

Thanks for the details.

It's a little difficult to explain, but the agent code is actually
"bootstrapped" from the server when it starts. Basically your "agent
version" is actually just the version of a "bootstrapper" that talks to the
server, downloads the agent code that matches the server's version, and
then launches the "actual" agent using the same JVM as the bootstrapper.
That creates some complications with Java compatibility over time which you
are going through here due to breaking changes made in Java 16/17. In any
case, the issue is that your server version 21.3.0 has agent code that will
be dynamically bootstrapped to your agents that *will not work on Java
16-17 without tweaks to the agent config*.

Technically only agent bootstrapper + server 22.1.0 support running Java
16+: https://www.gocd.org/releases/#22-1-0

Having said that, it's not possible to get the exception as above with Java
8 and Java 11 (this exception is specific to Java 17) so when you were
trying to switch JVMs it's likely there is an issue and it's actually still
using the bundled Java 17. The agent bootstrapper does log the JVM at
startup IIRC so you should be able to see the version it thinks it is using.

For that specific server version your agent host would need to have Java
13-15 available (as documented <https://www.gocd.org/download/#redhat>)

In your specific case you have at least these options:

   1. ensure your *agent bootstrapper 22.1.0 is running with Java 13-15*
   without changing server version. Java 11 won't work with your chosen server
   version, even if you do correct it to use a different Java version.
   2. *upgrade server *to 21.4.0 (still with Java 15 on server) or 22.1.0
   (with any of Java 11-17 on server) *without changing* your agent
   bootstrapper version. The agent code bundled with 21.4.0+ should work fine
   under Java 17 with your agent bootstrapper.
   3. without changing any versions you mention above, use the instructions
   at https://github.com/gocd/gocd/issues/10265 to *modify your
   AGENT_STARTUP_ARGS* *to work with Java 17*. Note the instructions under "*If
   you experience other issues and downgrade your server to <= 21.3.0 while
   leaving agents running under a 22.1.0+ bootstrapper and Java 17 you are
   likely to get errors like these in your agents logs.*" which is your
   specific case.
   4. *upgrade server to 22.1.0 and run both server and agent under the
   default bundled JVM of Java 17*. This is probably the recommended path
   due to security issues that exist on 21.3.0 and 21.4.0, as well as moving
   back to LTS Java versions. There are no major functional changes between
   these versions and 22.1.0.


-Chad

On Thu, Apr 7, 2022 at 5:46 AM Rasmus M <[email protected]> wrote:

> Just as a followup,
>
> The current go-agent I have installed is version 22.1.0-13913:
>
> [root@mbv01 ~]# yum list --installed | grep gocd
> go-agent.noarch                             22.1.0-13913
>                                   @gocd
>
> While the server is running version v21.3.0.
>
> gocd_manager.1.djkifkhv5351@mbs01    | jvm 1    | [Wed Apr 06 16:47:28
> CEST 2022]            GoCD Version: 21.3.0-13067
> gocd_manager.1.djkifkhv5351@mbs01    | jvm 1    | [Wed Apr 06 16:47:28
> CEST 2022]            Java Version: 15.0.2
>
> Could the version difference between the client and the server be the
> cause of this?
>
> Best Regards
> Rasmus
> onsdag den 6. april 2022 kl. 19.35.14 UTC+2 skrev Rasmus M:
>
>> Hi there,
>>
>> I have a bit of an issue with the GoCD agent on a Rocky 8 x86
>> installation.
>>
>> Whenever I launch the systemd go-agent, the following exception is
>> produced in the /var/log/go-agent/go-agent.log file:
>>
>> 2022-04-06 19:32:44,065 ERROR [scheduler-1] AgentController:92 - [Agent
>> Loop] Error occurred during loop:
>> java.lang.reflect.InaccessibleObjectException: Unable to make field
>> private java.lang.String java.util.regex.Pattern.pattern accessible: module
>> java.base does not "opens java.util
>> .regex" to unnamed module @4e04a765
>>        at
>> java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(Unknown
>> Source)
>>        at
>> java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(Unknown
>> Source)
>>        at java.base/java.lang.reflect.Field.checkCanSetAccessible(Unknown
>> Source)
>>        at java.base/java.lang.reflect.Field.setAccessible(Unknown Source)
>>        at
>> com.google.gson.internal.reflect.UnsafeReflectionAccessor.makeAccessible(UnsafeReflectionAccessor.java:44)
>>
>>        at
>> com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:159)
>>
>>        at
>> com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
>>
>>        at com.google.gson.Gson.getAdapter(Gson.java:458)
>>        at
>> com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
>>
>>        at
>> com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
>>
>>        at
>> com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
>>
>>        at com.google.gson.Gson.getAdapter(Gson.java:458)
>>        at
>> com.google.gson.internal.bind.CollectionTypeAdapterFactory.create(CollectionTypeAdapterFactory.java:53)
>>
>>        at com.google.gson.Gson.getAdapter(Gson.java:458)
>>        at
>> com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
>>
>>        at
>> com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
>>
>>        at
>> com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
>>
>>        at com.google.gson.Gson.getDelegateAdapter(Gson.java:541)
>>        at
>> com.thoughtworks.go.remote.adapter.RuntimeTypeAdapterFactory.create(RuntimeTypeAdapterFactory.java:238)
>>
>>        at com.google.gson.Gson.getAdapter(Gson.java:458)
>>        at
>> com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
>>
>>        at
>> com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
>>
>>        at
>> com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
>>
>>        at com.google.gson.Gson.getAdapter(Gson.java:458)
>>        at
>> com.google.gson.internal.bind.CollectionTypeAdapterFactory.create(CollectionTypeAdapterFactory.java:53)
>>
>>        at com.google.gson.Gson.getAdapter(Gson.java:458)
>>        at
>> com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
>>
>>        at
>> com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
>>
>>        at
>> com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
>>
>>        at com.google.gson.Gson.getAdapter(Gson.java:458)
>>        at
>> com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
>>
>>        at
>> com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
>>
>>        at
>> com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
>>
>>        at com.google.gson.Gson.getAdapter(Gson.java:458)
>>        at
>> com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.createBoundField(ReflectiveTypeAdapterFactory.java:117)
>>
>>        at
>> com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.getBoundFields(ReflectiveTypeAdapterFactory.java:166)
>>
>>        at
>> com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.create(ReflectiveTypeAdapterFactory.java:102)
>>
>>        at com.google.gson.Gson.getDelegateAdapter(Gson.java:541)
>>        at
>> com.thoughtworks.go.remote.adapter.RuntimeTypeAdapterFactory.create(RuntimeTypeAdapterFactory.java:238)
>>
>>        at com.google.gson.Gson.getAdapter(Gson.java:458)
>>        at com.google.gson.Gson.fromJson(Gson.java:931)
>>        at com.google.gson.Gson.fromJson(Gson.java:897)
>>        at com.google.gson.Gson.fromJson(Gson.java:846)
>>        at com.google.gson.Gson.fromJson(Gson.java:817)
>>        at
>> com.thoughtworks.go.agent.RemotingClient.getWork(RemotingClient.java:79)
>>        at
>> com.thoughtworks.go.agent.AgentHTTPClientController.retrieveWork(AgentHTTPClientController.java:153)
>>
>>        at 
>> com.thoughtworks.go.agent.AgentHTTPClientController.work(AgentHTTPClientController.java:130)
>>
>>        at
>> com.thoughtworks.go.agent.AgentController.loop(AgentController.java:86)
>>        at jdk.internal.reflect.GeneratedMethodAccessor8.invoke(Unknown
>> Source)
>>        at
>> java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown
>> Source)
>>        at java.base/java.lang.reflect.Method.invoke(Unknown Source)
>>        at
>> org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65)
>>
>>        at
>> org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
>>
>>        at
>> java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown
>> Source)
>>        at java.base/java.util.concurrent.FutureTask.runAndReset(Unknown
>> Source)
>>        at
>> java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown
>> Source)
>>        at
>> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
>>        at
>> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown
>> Source)
>>        at java.base/java.lang.Thread.run(Unknown Source)
>>
>> The Rocky 8 VM is currently using Java 17:
>>
>> [root@mbv01 ~]# java --version
>> openjdk 17.0.2 2022-01-18 LTS
>> OpenJDK Runtime Environment 21.9 (build 17.0.2+8-LTS)
>> OpenJDK 64-Bit Server VM 21.9 (build 17.0.2+8-LTS, mixed mode, sharing)
>>
>> But I have also tried with java-8-openjdk and java-11-openjdk without it
>> having any effect on the produced Exception.
>>
>> Do you have any tips on how to resolve this?
>>
>> Best Regards
>> Rasmus
>>
> --
> You received this message because you are subscribed to the Google Groups
> "go-cd" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/go-cd/70bcb389-92e0-4fd8-9840-75ef0aa95dden%40googlegroups.com
> <https://groups.google.com/d/msgid/go-cd/70bcb389-92e0-4fd8-9840-75ef0aa95dden%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"go-cd" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/go-cd/CAA1RwH-NZfpspTVJ3QCCDu-KCGUJ9zcB_2Tx7dGctztG2iF-Pw%40mail.gmail.com.

Reply via email to