BookKeeper is not using the two recipes then, NodeCache and PathChildrenCache. 
I think we can safely release and document the workaround for those that need 
it.

-Jordan

> On May 27, 2020, at 9:51 AM, Enrico Olivelli <eolive...@gmail.com> wrote:
> 
> Jordan and Cameron
> I have double checked most of the projects I am aware and finally I came to
> the conclusion that upgrading to 5.0 in all of my cases is safe.
> 
> I only add a nuisance on Apache BookKeeper because we are building with
> -Werror and so using deprecated APIs is seen as an error, but it is not a
> binary compatibility issue.
> 
> I have also run locally tests of the staged sources.
> I am casting my +1
> 
> I think that this discussion as been useful for the community
> 
> Thank you
> Enrico
> 
> Il giorno mer 27 mag 2020 alle ore 00:55 Jordan Zimmerman <
> jor...@jordanzimmerman.com <mailto:jor...@jordanzimmerman.com>> ha scritto:
> 
>> If that comes to pass I'll write a new Tech Note on the wiki on how to
>> create a Compatibility JAR.
>> 
>> -JZ
>> 
>>> On May 26, 2020, at 5:41 PM, Cameron McKenzie <mckenzie....@gmail.com>
>> wrote:
>>> 
>>> I will release on Sunday if we haven't got any feedback indicating we
>>> should do otherwise.
>>> 
>>> On Wed, May 27, 2020 at 6:32 AM Enrico Olivelli <eolive...@gmail.com
>> <mailto:eolive...@gmail.com <mailto:eolive...@gmail.com>>> wrote:
>>> 
>>>> 
>>>> 
>>>> Il giorno mar 26 mag 2020 alle ore 21:53 Jordan Zimmerman <
>>>> jor...@jordanzimmerman.com <mailto:jor...@jordanzimmerman.com>> ha scritto:
>>>> 
>>>>> The initial email is almost a week old. I posted on Curator's Twitter
>>>>> account too. No response from anyone other than me Cameron and Enrico.
>> Very
>>>>> discouraging. Let's give it to the end of the week. If no one responds
>> I
>>>>> suggest we release and tell people how to work around it if they need
>> to.
>>>>> 
>>>> 
>>>> Agreed
>>>> 
>>>> Enrico
>>>> 
>>>> 
>>>> 
>>>>> 
>>>>> -JZ
>>>>> 
>>>>> On May 25, 2020, at 9:10 AM, Jordan Zimmerman <
>> jor...@jordanzimmerman.com <mailto:jor...@jordanzimmerman.com>>
>>>>> wrote:
>>>>> 
>>>>> If most of the problem is about ListenerContainer, don't we have a way
>> to
>>>>> keep it and emulate it using and implementation based on the new API ?
>>>>> 
>>>>> 
>>>>> Unfortunately not. The issue is that it leaks a Guava class (Function)
>> in
>>>>> its API. See here:
>>>>> 
>> https://github.com/apache/curator/blob/apache-curator-4.1.1/curator-framework/src/main/java/org/apache/curator/framework/listen/ListenerContainer.java#L87
>>  
>> <https://github.com/apache/curator/blob/apache-curator-4.1.1/curator-framework/src/main/java/org/apache/curator/framework/listen/ListenerContainer.java#L87>
>>>>> 
>>>>> -JZ
>>>>> 
>>>>> On May 25, 2020, at 1:33 AM, Enrico Olivelli <eolive...@gmail.com 
>>>>> <mailto:eolive...@gmail.com>>
>> wrote:
>>>>> 
>>>>> Il giorno dom 24 mag 2020 alle ore 23:17 Jordan Zimmerman <
>>>>> jor...@jordanzimmerman.com <mailto:jor...@jordanzimmerman.com>> ha 
>>>>> scritto:
>>>>> 
>>>>> Enrico,
>>>>> 
>>>>> It reminds me of the breaking changes in Guava and other widely used
>>>>> libraries.
>>>>> 
>>>>> 
>>>>> 
>>>>> In fact Guava is terrible for people (like in my company) that deal
>> with
>>>>> lots of third party dependencies.
>>>>> 
>>>>> 
>>>>> The problem for us is that we can never change our APIs if this is the
>>>>> case. Note that ListenerContainer has been marked deprecated since
>> 4.1.1 (
>>>>> 
>>>>> 
>> https://github.com/apache/curator/blob/apache-curator-4.1.1/curator-framework/src/main/java/org/apache/curator/framework/listen/ListenerContainer.java
>>  
>> <https://github.com/apache/curator/blob/apache-curator-4.1.1/curator-framework/src/main/java/org/apache/curator/framework/listen/ListenerContainer.java>
>>>>> <
>>>>> 
>>>>> 
>> https://github.com/apache/curator/blob/apache-curator-4.1.1/curator-framework/src/main/java/org/apache/curator/framework/listen/ListenerContainer.java
>>  
>> <https://github.com/apache/curator/blob/apache-curator-4.1.1/curator-framework/src/main/java/org/apache/curator/framework/listen/ListenerContainer.java>
>>>>> 
>>>>> ).
>>>>> 
>>>>> 
>>>>> 
>>>>> I didn't check the code yet, I am sorry, so maybe I saying something
>> that
>>>>> is not doable.
>>>>> If most of the problem is about ListenerContainer, don't we have a way
>> to
>>>>> keep it and emulate it using and implementation based on the new API ?
>>>>> 
>>>>> as Jordan said, any other comment from the community will be very
>>>>> appreciated, maybe we are talking about smoke.
>>>>> 
>>>>> Enrico
>>>>> 
>>>>> 
>>>>> 
>>>>> So, we're really left with these options:
>>>>> 
>>>>> Release Curator 5.0 and let the issues fall onto those with
>> compatibility
>>>>> problems
>>>>> Bundle or refer to a compatibility JAR that is put early in the
>> CLASSPATH
>>>>> as I outlined in my test project
>>>>> Move Curator 5.0 to a new package so that it can exist in the same JVM
>> as
>>>>> earlier versions of Curator.
>>>>> Backout the change and mark the APIs as deprecated and push the
>> problem to
>>>>> a future version
>>>>> 
>>>>> -Jordan
>>>>> 
>>>>> On May 24, 2020, at 3:58 PM, Enrico Olivelli <eolive...@gmail.com 
>>>>> <mailto:eolive...@gmail.com>>
>>>>> 
>>>>> wrote:
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> Il Dom 24 Mag 2020, 22:48 Cameron McKenzie <cammcken...@apache.org 
>>>>> <mailto:cammcken...@apache.org>
>>>>> 
>>>>> <mailto:cammcken...@apache.org <mailto:cammcken...@apache.org> 
>>>>> <mailto:cammcken...@apache.org <mailto:cammcken...@apache.org>> <
>> cammcken...@apache.org <mailto:cammcken...@apache.org> 
>> <mailto:cammcken...@apache.org <mailto:cammcken...@apache.org>>>>> ha 
>> scritto:
>>>>> 
>>>>> Enrico,
>>>>> Can you explain your environment that exposes these backwards
>>>>> compatibility issues?
>>>>> 
>>>>> Cameron,
>>>>> Let's say we have two libraries Foo and Bar that are compiled for
>>>>> 
>>>>> Curator 4.x.
>>>>> 
>>>>> 
>>>>> I am now using in my Application Baz that use both Foo and Bar. So I
>>>>> 
>>>>> have Curator 4.x on the classpath.
>>>>> 
>>>>> Developers of Foo want to move to Curator 5.x in Foo 2.0, but Bar is
>>>>> 
>>>>> still happy with Curator 4.x.
>>>>> 
>>>>> 
>>>>> If I want to upgrade Foo to 2.0 I have these chances:
>>>>> 1) Curator 5 is compatible with 4.x,so I can simply keep 5 and
>>>>> 
>>>>> everything works
>>>>> 
>>>>> 2) Curator 5 is not compatible with 4.x so I can't have both (this is
>>>>> 
>>>>> current case)
>>>>> 
>>>>> 3) Curator 5 is independent from 4.x and I can keep both of them
>>>>> 
>>>>> The best option for users is 1).
>>>>> 
>>>>> 3) is good anyway, but it needs more work for users that want to
>> migrate.
>>>>> 
>>>>> Option 2) is not good. Users will have to shade/relocate Curator 5 or 4
>>>>> 
>>>>> and Foo 2.0 or Bar.
>>>>> 
>>>>> 
>>>>> Hope that this explains better the problem
>>>>> Enrico
>>>>> 
>>>>> 
>>>>> I am probably coming from a place of ignorance, but I
>>>>> haven't seen new versions of a third party binary being dropped into an
>>>>> existing environment without recompiling the application, so I have
>> never
>>>>> encountered these binary compatibility issues before. My expectation
>> with
>>>>> this release was that if you wanted to pickup the changes in Curator
>> 5.0
>>>>> that you would rebuild your application against the new binaries and
>> then
>>>>> redeploy the application. Obviously this compilation will break if you
>>>>> 
>>>>> are
>>>>> 
>>>>> using any of the changed APIs, but they are pretty trivial change to
>> fix.
>>>>> We could potentially deprecate the existing APIs and add the new ones,
>>>>> 
>>>>> but
>>>>> 
>>>>> this will produce more tech debt to clean up later.
>>>>> cheers
>>>>> 
>>>>> On Sat, May 23, 2020 at 7:40 PM Enrico Olivelli <eolive...@gmail.com 
>>>>> <mailto:eolive...@gmail.com>
>> <mailto:eolive...@gmail.com <mailto:eolive...@gmail.com>>
>>>>> 
>>>>> <mailto:eolive...@gmail.com <mailto:eolive...@gmail.com> 
>>>>> <mailto:eolive...@gmail.com <mailto:eolive...@gmail.com>> <
>> eolive...@gmail.com <mailto:eolive...@gmail.com> <mailto:eolive...@gmail.com 
>> <mailto:eolive...@gmail.com>>>>> wrote:
>>>>> 
>>>>> 
>>>>> I will check you trick ad soon as possible. I am sorry, this is a very
>>>>> busy week for me and do not have enough cycles. But I think that we
>>>>> 
>>>>> should
>>>>> 
>>>>> address this problem in order to ease the adoption of the new code and
>>>>> 
>>>>> APIs.
>>>>> 
>>>>> 
>>>>> Did you evaluate to eventually rollback the breaking changes?
>>>>> 
>>>>> Another alternative, if we want to let users use both the old and the
>>>>> 
>>>>> new
>>>>> 
>>>>> APIs is to simply rename all of the packages and start a brand new
>>>>> 
>>>>> system.
>>>>> 
>>>>> This approach was done in Apache Commons and IIRC it will be done with
>>>>> Netty5. We also did it with the new Apache Bookkeeper API.
>>>>> 
>>>>> Pros:
>>>>> No need to preserve compatibility, we are free to clean up all of the
>>>>> 
>>>>> tech
>>>>> 
>>>>> debt.
>>>>> The switch to Curator 5 will be explicit opted in
>>>>> 
>>>>> Cons:
>>>>> Cherry picks won't be straightforward.
>>>>> 
>>>>> Enrico
>>>>> 
>>>>> Il Ven 22 Mag 2020, 23:40 Jordan Zimmerman <jor...@jordanzimmerman.com 
>>>>> <mailto:jor...@jordanzimmerman.com>
>> <mailto:jor...@jordanzimmerman.com <mailto:jor...@jordanzimmerman.com>>
>>>>> 
>>>>> <mailto:jor...@jordanzimmerman.com <mailto:jor...@jordanzimmerman.com> 
>>>>> <mailto:jor...@jordanzimmerman.com <mailto:jor...@jordanzimmerman.com>>
>> <jor...@jordanzimmerman.com <mailto:jor...@jordanzimmerman.com> 
>> <mailto:jor...@jordanzimmerman.com <mailto:jor...@jordanzimmerman.com>>>>>
>>>>> 
>>>>> ha scritto:
>>>>> 
>>>>> Hi Everyone,
>>>>> 
>>>>> I've coded a possible solution in the test project. See here:
>>>>> 
>>>>> 
>>>>> 
>> https://github.com/Randgalt/curator_5_0_test/blob/master/combo/pom.xml#L49 
>> <https://github.com/Randgalt/curator_5_0_test/blob/master/combo/pom.xml#L49>
>> <
>> https://github.com/Randgalt/curator_5_0_test/blob/master/combo/pom.xml#L49 
>> <https://github.com/Randgalt/curator_5_0_test/blob/master/combo/pom.xml#L49>
>>> 
>>>>> <
>>>>> 
>> https://github.com/Randgalt/curator_5_0_test/blob/master/combo/pom.xml#L49
>> <
>> https://github.com/Randgalt/curator_5_0_test/blob/master/combo/pom.xml#L49
>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> It uses the Maven dependency plugin to create a small compatibility
>>>>> 
>>>>> JAR
>>>>> 
>>>>> that contains the Curator 4.3.0 versions of the classes that have
>>>>> 
>>>>> changed
>>>>> 
>>>>> in 5.0.0 (i.e. the ones that no longer return ListenerContainer). If
>>>>> 
>>>>> this
>>>>> 
>>>>> JAR is included in a CLASSPATH before Curator 5.0.0's JARs, these old
>>>>> classes will take precedence and thus old binaries will continue to
>>>>> 
>>>>> work.
>>>>> 
>>>>> The curator_5_0_test shows this. run.sh is the previous way with the
>>>>> error. run-compatibility.sh is with the compatibility JAR.
>>>>> 
>>>>> Thoughts? Notable, this doesn't change the master code of Curator at
>>>>> 
>>>>> all.
>>>>> 
>>>>> We could add it to the 5.0 release. I don't think there's an issue
>>>>> 
>>>>> with
>>>>> 
>>>>> this "hack". Can anyone think of one? I'd really appreciate people
>>>>> 
>>>>> testing
>>>>> 
>>>>> with it. Try a build with just Curator 5.0 and then install and
>>>>> 
>>>>> include
>>>>> 
>>>>> this curator-5_0-test:combo:1.0-SNAPSHOT early in the CLASSPATH - it
>>>>> 
>>>>> should
>>>>> 
>>>>> work.
>>>>> 
>>>>> -Jordan
>>>>> 
>>>>> On May 21, 2020, at 10:43 AM, Jordan Zimmerman <
>>>>> jor...@jordanzimmerman.com <mailto:jor...@jordanzimmerman.com>
>> <mailto:jor...@jordanzimmerman.com <mailto:jor...@jordanzimmerman.com> 
>> <mailto:jor...@jordanzimmerman.com <mailto:jor...@jordanzimmerman.com>>
>>>>> <jor...@jordanzimmerman.com>>>
>>>>> 
>>>>> wrote:
>>>>> 
>>>>> 
>>>>> Hello All,
>>>>> 
>>>>> Sorry for the cross-posting but this is important enough to justify
>>>>> 
>>>>> it.
>>>>> 
>>>>> 
>>>>> Apache Curator is in the process of releasing version 5.0. We've taken
>>>>> the opportunity to address some long standing tech debt but this
>>>>> 
>>>>> causes
>>>>> 
>>>>> breaking changes. We've detailed the breaks here:
>>>>> http://curator.apache.org/staging/breaking-changes.html <
>>>>> 
>>>>> http://curator.apache.org/staging/breaking-changes.html>. The Clirr
>>>>> 
>>>>> report shows the exact API changes:
>>>>> http://curator.apache.org/staging/curator-recipes/clirr-report.html <
>>>>> 
>>>>> http://curator.apache.org/staging/curator-recipes/clirr-report.html>.
>> The
>>>>> 
>>>>> first two of these are the most worrisome. NodeCache's and
>>>>> PathChildrenCache's getListenable() methods now have a different
>>>>> 
>>>>> return
>>>>> 
>>>>> type. This has far reaching implications. If a Curator user were to
>>>>> 
>>>>> drop in
>>>>> 
>>>>> Curator 5.0 without any code changes they will get runtime exceptions
>>>>> 
>>>>> when
>>>>> 
>>>>> these methods are called.
>>>>> 
>>>>> I've written a test that shows the problem:
>>>>> 
>>>>>      git clone https://github.com/Randgalt/curator_5_0_test.git <
>>>>> 
>>>>> https://github.com/Randgalt/curator_5_0_test.git>
>>>>> 
>>>>>      cd curator_5_0_test
>>>>>      ./run.sh
>>>>> 
>>>>> You will see:
>>>>> 
>>>>> java.lang.NoSuchMethodError:
>>>>> 
>>>>> 
>>>>> 
>> org.apache.curator.framework.recipes.cache.PathChildrenCache.getListenable()Lorg/apache/curator/framework/listen/ListenerContainer;
>>>>> 
>>>>> at binary.Curator50Test.run(Curator50Test.java:26)
>>>>> at test.Test.main(Test.java:9)
>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>>> at
>>>>> 
>>>>> 
>>>>> 
>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
>>>>> 
>>>>> at
>>>>> 
>>>>> 
>>>>> 
>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>>>> 
>>>>> at java.lang.reflect.Method.invoke(Method.java:498)
>>>>> at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:297)
>>>>> at java.lang.Thread.run(Thread.java:748)
>>>>> 
>>>>> Enrico Olivelli brought this to our attention. Curator 5.0 is a major
>>>>> version bump so breaking changes are implied. But, maybe this is
>>>>> 
>>>>> blocker?
>>>>> 
>>>>> What do people think? If this is a serious enough concern we can come
>>>>> 
>>>>> up
>>>>> 
>>>>> with a workaround.
>>>>> 
>>>>> Please discuss and let's hold off completing the current release until
>>>>> this has been fully discussed.
>>>>> 
>>>>> -Jordan

Reply via email to