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> 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>> wrote: > > > >> > >> > >> Il giorno mar 26 mag 2020 alle ore 21:53 Jordan Zimmerman < > >> 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> > >>> 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 > >>> > >>> -JZ > >>> > >>> On May 25, 2020, at 1:33 AM, Enrico Olivelli <eolive...@gmail.com> > wrote: > >>> > >>> Il giorno dom 24 mag 2020 alle ore 23:17 Jordan Zimmerman < > >>> 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 > >>> > >>> ). > >>> > >>> > >>> > >>> 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> > >>> > >>> wrote: > >>> > >>> > >>> > >>> > >>> Il Dom 24 Mag 2020, 22:48 Cameron McKenzie <cammcken...@apache.org > >>> > >>> <mailto:cammcken...@apache.org <mailto:cammcken...@apache.org> < > 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> < > 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> > <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 > > > >>> > >>> > >>> > >>> 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> > >>> <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 > >