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