“ exclude on JDK17, include on 11”

At this point we do not support that setup, yes

On Thu, 24 Mar 2022 at 12:43, Josh McKenzie <jmcken...@apache.org> wrote:

> if we go for Java 17 this means we bump to 5.0 instead of 4.1 at least
> because we will remove the already deprecated scripted UDFs and this is
> breaking change.
>
> Ah. I assumed optionality on build (exclude on JDK17, include on 11). If
> that's not possible then yeah, 5.0 would make more sense.
>
> On Thu, Mar 24, 2022, at 12:39 PM, Ekaterina Dimitrova wrote:
>
> Thank you Josh, I definitely share the excitement but I also want to bring
> a few more things.
>
> " Having a new section in the build.xml for JDK17 runtime env w/more
> --add-exports and --add-opens is consistent with how we got jdk11 support
> working (and run it to this day looks like). It's worth considering if we
> want to move away from this paradigm eventually but if it comes down to
> "super experimental JDK17 support in 4.1 vs. tackling this now", I'd
> *personally* advocate for the former."
> My biggest worry is that the temporary decisions are the most permanent
> ones. We shouldn't let it slip in time. It might be a bigger problem in the
> long term.
>
> About the dependencies - my understanding from our latest mail threads is
> there is a plan directly to go for beta version in about a month; there is
> no concrete plan I've heard of for performance testing for example. Even if
> we carefully revise the changelogs I bet there will be things not written
> there. Now on the other hand if we go for Java 17 this means we bump to 5.0
> instead of 4.1 at least because we will remove the already deprecated
> scripted UDFs and this is breaking change.
>
> Also, our review cycles of bigger sensitive works tend to be long for a
> good reason. I am not even sure who will want to do the reviews.
>
> Instead of rushing it into this release, do we want instead a feature
> branch for now if we want it out there super experimental so people can
> have easy access for testing and visibility/awareness?
>
>
> On Wed, Mar 23, 2022 at 3:02 PM Josh McKenzie <jmcken...@apache.org>
> wrote:
>
>
> My .02 (Ekaterina and I have been chatting on slack about this a bit):
>
> Having a new section in the build.xml for JDK17 runtime env w/more
> --add-exports and --add-opens is consistent with how we got jdk11 support
> working (and run it to this day looks like). It's worth considering if we
> want to move away from this paradigm eventually but if it comes down to
> "super experimental JDK17 support in 4.1 vs. tackling this now", I'd
> *personally* advocate for the former.
>
> For updating our dependencies, it's going to be a balance between needing
> to support newer JDK's (and older JDK's going out of support) and
> introducing risk to our runtime env by updating dependencies for JDK's that
> aren't yet formally supported. I think we're always going to have tension
> where the newest supported JDK is going to introduce dependency upgrade
> requirements that will "force" updates to things that the oldest JDK
> doesn't strictly need, and in this case it happens to be for a JDK we won't
> officially support yet.
>
> I'd be in favor of the exercise of updating our dependencies as required
> to have bleeding edge experimental support for JDK 17 in 4.1 (i.e. "tests
> run with it and don't necessarily pass, we don't recommend you use it in
> production") with the motion Scott mentioned about changelog validation.
>
> Having a little more rigor around how and when we do this as a project
> (i.e. start validating new JDK at point N in lifecycle of oldest supported
> falling out of support, upgrade dependencies to make new JDK M work,
> validate those new dependency additions by doing behavior O) would probably
> be pretty wise. This is something we've done multiple times in the past and
> will need to keep doing into the future.
>
> Thanks for all the hard work on this Ekaterina!
>
> ~Josh
>
>
> On Wed, Mar 23, 2022, at 11:31 AM, Ekaterina Dimitrova wrote:
>
> Thank you for your quick response Scott.
>
> I agree on all points you made. Also, with our current setup the
> dependencies updates would affect the stable Java 11. We cannot afford to
> not consider potential changes in behavior, performance, etc
> But also we should work on potential blockers and not leave the dependency
> to atrophy.
>
> On Wed, 23 Mar 2022 at 11:07, C. Scott Andreas <sc...@paradoxica.net>
> wrote:
>
> Ekaterina, thank you very much for sharing this!
>
> I admit, it’s much more involved than I expected to be.
>
> The —add-opens and —add-exports flags seem suitable for development and
> perhaps experimental support, but we’ll probably want to make changes to
> remove as many as we can before considering JDK17 suitable for general use.
>
> Updating dependencies will be good for general hygiene, but it would also
> be important for us to scan changelogs for the intervening versions of each
> we’re upgrading to flag any unexpected behavior changes that may impact
> Cassandra or which the community might want to know about.
>
> Thank you for working to get Cassandra launching on JDK17. Excited for
> what’s ahead.
>
> — Scott
>
> On Mar 23, 2022, at 7:58 AM, Ekaterina Dimitrova <e.dimitr...@gmail.com>
> wrote:
>
> 
>
> Hi everyone,
>
> Looking into our way to Java 17, I wanted to share with the community
> findings/thoughts and align on course of action.
>
> We already deprecated scripted UDFs so we can remove them when the time to
> switch from Java8&11 to Java 11&17 comes. I removed the ant script tasks
> and created custom ant tasks to workaround the need of Nashorn. Ant is also
> upgraded now on trunk.
>
> With this Cassandra trunk compiles with warnings about the Security
> manager being deprecated and other security deprecation warnings(I mention
> it for awareness here).
> I pushed to my personal docker hub account a version of our testing image
> that has Java 17 installed and I worked on the build file, shell scripts
> and config to push testing with Java 17 to CircleCI.
>
> To just start Cassandra out of the box on Java 17 we also need as a least
> minimum to add the following, further to what we already open in Java 11:
>
> *--add-opens java.base/sun.nio.ch <http://sun.nio.ch/>=ALL-UNNAMED*
>
> *--add-opens java.base/java.io <http://java.io/>=ALL-UNNAMED*
>
> *--add-opens java.base/java.util.concurrent=ALL-UNNAMED*
>
> *--add-opens java.base/java.util=ALL-UNNAMED*
>
> *--add-opens java.base/java.util.concurrent.atomic=ALL-UNNAMED*
>
> *--add-opens java.base/java.nio=ALL-UNNAMED*
>
> *--add-opens java.base/java.lang=ALL-UNNAMED*
>
>
> *--add-exports java.base/sun.nio.ch <http://sun.nio.ch/>=ALL-UNNAMED*
>
> *--add-exports java.base/java.io <http://java.io/>=ALL-UNNAMED*
>
> *--add-exports java.base/java.util.concurrent=ALL-UNNAMED*
>
> *--add-exports java.base/java.util=ALL-UNNAMED*
>
> *--add-exports java.base/java.util.concurrent.atomic=ALL-UNNAMED*
>
> *--add-exports java.base/java.nio=ALL-UNNAMED*
>
> *--add-exports java.base/java.lang=ALL-UNNAMED*
>
> This is a quick run of *jdeps -jdkinternals --multi-release 17
> apache-cassandra-4.1-SNAPSHOT.jar.*:
>
> *   apache-cassandra-4.1-SNAPSHOT.jar -> java.rmi*
>
> *   apache-cassandra-4.1-SNAPSHOT.jar -> jdk.unsupported*
>
> *   org.apache.cassandra.io.util.Memory                -> sun.misc.Unsafe
>                                   JDK internal API (jdk.unsupported)*
>
> *   org.apache.cassandra.utils.FastByteOperations$UnsafeOperations ->
> sun.misc.Unsafe                                    JDK internal API
> (jdk.unsupported)*
>
> *   org.apache.cassandra.utils.FastByteOperations$UnsafeOperations$1 ->
> sun.misc.Unsafe                                    JDK internal API
> (jdk.unsupported)*
>
> *   org.apache.cassandra.utils.JMXServerUtils$JmxRegistry ->
> sun.rmi.registry.RegistryImpl                      JDK internal API
> (java.rmi)*
>
> *   org.apache.cassandra.utils.memory.MemoryUtil       -> sun.misc.Unsafe
>                                   JDK internal API (jdk.unsupported)*
>
>
> *Warning: JDK internal APIs are unsupported and private to JDK
> implementation that are*
>
> *subject to be removed or changed incompatibly and could break your
> application.*
>
> *Please modify your code to eliminate dependence on any JDK internal APIs.*
> *For the most recent update on JDK internal API replacements, please
> check: *
>
> *https://wiki.openjdk.java.net/display/JDK8/Java+Dependency+Analysis+Tool
> <https://wiki.openjdk.java.net/display/JDK8/Java+Dependency+Analysis+Tool>*
>
> Also a quick workaround I applied for test purposes in order to be able to
> run the in-jvm tests can be seen here[4], and I assume something like that
> is also needed for the simulator and other places which I went ahead and
> changed in order just to unblock the preliminary testing so we can get the
> full picture. To be revised later.
> This was the issue we were hitting:
> java.lang.RuntimeException: java.lang.NoSuchFieldException: modifiers at
> org.apache.cassandra.distributed.impl.Instance.lambda$startup$11(Instance.java:691)
> at org.apache.cassandra.concurrent.FutureTask$1.call(FutureTask.java:81) at
> org.apache.cassandra.concurrent.FutureTask.call(FutureTask.java:47) at
> org.apache.cassandra.concurrent.FutureTask.run(FutureTask.java:57) at
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
> at
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
> at
> io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
> at java.base/java.lang.Thread.run(Thread.java:833) Caused by:
> java.lang.NoSuchFieldException: modifiers at
> java.base/java.lang.Class.getDeclaredField(Class.java:2610) at
> org.apache.cassandra.net.Verb.unsafeSetSerializer(Verb.java:366) at
> org.apache.cassandra.distributed.impl.Instance.lambda$startup$11(Instance.java:612)
>
> To fire testing I used some config suggested by Jonathan Shook which he
> used for testing with Java 16 some time ago[1]. We will need to tune it,
> those were used to do preliminary work and initial investigations only.
>
> One important topic I want to bring to the community's attention is our
> dependency management. [2] is a discussion we had a long time ago when I
> joined the project. So is it correct to say for Java 17 we don't update
> anything if there is no immediate need (and this considers only trunk of
> course)?  In my branch I updated bytebuddy, asm, chronicle queues, byteman,
> mockito, jacoco, ecj, sjk so far.
>
> Based on feedback from CASSANDRA-17392 I tried to update netty and run our
> tests with Java 17 and I ran into *java.lang.ClassCastException: class
> org.apache.cassandra.utils.memory.BufferPool$Chunk cannot be cast to class
> sun.nio.ch.DirectBuffer* . I didn't have the chance to investigate it but
> it is on our table so good to be mentioned.
>
> Even with the update of Chronicle queues[3] we still have to add for
> FQLtool and AuditLogging:
> --add-opens=java.base/java.lang.reflect=ALL-UNNAMED \
> --add-exports=java.base/jdk.internal.ref=ALL-UNNAMED \
> --add-exports=java.base/sun.nio.ch=ALL-UNNAMED \
> --add-exports=jdk.unsupported/sun.misc=ALL-UNNAMED \
> --add-exports=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED \
> --add-opens=jdk.compiler/com.sun.tools.javac=ALL-UNNAMED \
> --add-opens=java.base/java.lang=ALL-UNNAMED \
> --add-opens=java.base/java.lang.reflect=ALL-UNNAMED \
> --add-opens=java.base/java.io=ALL-UNNAMED \
> --add-opens=java.base/java.util=ALL-UNNAMED\
> After that, from what I saw there is only one type of failure related to
> those tools to be investigated that cannot be fixed directly with some
> other internals opening.
>
> I also updated Jolokia in the DTest repo which seemed to solve any Jolokia
> related problems, at least our tests are not failing due to Jolokia related
> problems from what I saw so far but officially I see Jolokia builds running
> on JDK 8, 9, and 11. I didn't find any info around Java 17 and Jolokia so
> far.
>
> These are a few of the things we hit now, so I wanted to mention in order
> to give you an idea of the direction the things are going.
>
> So I am interested to hear any comments, particularly on our approach to
> dependencies updates as a project. Also, how much are we willing to extend
> the usage of --add-opens and --add-exports at this moment? The
> Java community recommendation is this to be our last option. We have some
> dependencies which still do not officially support Java 17 or which are not
> even fully tested with Java 17. Some of them will work out of the box, some
> will need more internals to be opened maybe or some other actions to be
> taken, I still don't know the answers to all failures I see and sometimes I
> fix one but another one appears. There are moving parts and I also didn't
> go ahead and update all dependencies based on the previous discussions. (I
> also saw that when Java 11 was introduced we didn't update all
> dependencies?) All of this is only to be able to bring our CI to some
> stable condition on Java 17 as a starting point and get an idea of what is
> needed.
>
> Also, I guess soon we can join the OpenJDK Quality Outreach program[5]
> suggested before as we get more details that can be already discussed. I
> can go ahead and do it if no one is against it, the contact can be just our
> dev-mailing list I guess.
>
> [1]https://jaxenter.com/apache-cassandra-java-174575.html
> [2]https://lists.apache.org/thread/l1ch2ffcnv2m5l9tp9mpvgzwlvx667sd
> [3]https://chronicle.software/chronicle-support-java-17/
> [4]
> https://github.com/apache/cassandra/commit/4daf0b149bc1524dfb2212ab958f4d45feb79577
> [5]https://wiki.openjdk.java.net/display/quality/Quality+Outreach
>
> Ekaterina Dimitrova
>
>
>
>

Reply via email to