Just to clarify: on my previous email I did not mean that any of those issues in particular were the cause of this problem, but rather that it could be possible that a similar issue on the JDK that was used to build the release might be the root cause, but I'm not 100% sure.
In fact, according to the tests proposed by Guillaume, it seems that already the bytecode of SqlFunctions-1.35 was not correct, but for some reason ASM did not fail with it (as it does with SqlFunctions-1.36). Why is that? It's hard to tell... As others have said, I agree that it would be a good idea to add a check to ensure that the bytecode is correct during the release process. Ruben On Mon, Jan 29, 2024 at 8:27 AM Stamatis Zampetakis <zabe...@gmail.com> wrote: > Having a gradle task to ensure that class files are valid bytecode > seems like a good idea. It may not be 100% bulletproof since we yet > rely on another tool/library to perform the verification but still > having an extra check will not hurt if it is lightweight. > > It makes sense to enforce a certain JDK version/build during the > release. In that case I would suggest also having some gradle logic > perform this validation and not just text in the release instructions. > > Automating the release procedure would be great but to do that it is > required to have reproducible builds [1]. See [2] for more background > around this topic. > > Best, > Stamatis > > [1] > https://cwiki.apache.org/confluence/display/SECURITY/Reproducible+Builds > [2] https://lists.apache.org/thread/qkstx4o9qw90fxzqcfnp69w33h7vw2yg > > On Fri, Jan 26, 2024 at 11:27 PM Guillaume Masse > <masse.guilla...@narrative.io.invalid> wrote: > > > > 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 > > > >> > > > > > > >