Hi Julian,

I don't think it's necessary to require JDK > 8. Here is what I propose:

1) I can add a gradle task to make sure each classfile from the release
jars are valid bytecode.

2) I think we need to make sure we compile with the latest build available.
Per https://lists.apache.org/thread/nrt4ysoc14p20sq23z744jyfqh1bznyh it was
compiled with 8u371 the 10 of November 2023. At the time the latest build
of java 8 was 391, so that's 2 builds behind:

371 > 18 April 2023
381 > 18 July 2023
391 > 17 October 2023
401 > 16 January 2024

I can't be sure that this was the root cause for the broken classfile.

3) Let's make the release procedure automatic / part of the CI. I can
assist on this task, but I will need help from commiters since I don't
have any credentials for maven central.

Guillaume


On Fri, Jan 26, 2024 at 2:44 PM Julian Hyde <jhyde.apa...@gmail.com> wrote:

> These JDK bugs seem to be fixed in more recent java versions. Should we
> mandate that releases are built on a recent JDK (say 17 or 21)? Currently
> we mandate JDK 8.
>
>
> > On Jan 26, 2024, at 9:03 AM, Ruben Q L <rube...@gmail.com> wrote:
> >
> > I have the impression that this might be caused by a bug in the JDK, see
> > similar issues:
> > https://gitlab.ow2.org/asm/asm/-/issues/317789
> > https://bugs.openjdk.org/browse/JDK-8144185
> > https://bugs.openjdk.org/browse/JDK-8187805
> >
> >
> >
> > On Thu, Dec 21, 2023 at 8:58 PM Julian Hyde <jh...@apache.org> wrote:
> >
> >> I think I was mistaken about Guava. I agree with Benchao's analysis
> >> and #2 seems to be caused by something other than Guava.
> >>
> >> On Thu, Dec 21, 2023 at 3:53 AM Benchao Li <libenc...@apache.org>
> wrote:
> >>>
> >>> There are two exceptions here:
> >>>
> >>> # 1
> >>> java.lang.ArrayIndexOutOfBoundsException: Index 65536 out of bounds
> >>> for length 297
> >>> at org.objectweb.asm.ClassReader.readLabel(ClassReader.java:2695)
> >>> at org.objectweb.asm.ClassReader.createLabel(ClassReader.java:2711)
> >>> at
> >> org.objectweb.asm.ClassReader.readTypeAnnotations(ClassReader.java:2777)
> >>> at org.objectweb.asm.ClassReader.readCode(ClassReader.java:1929)
> >>> at org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1515)
> >>> at org.objectweb.asm.ClassReader.accept(ClassReader.java:745)
> >>> at org.objectweb.asm.ClassReader.accept(ClassReader.java:425)
> >>> at remapper.bug.RemapperTest.runTest(RemapperTest.java:60)
> >>> at remapper.bug.RemapperTest.calcite36(RemapperTest.java:36)
> >>>
> >>> # 2
> >>> java.lang.IllegalArgumentException: Invalid end label (must be visited
> >> first)
> >>> at
> >>
> org.objectweb.asm.util.CheckMethodAdapter.checkLabel(CheckMethodAdapter.java:1453)
> >>> at
> >>
> org.objectweb.asm.util.CheckMethodAdapter.visitLocalVariableAnnotation(CheckMethodAdapter.java:996)
> >>> at
> >>
> org.objectweb.asm.MethodVisitor.visitLocalVariableAnnotation(MethodVisitor.java:757)
> >>> at
> >>
> org.objectweb.asm.commons.MethodRemapper.visitLocalVariableAnnotation(MethodRemapper.java:257)
> >>> at org.objectweb.asm.ClassReader.readCode(ClassReader.java:2614)
> >>> at org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1515)
> >>> at org.objectweb.asm.ClassReader.accept(ClassReader.java:745)
> >>> at org.objectweb.asm.ClassReader.accept(ClassReader.java:425)
> >>> at remapper.bug.RemapperTest.runTest(RemapperTest.java:53)
> >>> at remapper.bug.RemapperTest.calcite36WithCheck(RemapperTest.java:39)
> >>>
> >>>
> >>> Sorry that I'm not clear in my previous email. My testing results are
> >>> all about #1.
> >>>
> >>> I tested 1.34.0/1.35.0/1.36.0 with JDK8 on both Linux and Mac for #2,
> >>> they all reproduced the problem. Hence this is not a problem of
> >>> platform, and also not a problem of 1.35.0->1.36.0, I guess this is an
> >>> asm usage problem related to JDK8's output.
> >>>
> >>> In summary,
> >>> for #1 problem, it seems to be a problem of the Guava version we're
> >>> compiling against,
> >>> for #2 problem, it seems not to be a problem since both
> >>> 1.34.0/1.35.0/1.36.0 can reproduce it (I assume that this does not
> >>> affect your usage since you only spotted this after 1.36.0).
> >>>
> >>> Guillaume Masse <masse.guilla...@narrative.io.invalid> 于2023年12月21日周四
> >> 03:29写道:
> >>>>
> >>>> calcite-1.35.0 with JDK8(1.8.0_391) on MacOS with M1 Pro chip: can
> >> reproduce
> >>>>
> >>>> RemapperTest > calcite35WithCheck() FAILED
> >>>>    java.lang.IllegalArgumentException: Invalid start label (must be
> >>>> visited first)
> >>>>        at
> >>
> org.objectweb.asm.util.CheckMethodAdapter.checkLabel(CheckMethodAdapter.java:1453)
> >>>>        at
> >>
> org.objectweb.asm.util.CheckMethodAdapter.visitLocalVariableAnnotation(CheckMethodAdapter.java:995)
> >>>>        at
> >>
> org.objectweb.asm.MethodVisitor.visitLocalVariableAnnotation(MethodVisitor.java:757)
> >>>>        at
> >>
> org.objectweb.asm.commons.MethodRemapper.visitLocalVariableAnnotation(MethodRemapper.java:257)
> >>>>        at
> >> org.objectweb.asm.ClassReader.readCode(ClassReader.java:2614)
> >>>>        at
> >> org.objectweb.asm.ClassReader.readMethod(ClassReader.java:1515)
> >>>>        at org.objectweb.asm.ClassReader.accept(ClassReader.java:745)
> >>>>        at org.objectweb.asm.ClassReader.accept(ClassReader.java:425)
> >>>>        at remapper.bug.RemapperTest.runTest(RemapperTest.java:53)
> >>>>        at
> >> remapper.bug.RemapperTest.calcite35WithCheck(RemapperTest.java:32)
> >>>>
> >>>>
> >>
> https://github.com/MasseGuillaume/asm-remapper-bug/blob/main/SqlFunctions-1.35.0.class
> >>>>
> >>>> If you kept the .class for your tests, can you try to run javap -p -c
> >> -v
> >>>>
> >>>> On Wed, Dec 20, 2023 at 1:11 PM Julian Hyde <jhyde.apa...@gmail.com>
> >> wrote:
> >>>>
> >>>>> The version of Guava that you use at compile time is important. If
> >> it’s
> >>>>> earlier than 20 (-ish) the byte codes will be different because of
> >> the
> >>>>> presence/absence of certain varargs methods.
> >>>>>
> >>>>>
> >>>>>> On Dec 19, 2023, at 7:28 PM, Benchao Li <libenc...@apache.org>
> >> wrote:
> >>>>>>
> >>>>>> I tried to reproduce this using Guillaume's
> >>>>>> project(https://github.com/MasseGuillaume/asm-remapper-bug), and
> >> the
> >>>>>> findings are below:
> >>>>>>
> >>>>>> - compiled latest main branch
> >>>>>> (50a20824c4536450dcae963b5e757cf4bbc7e406) with JDK8(1.8.0_391) on
> >>>>>> MacOS with M2 chip: reproduced
> >>>>>> - compiled latest main branch
> >>>>>> (50a20824c4536450dcae963b5e757cf4bbc7e406) with JDK8(1.8.0_391) on
> >>>>>> Linux with x64 architecture: reproduced
> >>>>>> - compiled latest main branch
> >>>>>> (50a20824c4536450dcae963b5e757cf4bbc7e406) with JDK11(1.11.0_21) on
> >>>>>> MacOS with M2 chip: cannot reproduce
> >>>>>> - compiled latest main branch
> >>>>>> (50a20824c4536450dcae963b5e757cf4bbc7e406) with JDK17(1.17.0_7) on
> >>>>>> MacOS with M2 chip: cannot reproduce
> >>>>>>
> >>>>>> It seems unrelated to platforms, and I assume it should not either,
> >>>>>> since Java's bytecode should be platform independent.
> >>>>>>
> >>>>>> @Guillaume You said above that with 1.8.0_371-b11 on macos x64, you
> >>>>>> cannot reproduce the problem, can you confirm that? Per my testing,
> >>>>>> JDK8's output could all reproduce the problem
> >>>>>>
> >>>>>> Guillaume Masse <masse.guilla...@narrative.io.invalid>
> >> 于2023年12月18日周一
> >>>>> 23:13写道:
> >>>>>>>
> >>>>>>> If I build 1.36.0 and 1.35.0 with the same java version/build
> >> javap can
> >>>>>>> read the classfiles. Since the release process is manual it's
> >> really
> >>>>> hard
> >>>>>>> to know what causes the problem. My solution is to build and
> >> release
> >>>>> each
> >>>>>>> Calcite version myself and host it on our own S3 repository.
> >>>>>>>
> >>>>>>> On Mon, Dec 18, 2023, 8:56 AM Ruben Q L <rube...@gmail.com>
> >> wrote:
> >>>>>>>
> >>>>>>>> Hello,
> >>>>>>>>
> >>>>>>>> My project also recently upgraded to Calcite 1.36, and we are
> >> facing
> >>>>> the
> >>>>>>>> exact same issue when trying to shade with ASM.
> >>>>>>>>
> >>>>>>>> @Guillame , I can see that
> >>>>> https://gitlab.ow2.org/asm/asm/-/issues/318008
> >>>>>>>> has
> >>>>>>>> been closed, but I can't really understand why, since the
> >> explanation
> >>>>>>>> mentions SqlFunctions-1.35.0, but the issue is with 1.36, do you
> >> have
> >>>>> more
> >>>>>>>> info on that?
> >>>>>>>>
> >>>>>>>> Best,
> >>>>>>>> Ruben
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> On Fri, Nov 24, 2023 at 10:09 PM Guillaume Masse
> >>>>>>>> <masse.guilla...@narrative.io.invalid> wrote:
> >>>>>>>>
> >>>>>>>>> We run spark in AWS EMR and it overrides the classpath, so we
> >> don't
> >>>>> have
> >>>>>>>>> control over it:
> >>>>>>>>>
> >>>>>>>>> Sparks will pull guava 14.0.1:
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>
> >>>>>
> >>
> https://github.com/apache/spark/blob/master/dev/deps/spark-deps-hadoop-3-hive-2.3#L68
> >>>>>>>>>
> >>>>>>>>> That's why we need to shade guava.
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> On Fri, Nov 24, 2023 at 4:31 PM Julian Hyde <jh...@apache.org>
> >> wrote:
> >>>>>>>>>
> >>>>>>>>>> The version of Guava we compile against is relevant. In 1.35 we
> >>>>>>>>>> compiled against Guava 19.0; in 1.36 we compiled against Guava
> >>>>>>>>>> 32.1.3-jre. The effect would be the same if we compiled
> >> against any
> >>>>>>>>>> version of Guava 20.0 or higher, due to the addition of
> >>>>>>>>>> Preconditions.checkArgument methods that in earlier Guava
> >> versions
> >>>>>>>>>> would be handled by varargs method.
> >>>>>>>>>>
> >>>>>>>>>> See https://issues.apache.org/jira/browse/CALCITE-5477 (which
> >> was
> >>>>>>>>>> fixed in 1.35) and
> >>>>> https://issues.apache.org/jira/browse/CALCITE-5763
> >>>>>>>>>> (which was fixed in 1.36 and essentially reverted 5477).
> >>>>>>>>>>
> >>>>>>>>>> Julian
> >>>>>>>>>>
> >>>>>>>>>> On Fri, Nov 24, 2023 at 10:20 AM Guillaume Masse
> >>>>>>>>>> <masse.guilla...@narrative.io.invalid> wrote:
> >>>>>>>>>>>
> >>>>>>>>>>> Hi Benchao Li,
> >>>>>>>>>>>
> >>>>>>>>>>> thanks for giving me more details like the java version,
> >>>>>>>>>>>
> >>>>>>>>>>> I compiled with 1.8.0_371-b11 on macos x64 (emulated) and I
> >> was
> >>>>> still
> >>>>>>>>>> able
> >>>>>>>>>>> to transform the classfile. The bug must come from something
> >> else.
> >>>>>>>> Was
> >>>>>>>>>> this
> >>>>>>>>>>> compiled on your personal machine? Was it on
> >> windows/linux/mac?
> >>>>>>>> What's
> >>>>>>>>>> the
> >>>>>>>>>>> processor architecture?
> >>>>>>>>>>>
> >>>>>>>>>>> 1.35.0 also pases the transformation and the same piece of
> >> code is
> >>>>>>>>> there.
> >>>>>>>>>>> How was 1.35.0 released?
> >>>>>>>>>>>
> >>>>>>>>>>> Thanks!
> >>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>>> On Thu, Nov 23, 2023 at 9:59 PM Benchao Li <
> >> libenc...@apache.org>
> >>>>>>>>> wrote:
> >>>>>>>>>>>
> >>>>>>>>>>>> Guillaume,
> >>>>>>>>>>>>
> >>>>>>>>>>>> The binary release are always compiled with JDK8, this is a
> >>>>>>>> required
> >>>>>>>>>>>> procedure[1].
> >>>>>>>>>>>>
> >>>>>>>>>>>> For 1.36.0, the JDK version I'm using is:
> >>>>>>>>>>>> $ java -version
> >>>>>>>>>>>> java version "1.8.0_371"
> >>>>>>>>>>>> Java(TM) SE Runtime Environment (build 1.8.0_371-b11)
> >>>>>>>>>>>> Java HotSpot(TM) 64-Bit Server VM (build 25.371-b11, mixed
> >> mode)
> >>>>>>>>>>>>
> >>>>>>>>>>>> [1]
> >>>>>>>>>>
> >>>>>
> >> https://calcite.apache.org/docs/howto.html#making-a-release-candidate
> >>>>>>>>>>>>
> >>>>>>>>>>>> Guillaume Masse <masse.guilla...@narrative.io.invalid>
> >>>>>>>>> 于2023年11月24日周五
> >>>>>>>>>>>> 07:22写道:
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> Hi all,
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> We recently upgraded to calcite 1.36.0 and it broke our
> >>>>>>>> deployment
> >>>>>>>>>>>> process.
> >>>>>>>>>>>>> We are using java asm  <https://asm.ow2.io/> to shade
> >> (rename
> >>>>>>>>>> packages
> >>>>>>>>>>>> from
> >>>>>>>>>>>>> the bytecode) since there are multiple dependencies clash
> >> when
> >>>>>>>>> using
> >>>>>>>>>> with
> >>>>>>>>>>>>> Apache Spark. For example, Apache Spark is using a much
> >> older
> >>>>>>>>>> version of
> >>>>>>>>>>>>> guava. If I build calcite locally with Java Correto
> >> 17.0.7-amzn I
> >>>>>>>>> can
> >>>>>>>>>>>>> transform calcite's bytecode without any problem. Where can
> >> I
> >>>>>>>> find
> >>>>>>>>>> the
> >>>>>>>>>>>> java
> >>>>>>>>>>>>> version used to compiled calcite? Is there a process in
> >> place to
> >>>>>>>>>> have a
> >>>>>>>>>>>>> consistent java version?
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> https://gitlab.ow2.org/asm/asm/-/issues/318008
> >>>>>>>>>>>>>
> >>>>>>>>>>>>>
> >>>>>>>>>>>>> --
> >>>>>>>>>>>>> Guillaume Massé
> >>>>>>>>>>>>> [Gee-OHM]
> >>>>>>>>>>>>> (马赛卫)
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>>
> >>>>>>>>>>>> --
> >>>>>>>>>>>>
> >>>>>>>>>>>> Best,
> >>>>>>>>>>>> Benchao Li
> >>>>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>
> >>>>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> --
> >>>>>>
> >>>>>> Best,
> >>>>>> Benchao Li
> >>>>>
> >>>>>
> >>>
> >>>
> >>>
> >>> --
> >>>
> >>> Best,
> >>> Benchao Li
> >>
>
>

Reply via email to