Ismaël, I was looking into BEAM-5723, is it possible to relocate both guava
and Cassandra client instead of not relocating Guava in BEAM-6620?

On Tue, Mar 5, 2019 at 11:23 PM Gleb Kanterov <g...@spotify.com> wrote:

> I agree with the points that Kenneth has raised, mainly:
>
> > In both of the above approaches, diamond dependency problems between IOs
> are quite possible.
>
> Option 1. With having more IO-s in Beam we would start hitting diamond
> dependency problem more often. Relocating dependencies will help, but for
> this, we should avoid exposing relocated classes to end-users of IO-s. I
> can't speak about everything, but in the case of BigtableIO, it only
> exposes proto-classes that aren't part of bigtable-client-core, and
> shouldn't be relocated.
>
> Option 2. Without relocation, every other IO can be potentially broken,
> and we can solve this problem on a case-by-case basis. In maven
> world situation becomes a little better with requireUpperBoundDeps [1] from
> maven-enforcer-plugin. I don't know if there is a similar solution for
> gradle.
>
> Option 3. There is a potential future solution for dependency conflicts
> between IO-s with Java 9 JPMS [2], however, it could take a while before we
> could use it due to compatibility issues.
>
> As a short term solution, option 2 seems the best, we could go through
> known conflicts and see if it's possible to resolve them, potentially
> looking into option 1 that would take much more time.
>
> [1]:
> https://maven.apache.org/enforcer/enforcer-rules/requireUpperBoundDeps.html
> [2]: https://en.wikipedia.org/wiki/Java_Platform_Module_System
>
>
> On Mon, Mar 4, 2019 at 4:45 PM Ismaël Mejía <ieme...@gmail.com> wrote:
>
>> That looks interesting but I am not sure if I understand correctly,
>> isn't the problem that the system API (Bigtable, Cassandra, etc)
>> exposes guava related stuff? Or in other words, wouldn't the
>> transitivie version of guava leak anyway?
>> If it does not I am pretty interested on doing this to fix the
>> Cassandra IO from leaking too.
>> https://issues.apache.org/jira/browse/BEAM-5723
>>
>> On Thu, Feb 28, 2019 at 5:17 PM Kenneth Knowles <k...@apache.org> wrote:
>> >
>> > If someone is using BigTableIO with bigtable-client-core then having
>> BigTableIO and bigtable-client-core both depend on Guava 26.0 is fine,
>> right? Specifically, a user of BigTableIO after
>> https://github.com/apache/beam/pull/7957 will still have non-vendored
>> Guava on the classpath due to the transitive deps of bigtable-client-core.
>> >
>> > In any case it seems very wrong for the Beam root project to manage the
>> version of Guava in BigTableIO since the whole point is to be compatible
>> with bigtable-client-core. Would it work to delete our pinned Guava version
>> [1] and chase down all the places it breaks, moving Guava dependencies
>> local to places where an IO or extension must use it for interop? Then you
>> don't need adapters.
>> >
>> > In both of the above approaches, diamond dependency problems between
>> IOs are quite possible.
>> >
>> > I don't know if we can do better. For example, producing a
>> bigtable-client-core where we have relocated Guava internally and using
>> that could really be an interop nightmare as things that look like the same
>> type would not be. Less likely to be broken would be bigtable-client-core
>> entirely relocated and vendored, but generally IO connectors exchange
>> objects with users and the users would have to use the relocated versions,
>> so that's gross.
>> >
>> > Kenn
>> >
>> > [1]
>> https://github.com/apache/beam/blob/master/buildSrc/src/main/groovy/org/apache/beam/gradle/BeamModulePlugin.groovy#L353
>> >
>> >
>> > On Thu, Feb 28, 2019 at 2:29 AM Gleb Kanterov <g...@spotify.com> wrote:
>> >>
>> >> For the past week, two independent people have asked me if I can help
>> with guava NoSuchMethodError in BigtableIO. It turns out we still have a
>> potential problem with dependencies that don't vendor guava, in this case,
>> it was bigtable-client-core that depends on guava-26.0. However, the root
>> cause of the classpath problem was in the usage of a deprecated method from
>> non-vendored guava in BigtableServiceClientImpl in the code path where we
>> integrate with bigtable client.
>> >>
>> >> I created apache/beam#7957 [1] to fix that. There few other IO-s where
>> we use non-vendored guava that we can fix using adapters.
>> >>
>> >> And there is an unknown number of conflicts between guava versions in
>> our dependencies that don't vendor it, that as I understand it, could be
>> fixed by relocating them, in a similar way we do for Calcite [2].
>> >>
>> >> [1]: https://github.com/apache/beam/pull/7957
>> >> [2]:
>> https://github.com/apache/beam/blob/61de62ecbe8658de866280a8976030a0cb877041/sdks/java/extensions/sql/build.gradle#L30-L39
>> >>
>> >> Gleb
>> >>
>> >> On Sun, Jan 20, 2019 at 11:43 AM Gleb Kanterov <g...@spotify.com>
>> wrote:
>> >>>
>> >>> I didn't look deep into it, but it seems we can put
>> .idea/codeInsightSettings.xml into our repository where we blacklist
>> packages from auto-import. See an example in
>> JetBrains/kotlin/.idea/codeInsightSettings.xml.
>> >>>
>> >>> On Sat, Jan 19, 2019 at 8:03 PM Reuven Lax <re...@google.com> wrote:
>> >>>>
>> >>>> Bad IDEs automatically generate the wrong import. I think we need to
>> automatically prevent this, otherwise the bad imports will inevitably slip
>> back in.
>> >>>>
>> >>>> Reuven
>> >>>>
>> >>>> On Tue, Jan 15, 2019 at 2:54 AM Łukasz Gajowy <
>> lukasz.gaj...@gmail.com> wrote:
>> >>>>>
>> >>>>> Great news. Thanks all for this work!
>> >>>>>
>> >>>>> +1 to enforcing this on dependency level as Kenn suggested.
>> >>>>>
>> >>>>> Łukasz
>> >>>>>
>> >>>>> wt., 15 sty 2019 o 01:18 Kenneth Knowles <k...@apache.org>
>> napisał(a):
>> >>>>>>
>> >>>>>> We can enforce at the dependency level, since it is a compile
>> error. I think some IDEs and build tools may allow the compile-time
>> classpath to get polluted by transitive runtime deps, so protecting against
>> bad imports is also a good idea.
>> >>>>>>
>> >>>>>> Kenn
>> >>>>>>
>> >>>>>> On Mon, Jan 14, 2019 at 8:42 AM Ismaël Mejía <ieme...@gmail.com>
>> wrote:
>> >>>>>>>
>> >>>>>>> Not yet, we need to add that too, there are still some tasks to be
>> >>>>>>> done like improve the contribution guide with this info, and
>> document
>> >>>>>>> how to  generate a src build artifact locally since I doubt we can
>> >>>>>>> publish that into Apache for copyright reasons.
>> >>>>>>> I will message in the future for awareness for awareness when
>> most of
>> >>>>>>> the pending tasks are finished.
>> >>>>>>>
>> >>>>>>>
>> >>>>>>> On Mon, Jan 14, 2019 at 3:51 PM Maximilian Michels <
>> m...@apache.org> wrote:
>> >>>>>>> >
>> >>>>>>> > Thanks for the heads up, Ismaël! Great to see the vendored
>> Guava version is used
>> >>>>>>> > everywhere now.
>> >>>>>>> >
>> >>>>>>> > Do we already have a Checkstyle rule that prevents people from
>> using the
>> >>>>>>> > unvendored Guava? If not, such a rule could be useful because
>> it's almost
>> >>>>>>> > inevitable that the unvedored Guava will slip back in.
>> >>>>>>> >
>> >>>>>>> > Cheers,
>> >>>>>>> > Max
>> >>>>>>> >
>> >>>>>>> > On 14.01.19 05:55, Ismaël Mejía wrote:
>> >>>>>>> > > We merged today the PR [1] that changes most of the code to
>> use our
>> >>>>>>> > > new guava vendored dependency. In practice it means that most
>> of the
>> >>>>>>> > > imports of the classes were changed from `com.google.common.`
>> to
>> >>>>>>> > > `org.apache.beam.vendor.guava.v20_0.com.google.common.`
>> >>>>>>> > >
>> >>>>>>> > > This is a great improvement to fix a long existing problem of
>> guava
>> >>>>>>> > > leaking through some Beam modules. This also reduces the size
>> of most
>> >>>>>>> > > jars in the project because they don't need to relocate and
>> include
>> >>>>>>> > > guava anymore, they just use the vendored dependency.
>> >>>>>>> > >
>> >>>>>>> > > Kudos to Kenn Knowles, Lukasz Cwik, Scott Wegner and the
>> others that
>> >>>>>>> > > worked (are working) to make this possible.
>> >>>>>>> > >
>> >>>>>>> > > Sadly as a side effect of the merge of this PR multiple PRs
>> were
>> >>>>>>> > > broken so please review if yours was and do a rebase and fix
>> the
>> >>>>>>> > > imports to use the new vendored dependency. Sorry for the
>> >>>>>>> > > inconvenience. From now one all uses of guava should use the
>> vendored
>> >>>>>>> > > version. Expect some updates in the docs.
>> >>>>>>> > >
>> >>>>>>> > > [1]  https://github.com/apache/beam/pull/6809
>> >>>>>>> > >
>> >>>
>> >>>
>> >>>
>> >>> --
>> >>> Cheers,
>> >>> Gleb
>> >>
>> >>
>> >>
>> >> --
>> >> Cheers,
>> >> Gleb
>>
>
>
> --
> Cheers,
> Gleb
>


-- 
Cheers,
Gleb

Reply via email to