What is so bad about Guava? I have always found it to be a high quality 
library. I hear that they have broken backwards compatibility on one or two 
occasions, but I’ve never been affected by that personally.

> On Sep 6, 2016, at 12:04 PM, Andrew Purtell <apurt...@apache.org> wrote:
> 
> No argument that naming should set expectations of immutability if that's
> what should be conveyed, but Guava types (or Guava anything) is a means to
> an end that can inflict significant pain on downstreamers.
> 
> On Tue, Sep 6, 2016 at 11:59 AM, Julian Hyde <jh...@apache.org> wrote:
> 
>> Calcite’s API has a large surface area. The API consists not just of
>> method calls, but also data objects. For example, the Project class [1]
>> represents a project node in a relational algebra expression. Its main
>> field is “public final ImmutableList<RexNode> exps”. It is very important
>> that everyone, especially the client, understands that that list is
>> immutable. When you create a Project, you do not need to make a defensive
>> copy of the list because no one is able to modify it.
>> 
>> Imagine the mayhem if java.lang.String was mutable. As an API designer you
>> would have to spell out whether the caller or the provider is allowed to
>> change the string, and at what time. You would worry about thread safety,
>> if the string has been shared with another thread. Well, I believe that
>> Guava immutable collections prevent the same kinds of mayhem. I would call
>> that good API design.
>> 
>> The immutable collections and functions are in every Guava version, so we
>> really don’t care which Guava version we use, as long as it is not shaded.
>> 
>> Julian
>> 
>> [1] https://calcite.apache.org/apidocs/org/apache/calcite/
>> rel/core/Project.html <https://calcite.apache.org/
>> apidocs/org/apache/calcite/rel/core/Project.html>
>> 
>>> On Sep 3, 2016, at 6:02 PM, Andrew Purtell <andrew.purt...@gmail.com>
>> wrote:
>>> 
>>> I wouldn't call embedding Guava types in a public API either a service
>> for users nor good API design, given the pain I've personally seen it
>> inflict on multiple projects given Google's uncaring nature on cross
>> version compatibility.
>>> 
>>>> On Sep 3, 2016, at 5:35 PM, Jacques Nadeau <jacq...@apache.org> wrote:
>>>> 
>>>> Do you have a sense of how often we expose these?
>>>> 
>>>> One random thought, shade Guava and continue to expose the shaded.guava
>>>> classes in public APIs.
>>>> 
>>>> People could choose to use the unshaded or shaded.
>>>> 
>>>>> On Sat, Sep 3, 2016 at 11:26 AM, Julian Hyde <jh...@apache.org> wrote:
>>>>> 
>>>>> I'm not keen on shading Guava, because I want to include some of
>>>>> Guava's classes in Calcite's public API: for example ImmutableList and
>>>>> Function. Using these classes in APIs makes better APIs. They should
>>>>> be in the JDK, but sadly they're not, so we use Guava.
>>>>> 
>>>>> Calcite's policy has been to support a wide range of Guava versions
>>>>> but to drop support for really old versions. We can use features in
>>>>> newer versions via reflection, as long as we don't introduce a link
>>>>> dependency (i.e. we call via reflection) and we can provide fallback
>>>>> for older versions. All of this is identical to our policy for JDKs,
>>>>> really.
>>>>> 
>>>>> All we need is that our dependencies move off the really old versions
>>>>> in a timely fashion.
>>>>> 
>>>>> Julian
>>>>> 
>>>>> 
>>>>> On Sat, Sep 3, 2016 at 10:20 AM, Andrew Purtell
>>>>> <andrew.purt...@gmail.com> wrote:
>>>>>> Use hbase-shaded-client as Maven dep (1.1 and up)
>>>>>> 
>>>>>>> On Sep 3, 2016, at 10:12 AM, James Taylor <jamestay...@apache.org>
>>>>> wrote:
>>>>>>> 
>>>>>>> Does shading of protobuf on the HBase client work (or is that
>> dependent
>>>>> on
>>>>>>> that brave work Stack is doing)?
>>>>>>> 
>>>>>>> On Sat, Sep 3, 2016 at 10:10 AM, Andrew Purtell <
>>>>> andrew.purt...@gmail.com>
>>>>>>> wrote:
>>>>>>> 
>>>>>>>> James - When Stack is finished coprocessors will work with shaded
>>>>>>>> protobuf. Not yet.
>>>>>>>> 
>>>>>>>>>> On Sep 3, 2016, at 10:07 AM, James Taylor <jamestay...@apache.org
>>> 
>>>>>>>>> wrote:
>>>>>>>>> 
>>>>>>>>> Also agree - shading of guava & protobuf would be super valuable.
>>>>> Phoenix
>>>>>>>>> ended up not supporting shading of protobuf because of difficulties
>>>>>>>> getting
>>>>>>>>> it to work (maybe because HBase dependency?). I think we support
>>>>> shading
>>>>>>>> of
>>>>>>>>> Guava, though. Is that correct, Sergey?
>>>>>>>>> 
>>>>>>>>>> On Sat, Sep 3, 2016 at 10:02 AM, Jacques Nadeau <
>> jacq...@apache.org>
>>>>>>>> wrote:
>>>>>>>>>> 
>>>>>>>>>> +1 on shading guava/protobuf.
>>>>>>>>>> 
>>>>>>>>>> On Sat, Sep 3, 2016 at 9:48 AM, Andrew Purtell <
>>>>>>>> andrew.purt...@gmail.com>
>>>>>>>>>> wrote:
>>>>>>>>>> 
>>>>>>>>>>> Since Calcite should become a widely used library (smile) I
>> think it
>>>>>>>>>> would
>>>>>>>>>>> be prudent to shade Guava and protobuf if Calcite depends on
>> them.
>>>>> Then
>>>>>>>>>> you
>>>>>>>>>>> will play very nicely indeed on the classpath no matter what
>>>>> versions
>>>>>>>> are
>>>>>>>>>>> required by calling code.
>>>>>>>>>>> 
>>>>>>>>>>> Jacques - Good lord. Let me see about shading HBase use of
>> Guava, or
>>>>>>>>>>> eliminating it. Unfortunately that will be no help in the short
>>>>> term.
>>>>>>>>>>> Related, our Stack is wrestling with shading protobuf already,
>> and
>>>>> is
>>>>>>>>>> neck
>>>>>>>>>>> deep in the Swamp of Classloading at the moment.
>>>>>>>>>>> 
>>>>>>>>>>>> On Sep 3, 2016, at 9:06 AM, Jacques Nadeau <jacq...@apache.org>
>>>>>>>> wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>> It isn't a real solution but in Drill we solved the HBase
>>>>>>>>>> incompatibility
>>>>>>>>>>>> issue on the server side (for tests only) by patching Guava 18
>> to
>>>>>>>> allow
>>>>>>>>>>> the
>>>>>>>>>>>> HBase Guava calls that are missing. They are really quite
>> trivial
>>>>> and
>>>>>>>>>>>> support Andrew's arguments that Guava is the devil...
>>>>>>>>>>>> 
>>>>>>>>>>>> https://github.com/apache/drill/blob/master/exec/java-
>>>>>>>>>>> exec/src/main/java/org/apache/drill/exec/util/GuavaPatcher.java
>>>>>>>>>>>> 
>>>>>>>>>>>> On Sat, Sep 3, 2016 at 8:16 AM, Andrew Purtell <
>>>>>>>>>> andrew.purt...@gmail.com
>>>>>>>>>>>> 
>>>>>>>>>>>> wrote:
>>>>>>>>>>>> 
>>>>>>>>>>>>> While that seems very unfriendly of them, the main issue is
>> Guava
>>>>> is
>>>>>>>>>> the
>>>>>>>>>>>>> devil (and protobuf is a minor demon). Would shading be an
>> option?
>>>>>>>>>>>>> 
>>>>>>>>>>>>>> On Sep 3, 2016, at 2:03 AM, CPC <acha...@gmail.com> wrote:
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>> Cassandra driver 3.x require min guava 16.0.1. If it detects
>> an
>>>>>>>>>> earlier
>>>>>>>>>>>>>> version in classpath it stops working.
>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> On Sep 3, 2016 04:26, "Julian Hyde" <jh...@apache.org>
>> wrote:
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> James & Andrew, I hear you. We’ll stay on Guava 12 if we have
>>>>> to.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> But can we try an experiment to see if it’s possible to get
>> away
>>>>>>>>>> with
>>>>>>>>>>>>> 14?
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> I propose that Maryann (who is developing the branch of
>> Phoenix
>>>>>>>> that
>>>>>>>>>>>>> uses
>>>>>>>>>>>>>>> Calcite) tries running with https://github.com/apache/
>>>>>>>>>>> calcite/pull/277
>>>>>>>>>>>>> <
>>>>>>>>>>>>>>> https://github.com/apache/calcite/pull/277>. If we discover
>>>>>>>>>> problems,
>>>>>>>>>>>>> we
>>>>>>>>>>>>>>> can try various solutions, like make the DateRangeRules
>>>>> disabled by
>>>>>>>>>>>>> default
>>>>>>>>>>>>>>> (these, and the Druid adapter, are the only parts of Calcite
>>>>> that
>>>>>>>>>> need
>>>>>>>>>>>>>>> Guava 14), or even copy the Guava classes that we need. If
>> there
>>>>>>>>>>> aren’t
>>>>>>>>>>>>>>> problems, it means that we’ve slipped out of the shackles of
>>>>>>>> inertia
>>>>>>>>>>>>> that
>>>>>>>>>>>>>>> are trying to drag us into an early grave.
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> Julian
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> On Sep 2, 2016, at 5:35 PM, James Taylor <
>>>>> jamestay...@apache.org>
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> On the server-side, HBase depends on Guava 12 (because
>> Hadoop
>>>>>>>>>> depends
>>>>>>>>>>>>> on
>>>>>>>>>>>>>>>> the same). For that reason, we've made sure Phoenix can work
>>>>> with
>>>>>>>>>>> this
>>>>>>>>>>>>>>>> version too. Phoenix may not need to depend on Calcite on
>> the
>>>>>>>>>>>>>>> server-side,
>>>>>>>>>>>>>>>> and Phoenix and HBase both have shading, so there may be
>> some
>>>>>>>>>> avenues
>>>>>>>>>>>>> of
>>>>>>>>>>>>>>>> escape.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> Sorry for the muddled answer.
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> On Fri, Sep 2, 2016 at 5:21 PM, Andrew Purtell <
>>>>>>>>>> apurt...@apache.org
>>>>>>>>>>>> 
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Use of Guava 14 introduces at least a compile time problem
>>>>> with
>>>>>>>>>>> HBase,
>>>>>>>>>>>>>>> upon
>>>>>>>>>>>>>>>>> which Phoenix depends, so I'm not sure Phoenix can move
>> off of
>>>>>>>> 13.
>>>>>>>>>>> I'd
>>>>>>>>>>>>>>> be
>>>>>>>>>>>>>>>>> happy to be proven wrong.
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> On Fri, Sep 2, 2016 at 4:35 PM, Julian Hyde <
>>>>> jh...@apache.org>
>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Calcite currently supports a wide range of Guava versions,
>>>>> from
>>>>>>>>>>>>> 12.0.1
>>>>>>>>>>>>>>> to
>>>>>>>>>>>>>>>>>> 19.0*. For https://issues.apache.org/
>>>>> jira/browse/CALCITE-1334 <
>>>>>>>>>>>>>>>>>> https://issues.apache.org/jira/browse/CALCITE-1334> I’d
>>>>> like to
>>>>>>>>>>> use
>>>>>>>>>>>>>>>>>> RangeSet, which was introduced in Guava 14.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Would anyone have a problem if we made Calcite’s minimum
>>>>> Guava
>>>>>>>>>>>>> version
>>>>>>>>>>>>>>>>>> 14.0.1?
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> I see that Hive uses 14.0.1, Phoenix uses 13, Drill uses
>> 18.
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> Julian
>>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>>> * Except for the Druid adapter, which requires 14; see
>>>>>>>>>>>>>>>>>> https://issues.apache.org/jira/browse/CALCITE-1325 <
>>>>>>>>>>>>>>>>>> https://issues.apache.org/jira/browse/CALCITE-1325>
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>> Best regards,
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> - Andy
>>>>>>>>>>>>>>>>> 
>>>>>>>>>>>>>>>>> Problems worthy of attack prove their worth by hitting
>> back. -
>>>>>>>>>> Piet
>>>>>>>>>>>>> Hein
>>>>>>>>>>>>>>>>> (via Tom White)
>>>>> 
>> 
>> 
> 
> 
> -- 
> Best regards,
> 
>   - Andy
> 
> Problems worthy of attack prove their worth by hitting back. - Piet Hein
> (via Tom White)

Reply via email to