[ 
https://issues.apache.org/jira/browse/FLINK-36646?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17894829#comment-17894829
 ] 

Thomas Cooper commented on FLINK-36646:
---------------------------------------

We could set the {{env.java.default-opts.all}} option in the operator's [base 
config 
file|https://github.com/apache/flink-kubernetes-operator/blob/main/helm/flink-kubernetes-operator/conf/flink-conf.yaml]
 to the flink config's {{add-export}} and {{add-open}} opts?

That would allow users to add additional {{env.java.opts.all}} to their jobs. 
As we are using {{-XX:IgnoreUnrecognizedVMOptions}}, this should be fine for 
JDK 8 and JDK 11 based images as well.

> Support Java 17+ job images more conveniently in the operator
> -------------------------------------------------------------
>
>                 Key: FLINK-36646
>                 URL: https://issues.apache.org/jira/browse/FLINK-36646
>             Project: Flink
>          Issue Type: Improvement
>          Components: Kubernetes Operator
>            Reporter: Rob Young
>            Priority: Major
>
> Currently if I execute the operator quickstart (for operator 1.10.0) , but 
> change the FlinkDeployment image to one of the official java17 based images 
> like `flink:1.20.0-scala_2.12-java17`:
> {code:java}
> apiVersion: flink.apache.org/v1beta1
> kind: FlinkDeployment
> metadata:
>   name: basic-example
> spec:
>   image: flink:1.20.0-scala_2.12-java17
>   flinkVersion: v1_20
>   flinkConfiguration:
>     taskmanager.numberOfTaskSlots: "2"
>   serviceAccount: flink
>   jobManager:
>     resource:
>       memory: "2048m"
>       cpu: 1
>   taskManager:
>     resource:
>       memory: "2048m"
>       cpu: 1
>   job:
>     jarURI: local:///opt/flink/examples/streaming/StateMachineExample.jar
>     parallelism: 2
>     upgradeMode: stateless {code}
> then the application fails with exception, eventually caused by:
> {code:java}
> aused by: java.lang.reflect.InaccessibleObjectException: Unable to make field 
> private final java.util.Map java.util.Collections$UnmodifiableMap.m 
> accessible: module java.base does not "opens java.util" to unnamed module 
> @21a947fe
>     at java.lang.reflect.AccessibleObject.checkCanSetAccessible(Unknown 
> Source) ~[?:?]
>     at java.lang.reflect.AccessibleObject.checkCanSetAccessible(Unknown 
> Source) ~[?:?]
>     at java.lang.reflect.Field.checkCanSetAccessible(Unknown Source) ~[?:?]
>     at java.lang.reflect.Field.setAccessible(Unknown Source) ~[?:?]
>     at 
> org.apache.flink.streaming.runtime.translators.DataStreamV2SinkTransformationTranslator.registerSinkTransformationTranslator(DataStreamV2SinkTransformationTranslator.java:104)
>  ~[flink-dist-1.20.0.jar:1.20.0]
>     at 
> org.apache.flink.datastream.impl.ExecutionEnvironmentImpl.<clinit>(ExecutionEnvironmentImpl.java:96)
>  ~[flink-dist-1.20.0.jar:1.20.0]
>     at 
> org.apache.flink.client.ClientUtils.executeProgram(ClientUtils.java:109) 
> ~[flink-dist-1.20.0.jar:1.20.0]
>     at 
> org.apache.flink.client.deployment.application.ApplicationDispatcherBootstrap.runApplicationEntryPoint(ApplicationDispatcherBootstrap.java:301)
>  ~[flink-dist-1.20.0.jar:1.20.0]
>     at 
> org.apache.flink.client.deployment.application.ApplicationDispatcherBootstrap.lambda$runApplicationAsync$2(ApplicationDispatcherBootstrap.java:254)
>  ~[flink-dist-1.20.0.jar:1.20.0]
>     at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) 
> ~[?:?]
>     at java.util.concurrent.FutureTask.run(Unknown Source) ~[?:?]
>     at 
> org.apache.flink.runtime.concurrent.pekko.ActorSystemScheduledExecutorAdapter$ScheduledFutureTask.run(ActorSystemScheduledExecutorAdapter.java:172)
>  ~[?:?]
>     at 
> org.apache.flink.runtime.concurrent.ClassLoadingUtils.runWithContextClassLoader(ClassLoadingUtils.java:68)
>  ~[flink-dist-1.20.0.jar:1.20.0]
>     at 
> org.apache.flink.runtime.concurrent.ClassLoadingUtils.lambda$withContextClassLoader$0(ClassLoadingUtils.java:41)
>  ~[flink-dist-1.20.0.jar:1.20.0]
>     ... 7 more {code}
> the user can fix this by setting:
> {code:java}
>     env.java.opts.all: "--add-exports=java.base/sun.net.util=ALL-UNNAMED 
> --add-exports=java.rmi/sun.rmi.registry=ALL-UNNAMED 
> --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED 
> --add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED 
> --add-exports=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED 
> --add-exports=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED 
> --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED 
> --add-exports=java.security.jgss/sun.security.krb5=ALL-UNNAMED 
> --add-opens=java.base/java.lang=ALL-UNNAMED 
> --add-opens=java.base/java.net=ALL-UNNAMED 
> --add-opens=java.base/java.io=ALL-UNNAMED 
> --add-opens=java.base/java.nio=ALL-UNNAMED 
> --add-opens=java.base/sun.nio.ch=ALL-UNNAMED 
> --add-opens=java.base/java.lang.reflect=ALL-UNNAMED 
> --add-opens=java.base/java.text=ALL-UNNAMED 
> --add-opens=java.base/java.time=ALL-UNNAMED 
> --add-opens=java.base/java.util=ALL-UNNAMED 
> --add-opens=java.base/java.util.concurrent=ALL-UNNAMED 
> --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED 
> --add-opens=java.base/java.util.concurrent.locks=ALL-UNNAMED"{code}
> in the FlinkDeployment flinkConfiguration, matching the [default 
> configuration from the flink binary 
> distribution|https://github.com/apache/flink/blob/b1fe7b4099497f02b4658df7c3de8e45b62b7e21/flink-dist/src/main/resources/config.yaml#L24]
> It would be cool if you could use Java 17+ based job images without having to 
> set this up and the operator or flink shell scripts could set this up for you.
> From flink 1.18 the config.sh script is setting 
> `-XX:IgnoreUnrecognizedVMOptions` so it would appear safe to redundantly set 
> these JVM params for Flink 1_18\{+}. Maybe if there is no user-supplied 
> `env.java.opts.all` the operator could set it, else append them to the 
> user-supplied opts.
> I'm wondering if this should be a core flink responsibility though, maybe 
> `config.sh` could set these parameters, recent versions of config.sh are 
> already [sniffing for JVM 
> 17+|https://github.com/apache/flink/blob/b1fe7b4099497f02b4658df7c3de8e45b62b7e21/flink-dist/src/main/flink-bin/bin/config.sh#L288]
>  so that it can set `-Djava.security.manager=allow`, maybe it would be 
> appropriate for it to also set the add-opens up too?



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to