I believe our usage is high enough on Java 8 that we wouldn't be close to
ceasing support for it.

I actually don't really know much about the possibility of distributing
multi-version artifacts for Java but that would probably be better than
what we do today. Today we just distribute Java 8 artifacts that will then
work with other versions.

Kenn

On Fri, Jul 21, 2023 at 11:01 PM Damon Douglas <damondoug...@apache.org>
wrote:

> Thank you everyone for responding.
>
> Replying to Kenn:
>
> 1. This explanation helps me understand more.
> 2. I realize the drive for the breaking change PR in question is to
> support Java 17. Would a potential path be to target a more gentle ramp
> from 8, to 11, and up with a communicated and anticipated date of ceasing
> support for a particular version?
>
> On Fri, Jul 21, 2023 at 9:51 AM Reuven Lax via dev <dev@beam.apache.org>
> wrote:
>
>> Curious why these failing tests didn't block submission.
>>
>> For now rollback seems to be the simplest option. However is there a path
>> forward on Java 11, or is our model irretrievably broken on Java 11?
>>
>> On Fri, Jul 21, 2023 at 8:57 AM Kenneth Knowles <k...@apache.org> wrote:
>>
>>> This is a tricky situation that I don't know how to resolve best. Here
>>> are some pieces of information I know:
>>>
>>> 1. The reason we put certain generated classes in the same package is
>>> because of Java's package-private access restriction. If they are in
>>> another package the generated wrapper won't be able to invoke the needed
>>> functions. I know this applies to a generated DoFnInvoker. I don't know if
>>> it applies here.
>>>
>>> 2. The current status for Beam is that Beam itself is only
>>> expected/required to be able to build with Java 8 and/or produce Java 8
>>> compatible bytecode, but users should be able to use it with their own Java
>>> 11 or Java 17 code. This makes the testing scenario a bit tricky. We do
>>> have tests that model this scenario but they did not catch this I guess.
>>>
>>> On Mon, Jul 17, 2023 at 1:19 AM Damon Douglas <damondoug...@apache.org>
>>> wrote:
>>>
>>>> Good day, everyone,
>>>>
>>>> For clarity, I organize the following into situation, background,
>>>> assessment, and proposal.
>>>>
>>>> Best,
>>>>
>>>> Damon
>>>>
>>>> -----------------------------------------
>>>>
>>>> Situation
>>>>
>>>> Issue #26981 reports an IllegalArgumentException associated with the
>>>> ByteBuddy dependency throwing the message "<some class> must be defined in
>>>> the same package as <some other class>"[1]. I personally discovered this
>>>> error blocking my own Schema-related tests.
>>>>
>>>> Background
>>>>
>>>> *1. PR #25578 introduced the error*
>>>>
>>>> As Issue #26981 reports[1], the error seems to be introduced with 2.48.
>>>> Comparing v2.47.0 and v2.48.0[2] reveals that PR #25578 may have introduced
>>>> this breaking change[3]. Said PR replaced ByteBuddy's
>>>> ClassLoadingStrategy.Default.INJECTION[4] with getClassLoadingStrategy[5].
>>>>
>>>> *2. Reverting PR #25578 resolves the error*
>>>>
>>>> To test this hypothesis, I cloned 41e6628 and ran:
>>>>
>>>> ./gradlew :sdks:java:core:check
>>>>
>>>> revealing several failing tests (see *Failing :sdks:java:core:check at
>>>> 41e6628* below), some of which contained the
>>>> familiar IllegalArgumentException "<some class> must be defined in the same
>>>> package as <some other class>" message.
>>>>
>>>> After reverting changes found in #25578, the failing tests and the
>>>> IllegalArgumentException were resolved.
>>>>
>>>> *3. Code related to PR #25578 has a back and forth history*
>>>>
>>>> There seems to be a back and forth removal and replacement history[6]
>>>> between ByteBuddy's ClassLoadingStrategy.Default.INJECTION
>>>> and getClassLoadingStrategy most recently PR #25578. Said PR's motivation
>>>> is to prepare Beam for Java 17 compatibility, which explains the
>>>> re-introduction of the breaking changes.
>>>>
>>>> *4. PR #25578 GitHub Actions checks pass*
>>>>
>>>> Examining the GitHub actions run reveals that PR #25578 checks
>>>> passed[7]. However, examining the setup[8] more closely reveals that Java
>>>> tests are executed using Java Version 8. The same is true in the
>>>> latest 41e6628 commit[9].  To test whether the version of Java drives Issue
>>>> #26981's error, I submitted a draft PR[10] with the version of Java set to
>>>> 11 and found that the same errors resulted[11] as I found on my machine
>>>> using the same Java version.
>>>>
>>>> Assessment
>>>>
>>>> My main impression is that:
>>>>
>>>>    1. checks did not reveal PR #25578's breaking changes[7] because
>>>>    the environment[8] used Java 8 instead of 11
>>>>    2. the back and forth removal and addition of PR #25578's changes
>>>>    does not solve current and future Java version compatibilities
>>>>
>>>> Proposal
>>>>
>>>> May we consider:
>>>>
>>>>    1. If not already planned, set
>>>>    .github/actions/setup-self-hosted-action/action.yml's Java version[12] 
>>>> to
>>>>    11.
>>>>    2. arriving at a consensus regarding PR #25578's breaking changes
>>>>    and what we need to do today and in the future; I don't have anything
>>>>    practical to propose or recommend
>>>>
>>>> References
>>>>
>>>>    1. https://github.com/apache/beam/issues/26981
>>>>    2. https://github.com/apache/beam/compare/v2.47.0...v2.48.0
>>>>    3. https://github.com/apache/beam/pull/25578
>>>>    4.
>>>>    
>>>> https://javadoc.io/static/net.bytebuddy/byte-buddy/1.12.23/net/bytebuddy/dynamic/loading/ClassLoadingStrategy.Default.html#INJECTION
>>>>    5.
>>>>    
>>>> https://github.com/apache/beam/blob/68e19a596a5d0136ba4592be01888f487463c2f3/sdks/java/core/src/main/java/org/apache/beam/sdk/util/ByteBuddyUtils.java#L32
>>>>    6.
>>>>    
>>>> https://github.com/apache/beam/commits/68e19a596a5d0136ba4592be01888f487463c2f3/sdks/java/core/src/main/java/org/apache/beam/sdk/util/ByteBuddyUtils.java
>>>>    7.
>>>>    https://github.com/apache/beam/actions/runs/4759753495/jobs/8459342173
>>>>    8.
>>>>    
>>>> https://github.com/apache/beam/actions/runs/4759753495/jobs/8459342173#step:3:28
>>>>    9.
>>>>    
>>>> https://github.com/apache/beam/actions/runs/5558349809/jobs/10153336615#step:3:16
>>>>    10.
>>>>    
>>>> https://github.com/apache/beam/actions/runs/5571881403/jobs/10177348958?pr=27515#step:3:16
>>>>    11.
>>>>    
>>>> https://github.com/apache/beam/actions/runs/5571881403/jobs/10177348958?pr=27515#step:5:123
>>>>    12.
>>>>    
>>>> https://github.com/apache/beam/blob/561870be80cc8696a926d7322b0f47ddeddcc222/.github/actions/setup-self-hosted-action/action.yml#L56
>>>>
>>>>
>>>> Failing :sdks:java:core:check at 41e6628
>>>>
>>>> *Ran locally on*:
>>>>
>>>> openjdk 11.0.14.1 2022-02-08
>>>> OpenJDK Runtime Environment JBR-11.0.14.1.1-2043.11-jcef (build
>>>> 11.0.14.1+1-b2043.11)
>>>> OpenJDK 64-Bit Server VM JBR-11.0.14.1.1-2043.11-jcef (build
>>>> 11.0.14.1+1-b2043.11, mixed mode)
>>>>
>>>> org.apache.beam.sdk.schemas.AvroSchemaTest > testPojoRecordToRow FAILED
>>>>     java.lang.IllegalArgumentException at AvroSchemaTest.java:451
>>>>
>>>> org.apache.beam.sdk.schemas.AvroSchemaTest > testSpecificRecordToRow
>>>> FAILED
>>>>     java.lang.IllegalArgumentException at AvroSchemaTest.java:386
>>>>
>>>> org.apache.beam.sdk.schemas.JavaBeanSchemaTest > testMapFieldSetters
>>>> FAILED
>>>>     java.lang.IllegalArgumentException at JavaBeanSchemaTest.java:460
>>>>
>>>> org.apache.beam.sdk.schemas.JavaBeanSchemaTest >
>>>> testRecursiveArraySetters FAILED
>>>>     java.lang.IllegalArgumentException at JavaBeanSchemaTest.java:385
>>>>
>>>> org.apache.beam.sdk.schemas.JavaBeanSchemaTest > testMapFieldGetters
>>>> FAILED
>>>>     java.lang.IllegalArgumentException at JavaBeanSchemaTest.java:437
>>>>
>>>> org.apache.beam.sdk.schemas.JavaBeanSchemaTest >
>>>> testRecursiveArrayGetters FAILED
>>>>     java.lang.IllegalArgumentException at JavaBeanSchemaTest.java:369
>>>>
>>>> org.apache.beam.sdk.schemas.JavaFieldSchemaTest > testNestedArraysToRow
>>>> FAILED
>>>>     java.lang.IllegalArgumentException at JavaFieldSchemaTest.java:602
>>>>
>>>> org.apache.beam.sdk.schemas.JavaFieldSchemaTest > testEnumFieldToRow
>>>> FAILED
>>>>     java.lang.IllegalArgumentException at JavaFieldSchemaTest.java:658
>>>>
>>>> org.apache.beam.sdk.schemas.JavaFieldSchemaTest >
>>>> testRecursiveArraySetters FAILED
>>>>     java.lang.IllegalArgumentException at JavaFieldSchemaTest.java:411
>>>>
>>>> org.apache.beam.sdk.schemas.JavaFieldSchemaTest > testMapFieldGetters
>>>> FAILED
>>>>     java.lang.IllegalArgumentException at JavaFieldSchemaTest.java:463
>>>>
>>>> org.apache.beam.sdk.schemas.JavaFieldSchemaTest >
>>>> testRecursiveArrayGetters FAILED
>>>>     java.lang.IllegalArgumentException at JavaFieldSchemaTest.java:394
>>>>
>>>> org.apache.beam.sdk.schemas.JavaFieldSchemaTest >
>>>> testNestedArraysFromRow FAILED
>>>>     java.lang.IllegalArgumentException at JavaFieldSchemaTest.java:580
>>>>
>>>> org.apache.beam.sdk.schemas.utils.JsonUtilsTest >
>>>> testGetRowToJsonBytesFunction FAILED
>>>>     java.lang.IllegalArgumentException at JsonUtilsTest.java:92
>>>>
>>>> org.apache.beam.sdk.schemas.utils.JsonUtilsTest >
>>>> testGetJsonStringToRowFunction FAILED
>>>>     java.lang.IllegalArgumentException at JsonUtilsTest.java:92
>>>>
>>>> org.apache.beam.sdk.schemas.utils.JsonUtilsTest >
>>>> testGetRowToJsonStringsFunction FAILED
>>>>     java.lang.IllegalArgumentException at JsonUtilsTest.java:92
>>>>
>>>> org.apache.beam.sdk.schemas.utils.JsonUtilsTest >
>>>> testGetJsonBytesToRowFunction FAILED
>>>>     java.lang.IllegalArgumentException at JsonUtilsTest.java:92
>>>>
>>>

Reply via email to