I've been bitten three times: once by CacheBuilder, once by Stopwatch, once by 
Service. 

> On Sep 6, 2016, at 12:10 PM, Julian Hyde <jh...@apache.org> wrote:
> 
> 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