On Tue, Dec 5, 2017 at 6:43 PM, Christopher <ctubb...@apache.org> wrote: > I was wondering about Hadoop 3 shading and whether that would help us. It > would be really nice if it could, or if there was some other class path > solution that was easy. > > I think there are two major issues in this thread. The first is the API > problems. The second is the Hadoop 3 support. They are related, but I think > quickly dealing with the API issues can clarify what our options are for > Hadoop 3. > > > > > To fix the API, I would like to get consensus on proceeding with this path: > > 1. Rename 1.8.2-SNAPSHOT to 1.9.0-SNAPSHOT and deprecate the existing > ZooKeeperInstance constructor which takes a Configuration > a) Deprecate ClientConfiguration and replace with ClientConfig (or a > better name) which does not extend Configuration or have API leak problems, > and add a new ZKI constructor for this > b) Ignore extends for now, and drop it from ClientConfiguration in 2.0 > with a break (can't deprecate superclass), and add new ZKI constructor for > more specific ClientConfiguration next to deprecated one > 2. Drop deprecated stuff from 2.0 branch (and extends, if option 1.b was > chosen) > 3. Plan a 1.9.0 release instead of 1.8.2 > > I prefer 1.a over 1.b, personally, but I've been tossing back and forth. I > would need input on which is best. There are pros and cons to both, > regarding churn, and source and binary compatibility.
For 1.a there is no way to maintain source or binary compat going from 1.x where x<9 to 2.y. For 1.b it seems that you can get get source compat (but not binary) in some cases when going from 1.x where x<9 to 2.y. Based on this it seems that 1.b may be better because its source compat sometimes, where 1.a is never source compat. > > > > > Once we deal with the API, our options for Hadoop 3 become: > > A. Use Hadoop 3 shaded artifacts or some other class path solution (such as > getting lucky identifying a version of commons-beanutils that works for > both) > B. Shade in 1.9 with a breaking change > C. Create a 1.9 version named 2.0, so we can do a breaking change without > semver violation; shade in this version > D. Shade in the branch we're currently calling 2.0 > > I think we can defer that decision pending some further > investigation/experimentation into what works, and deal with it after > dealing with steps 1-3 above (but soon after, hopefully). > > > > On Tue, Dec 5, 2017 at 3:58 PM Josh Elser <els...@apache.org> wrote: > >> Another potential suggestion I forgot about: we try to just move to the >> Hadoop shaded artifacts. This would invalidate the need to do more, but >> I have no idea how "battle-tested" those artifacts are. >> >> On 12/5/17 3:52 PM, Keith Turner wrote: >> > If we do the following. >> > >> > * Drop ZooKeeperInstance.ZooKeeperInstance(Configuration config) >> method. >> > * Drop extends from ClientConfig >> > * Add a method ZooKeeperInstance.ZooKeeperInstance(ClientConfig config) >> > >> > Then this will not be binary compatible, so it will still be painful >> > in many cases. It may be source compatible. >> > >> > For example the following will be source (but not binary) compatible. >> > >> > ClientConfiguration cc = new ClientConfiguration(file); >> > //when compiled against older version of Accumulo will bind to >> > method with commons config signature >> > //when recompiled will bind to clientconfig version of method >> > ZooKeeperInstance zki = new ZooKeeperInstance(cc); >> > >> > The following would not be source or binary compatible. >> > >> > Configuration cc = new ClientConfiguration(file); >> > ZooKeeperInstance zki = new ZooKeeperInstance(cc); >> > >> > >> > On Tue, Dec 5, 2017 at 3:40 PM, Josh Elser <els...@apache.org> wrote: >> >> >> >> >> >> On 12/5/17 3:28 PM, Keith Turner wrote: >> >>> >> >>> On Tue, Dec 5, 2017 at 2:53 PM, Josh Elser<els...@apache.org> wrote: >> >>>> >> >>>> Interesting. What makes you want to deprecate ClientConfig entirely? >> >>>> >> >>>> I'd be worried about removing without sufficient thought of >> replacement >> >>>> around. It would be a bit "churn-y" to introduce yet another way that >> >>>> clients have to connect (since it was introduced in 1.6-ish?). Working >> >>>> around the ClientConfig changes was irritating for the downstream >> >>>> integrations (Hive, most notably). >> >>> >> >>> Ok maybe thats a bad idea, not looking to cause pain. Here were some >> >>> of my goals. >> >>> >> >>> * Remove commons config from API completely via deprecation cycle. >> >>> * Introduce API that supports putting all props needed to connect to >> >>> Accumulo in an API. >> >>> >> >>> I suppose if we want to keep ClientConfig class in API, then there is >> >>> no way to remove commons config via a deprecation cycle?? We can't >> >>> deprecate the extension of commons config, all we can do is just drop >> >>> it at some point. >> >>> >> >> >> >> My line of thinking is that the majority of the time, we're creating a >> >> ClientConfiguration by one of: >> >> >> >> * ClientConfiguration#loadDefault() >> >> * new ClientConfiguration(String) >> >> * new ClientConfiguration(File) >> >> >> >> Granted, we also inherit/expose a few other things (notably extending >> >> CompositeConfiguration and throwing ConfigurationException). I would be >> >> comfortable with dropping those w/o deprecation. I have not seen >> evidence >> >> from anyone that they are widely in use by folks (although I've not >> >> explicitly asked, either). >>