Sounds good!

On Mon, Jun 26, 2017 at 4:36 PM, Chesnay Schepler <ches...@apache.org>
wrote:

> I do believe the full dependency version of, say guava, should be apparent
> from the dependency
> declaration of a Flink pom. Just for clarity purposes.
>
> We could still include the full version in the version of the module
> though,
> i.e
>
>    <dependency>      <groupId>org.apache.flink</groupId>      
> <artifactId>flink-shaded-guava18</artifactId>      
> <version>1.0-18.0</version>   </dependency>
>
> On 26.06.2017 14:49, Stephan Ewen wrote:
>
> Sounds good.
>
> If the libraries follow semantic versioning properly, we could try and only
> have the major version in the module name?
>
>
>
> On Mon, Jun 26, 2017 at 2:45 PM, Chesnay Schepler <ches...@apache.org> 
> <ches...@apache.org>
> wrote:
>
>
> You're raising good points, now i see why having the version in the name
> is useful.
>
> I'll adjust my PR accordingly. And yes, ideally we only release the
> modified modules, not everything again.
>
>
> On 26.06.2017 14:29, Stephan Ewen wrote:
>
>
> How should it work when one of the shaded dependencies is updated? We
> probably do not want to release all of them, just because the overall
> version number is in their version number.
>
> How about that:
>
>    - Under normal circumstances, we only increase the version of the root
> project, when we add / bump a shaded dependency version
>
>    - Shaded dependencies include the version in the same. That way we can
> possibly have two different versions of a dependency, such as
> "flink-shaded-kryo-2" and "flink-shaded-kryo-3".
>    - Shaded dependencies should have the version in the relocation pattern
> as well, for the same reason as above (unless the two versions have
> separate namespaces already).
>
>    - The released version of the module and artifact is always "1.0"
> unless
> we find that we did shading/relocation errors, in which case we need to
> re-release that artifact (1.1, 1.2, ...)
>
>
>
> On Mon, Jun 26, 2017 at 2:23 PM, Chesnay Schepler <ches...@apache.org> 
> <ches...@apache.org>
> wrote:
>
> the guava version is already included in the version of the flink-shaded
>
> module.
>
> For example, for the first release of flink-shaded-guava the version
> would
> be 1-18.0.
>
> 1 is the version of flink-shaded itself, 18.0 is the guava version.
>
>
> On 26.06.2017 14:01, Stephan Ewen wrote:
>
> Looks good, thanks Chesnay!.
>
> How about including the dependency version names in the module names,
> like
> "flink-shaded-guava-18.0"?
>
> On Mon, Jun 26, 2017 at 11:49 AM, Chesnay Schepler <ches...@apache.org> 
> <ches...@apache.org>
> wrote:
>
> The new repo was created and is accessible here:
>
>
> https://github.com/apache/flink-shaded
>
> I've already opened a PR to add a shaded guava module.
>
> Once the shaded-guava module is merged I would like to do a first
> release
> of flink-shaded,
> only containing guava. I already have a branch with all the changes
> necessary to
> integrate this dependency into Flink.
>
> The alternative would be to first create shaded modules for all
> dependencies and make a
> single release, but I feel that would delay things quite a bit.
>
>
>
> On 21.06.2017 17:00, Robert Metzger wrote:
>
> Okay, I'll request a repo for the shading.
>
>
> On Wed, Jun 21, 2017 at 1:38 PM, Chesnay Schepler <ches...@apache.org
>
> wrote:
>
> I like your suggestion Robert. A lot actually.
>
> Having the actual dependency version (i.e 18 for guava) in the version
>
> should improve clarity a lot.
>
> Originally i intended to release 1 artifact per Flink version, with
> the
> normal versioning scheme
> that we use. But given that the shaded dependencies aren't changed
> often
> (even rarely might be a stretch),
> and aren't actually coupled to the Flink release cycle this doesn't
> make
> a
> lot of sense.
>
> Having separate repos looks like a reasonable separation of concerns.
> The
> release for Flink itself
> would work just like it does now; we don't have to modify any scripts
> or
> do extra steps.
>
> Since the build, release and development process are separate (since
> flink-shaded isn't part of Flink build
> process, has a separate release process and changes to it will /never
> /require immediate changes to Flink)
> it seems like a very good candidate to move it into a separate repo.
>
>
> On 21.06.2017 11:26, Robert Metzger wrote:
>
> Its not completely clear to me how we want to version the shaded
>
> dependencies, and where we are putting them.
>
> One concern are the official apache release rules. If we want to
> release
> something to maven central, we need to do a proper vote over a
> source
> archive.
> I would propose to create a new repository "flink-shaded.git" that
> contains
> the following maven module structure:
> - flink-shaded: 1
>        - flink-shaded-asm: 1-5.2
>        - flink-shaded-guava: 1-18.0
>        - ...
>
> The number indicates the version (for ASM, I've just guessed).
> The version for the parent "flink-shaded" needs to be updated on
> each
> parent pom change (new module added, new / changed plugins, ...)
>
> We could create a separate release script in this repository that
> creates
> the flink-shaded-src.zip from the code and deploys the artifacts to
> the
> maven staging area.
>
> The advantage of a separate repo would be that we don't need to
> maintain
> separate maven projects in the same git repo.
> Also, the src archives for the release vote can be created from the
> repo
> content (without much filtering).
>
>
> On Tue, Jun 20, 2017 at 9:44 PM, Stephan Ewen <se...@apache.org> 
> <se...@apache.org>
> wrote:
>
> I like this approach.
>
> Two additional things can be mention here:
>
>
>       - We need to deploy these artifacts independently and not as
> part
> of
> the
> build. That is a manual step once per "bump" in the dependency of
> that
> library.
>
>       - We reduce the shading complexity of the original build and
> should
> thus
> also speed up build times :-)
>
> Stephan
>
>
>
>
> On Tue, Jun 20, 2017 at 1:15 PM, Chesnay Schepler <ches...@apache.org>
> wrote:
>
> I would like to start working on this.
>
> I've looked into adding a flink-shaded-guava module. Working
> against
>
>
> the
> shaded namespaces seems
> to work without problems from the IDE, and we could forbid
> un-shaded
> usages with checkstyle.
>
> So for the list of dependencies that we want to shade we currently
> got:
>
>      * asm
>      * guava
>      * netty
>      * hadoop
>      * curator
>
> I've had a chat with Stephan Ewan and he brought up kryo + chill
> as
> well.
>
> The nice thing is that we can do this incrementally, one
> dependency
> at a
> time. As such i would propose
> to go through the whole process for guava and see what problems
> arise.
>
> This would include adding a flink-shaded module and a child
> flink-shaded-guava module to the flink repository
> that are not part of the build process, replacing all usages of
> guava
> in
> Flink, adding the
> checkstyle rule (optional) and deploying the artifact to maven
> central.
>
>
> On 11.05.2017 10:54, Stephan Ewen wrote:
>
> @Ufuk  - I have never set up artifact deployment in Maven, could
> need
> some
> help there.
>
> Regarding shading Netty, I agree, would be good to do that as
>
>
> well...
>
> On Thu, May 11, 2017 at 10:52 AM, Ufuk Celebi <u...@apache.org> 
> <u...@apache.org>
> wrote:
>
> The advantages you've listed sound really compelling to me.
>
> - Do you have time to implement these changes or do we need a
>
> volunteer?
>
> ;)
>
> - I assume that republishing the artifacts as you propose doesn't
>
>
> have
>
> any new legal implications since we already publish them with
> our
> JARs, right?
>
> - We might think about adding Netty to the list of shaded
> artifacts
> since some dependency conflicts were reported recently. Would
> have
> to
> double check the reported issues before doing that though. ;-)
>
> – Ufuk
>
>
> On Wed, May 10, 2017 at 8:45 PM, Stephan Ewen <se...@apache.org
>
> wrote:
>
> @chesnay: I used ASM as an example in the proposal. Maybe I did
>
> not
>
>
> say
>
>
> that clearly.
> If we like that approach, we should deal with the other libraries
> (at
>
> least
>
> the frequently used ones) in the same way.
>
>
> I would imagine to have a project layout like that:
>
>
> flink-shaded-deps
>        - flink-shaded-asm
>        - flink-shaded-guava
>        - flink-shaded-curator
>        - flink-shaded-hadoop
>
>
> "flink-shaded-deps" would not be built every time (and not be
> released
> every time), but only when needed.
>
>
>
>
>
>
> On Wed, May 10, 2017 at 7:28 PM, Chesnay Schepler <ches...@apache.org
> wrote:
>
> I like the idea, thank you for bringing it up.
>
> Given that the raised problems aren't really ASM specific would
> it
>
> make
>
> sense to create one flink-shaded module that contains all
>
> frequently
>
> shaded
>
> libraries? (or maybe even all shaded dependencies by core
>
> modules)
>
>
> The
>
> proposal limits the scope of this to ASM and i was wondering
> why.
>
> I also remember that there was a discussion recently about why
>
> we
>
> shade
>
> things at all, and the idea of working against the shaded
>
> namespaces
>
> was
>
> brought up. Back then i was expressing doubts as to whether IDE's
>
> would
>
> properly support this; what's the state on that?
>
> On 10.05.2017 18:18, Stephan Ewen wrote:
>
> Hi!
>
> This is a discussion about altering the way we handle
>
> dependencies
>
> and
>
> shading in Flink.
>
> I ran into quite a view problems trying to adjust / fix some
>
> shading
>
>
> issues
>
> during release validation.
>
> The issue is tracked under: https://issues.apache.org/jira
> /browse/FLINK-6529
> Bring this discussion thread up because it is a bigger issue
>
> *Problem*
>
> Currently, Flink shades dependencies like ASM and Guava into
> all
>
> jars
>
> of
>
> projects that reference it and relocate the classes.
>
> There are some drawbacks to that approach, let's discuss them at
>
>
> the
>
> example of ASM:
>
>
>         - The ASM classes are for example in flink-core,
> flink-java,
> flink-scala,
> flink-runtime, etc.
>
>         - Users that reference these dependencies have the
> classes
> multiple
> times
> in the classpath. That is unclean (works, through, because
> the
>
> classes
>
> are
>
> identical). The same happens when building the final dist. jar.
>
>         - Some of these dependencies require to include license
>
>
> files
>
> in
>
> the
> shaded jar. It is hard to impossible to build a good
> automatic
> solution
> for
> that, partly due to Maven's very poor cross-project path
> support
>
>         - Most importantly: Scala does not support shading
> really
> well.
>
> Scala
>
> classes have references to classes in more places than just
> the
>
>
> class
>
> names
>
> (apparently for Scala reflect support). Referencing a Scala
>
> project
>
> with
>
> shaded ASM still requires to add a reference to unshaded ASM
>
>
> (at
>
> least
>
> as
>
> a
>
> compile dependency).
>
> *Proposal*
>
> I propose that we build and deploy a asm-flink-shaded version
> of
> ASM
>
> and
>
> directly program against the relocated namespaces. Since we
>
>
> never
>
> use
>
> classes that we relocate in public interfaces, Flink users will
>
> never
>
> see
>
>
> the relocated class names. Internally, it does not hurt to use
>
> them.
>
>         - Proper maven dependency management, no hidden (shaded)
>
> dependencies
>
>         - One copy of each class for shaded dependencies
>
>
>         - Proper Scala interoperability
>
>         - Natural License management (license is part of
>
> deployed
>
>
> asm-flink-shaded jar)
>
>
> Happy to hear thoughts!
>
> Stephan
>
>
>
>
>
>
>
>
>
>

Reply via email to