-
Notifications
You must be signed in to change notification settings - Fork 999
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
To cross build, or not to cross build Ingestion #517
Comments
As you rightly pointed out both Beam and Spark require Java 8 at the moment. I am happy to build datatypes + ingestion with 8 and the rest with 11, as long as this doesn't cause more problems. If supporting multiple languages is too much of a pain then reverting to purely 8 is still an option and shouldn't be hard to do.
Correct, Prow only has one active configuration at a time, but it is able to have separate configurations per branch/tag. |
#518 seems to work with very little effort, though I've experimented minimally so far. If that approach does prove sound, I think it's a nice compromise: cross-building any or all components for both versions seems unjustified, but it is nice to be able to use newer language improvements in Core and Serving at least. Working with a newer JDK that has the Maybe we can raise the question for next community call whether anyone is still limited to Java 8 JREs in their production deployment environments. The later container/Docker friendliness improvements are a strong motivator probably driving many orgs to upgrade if they haven't already, outside of specialized clusters like Hadoop.
One of these days I'm going to digest the Prow docs more fully… Is the below a good idea, and does anyone have a strategy to suggest for it?
I see the |
@Yanson since #451 was yours, would this approach be a problem for how your org works? TL;DR it is:
The latter to ensure Ingestion can continue to run on Java 8 runtimes, for Spark as Beam runner at least but also other general Beam uncertainty. More generally, as things like #402 (comment) go forward, leaf application modules can target 11, shared library modules are constrained to 8 compatibility. From #518 it appears straightforward to maintain this. |
I believe this is possible. @davidheryanto can you confirm? I believe we have full control once an event triggers. |
Yeah with |
We build for Java 11 now, so the build will fail with older JDKs. Have the Enforcer plugin do that for a more lucid error message. This reverts 190e605 which was squash-merged in a larger commit. Partially addresses feast-dev#517
As well as datatypes-java since ingestion depends on it. Java 11 is desirable for the other components, but for Beam it may impose limitations on what runners Feast can support, if it is even safe to run on an 11 JRE now. https://issues.apache.org/jira/browse/BEAM-2530 References feast-dev#517
…518) * Require Java 11 with Enforcer We build for Java 11 now, so the build will fail with older JDKs. Have the Enforcer plugin do that for a more lucid error message. This reverts 190e605 which was squash-merged in a larger commit. Partially addresses #517 * Build Ingestion to target Java 8, for Beam compat As well as datatypes-java since ingestion depends on it. Java 11 is desirable for the other components, but for Beam it may impose limitations on what runners Feast can support, if it is even safe to run on an 11 JRE now. https://issues.apache.org/jira/browse/BEAM-2530 References #517
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. |
With #518 and #722 I think we have moved on and can close this issue. When the ecosystem appears ready for libraries to require, and for the heavy runtimes of Beam runners to fully support, an LTS Java runtime beyond 8, we can revisit. While running on Java 11 runtimes has advantages to recommend it, we haven't heard arguments for compelling gains from building Java 11 bytecode, so I don't see a justification for cross-compiling two versions of components like Feast Ingestion. For Core and Serving at least, we can enjoy developer comforts like type inference, new additions to the standard library, etc. Modules may earn more merit as time goes on. |
In #451 we upgraded outright to Java 11 for master / Feast v0.5+. Subsequently in #473 we restored support for v0.3 and v0.4 maintenance branches to be tested on CI with Java 8 (thanks!). I believe that has been broken by later updates to CI scripts, I'll consider that part of this issue.
The upgrade could pose problems for Feast's Beam-based Ingestion component. Beam itself does not build with Java 11 yet, and the scope of that issue is only the DirectRunner. Other runners could lag further behind, as for example Spark does not build or run on Java 11 until its version 3.0, which is in preview. Thus I presume Beam's SparkRunner will not build with Java 11 until a GM Spark release can.
Feast does not support any runners other than GC Dataflow (and DirectRunner), so there may be no immediate issue if these are working so far. But, supporting additional runners—if anticipated (#362)—could be blocked if Ingestion does not remain Java 8-compatible.
I wanted to raise the question of whether we should (cross?) build Ingestion with Java 8 to ensure it remains compatible for awhile longer.
The bug report that follows applies to current status quo, regardless of the question above.
Expected Behavior
Current Behavior
This stems from:
https://github.com/gojek/feast/blob/7633912cd8209cece2a21ebe344600342ef1ff9b/pom.xml#L408
because the flag was added to
javac
in Java 9. Maven Enforcer will catch this, proposed below.For the second problem, CI fails with:
Steps to reproduce
Possible Solution
The unhelpful error from Maven would be improved by reverting 190e605, resulting in output like
For the CI environment problem, restore compatibility of the test scripts with
maven:3.6-jdk-8
Docker image. Prow always builds using master versions of scripts & config, I think? Ideally then, ensure a build is run on the maintenance branches when Prow scripts are changed, for as long as those Feast versions are supported.For the Java 8 matter, a quick test seems to tell me that maven-compiler-plugin can compile select modules in a Reactor build with
<release>8</release>
while the others compile with 11. So I'm suggesting that it could be straightforward to only build Ingestion for 8, instead of cross-building for two versions and having a more complicated CI matrix. Note then thatdatatypes-java
ought to also build with 8 to be safe.The text was updated successfully, but these errors were encountered: