Thanks for the input Don. One of the possible paths for Option 2 is to completely drop Scala interface, would that be Ok with you folks?
On Thursday, April 7, 2016, Don Bosco Durai <bo...@apache.org> wrote: > Ranger team would prefer option #2. Right now, we have to access some of > the nested constants using constructs like Group$.MODULE$, which is not > intuitive in Java. > > Thanks > > Bosco > > > > > On 4/7/16, 4:30 PM, "Ashish Singh" <asi...@cloudera.com <javascript:;>> > wrote: > > >Harsha/ Don, > > > >Are you guys OK with option 2? I am not aware of all the existing > >authorizer implementations, however ranger has one for sure. Getting > direct > >feedback from you guys will be really valuable. > > > >On Thu, Apr 7, 2016 at 3:52 PM, Ismael Juma <ism...@juma.me.uk > <javascript:;>> wrote: > > > >> Hi Don, > >> > >> This is true in Java 7, but Java 8 introduces default methods and this > >> workaround is no longer required. During the Interceptor KIP > discussion, it > >> was decided that it was fine to stick to interfaces given that we are > >> likely to move to Java 8 in the nearish future (probably no later than > the > >> Java 9 release). > >> > >> Ismael > >> > >> On Thu, Apr 7, 2016 at 11:36 PM, Don Bosco Durai <bo...@apache.org > <javascript:;>> wrote: > >> > >> > Hi Ashish > >> > > >> > If we are going by option #2, then I can suggest we give an abstract > >> > implementation of the Interface and recommend anyone implementing > their > >> own > >> > plugin to extend from the abstract class, rather than implement the > >> > interface? > >> > > >> > The advantage is, in the future if we add add any new methods in the > >> > Interface (e.g. Similar to getDescription()), then we can give a dummy > >> > implementation of the new method and this won’t break the compilation > of > >> > any external implementation. Else over the time it will be challenging > >> for > >> > anyone customizing the implementation to keep track of changes to the > >> > Interface. > >> > > >> > Thanks > >> > > >> > Bosco > >> > > >> > > >> > > >> > > >> > On 4/7/16, 11:21 AM, "Ashish Singh" <asi...@cloudera.com > <javascript:;>> wrote: > >> > > >> > >Hello Harsha, > >> > > > >> > >On Thu, Apr 7, 2016 at 11:03 AM, Harsha <m...@harsha.io > <javascript:;>> wrote: > >> > > > >> > >"My only ask is to have this in 0.10. As Jay pointed out, right now > >> > >> there > >> > >> are not many implementations out there, we might want to fix it > ASAP." > >> > >> > >> > >> Probably there aren't many implementations but there are lot of > users > >> > >> using these implementations in production clusters. > >> > >> Isn't this going to break the rolling upgrade? > >> > > > >> > >It will and it is a concern, in my previous mail I have mentioned > this > >> as > >> > >an issue if we choose to go this route. However, if we actually > decide > >> to > >> > >do this, I would say it is better to do it sooner than later, as > fewer > >> > >implementations will be affected. Below is excerpt from my previous > >> mail. > >> > > > >> > >Increase scope of KIP-50 to move authorizer and related classes to a > >> > >separate package. The new package will have java interface. This will > >> > allow > >> > >implementations to not depend on kafka core and just on authorizer > >> > package, > >> > >make authorization interface follow kafka’s coding standards and will > >> > allow > >> > >java implementations to be cleaner. We can either completely drop > scala > >> > >interface, which might be a pain for existing implementations, or we > can > >> > >have scala interface wrap java interface. Later allows a cleaner > >> > >deprecation path for existing scala authorizer interface, however it > may > >> > or > >> > >may not be feasible as Kafka server will have to somehow decide which > >> > >interface it should be looking for while loading authorizer > >> > implementation, > >> > >this can probably be solved with a config or some reflection. If we > >> choose > >> > >to go this route, I can dig deeper. > >> > > > >> > >If we go with option 2 and commit on getting this in ASAP, > preferably in > >> > >0.10, there will be fewer implementations that will be affected. > >> > > > >> > >and also moving to Java , > >> > >> a authorizer implementation going to run inside a KafkaBroker and I > >> > >> don't see why this is necessary to move to clients package. > >> > >> Are we planning on introducing common module to have it > independent of > >> > >> broker and client code? > >> > >> > >> > >Yes, I think that would take away the requirement of depending on > Kafka > >> > >core from authorizer implementations. Do you suggest otherwise? > >> > > > >> > > > >> > >> -Harsha > >> > >> > >> > >> On Thu, Apr 7, 2016, at 10:52 AM, Ashish Singh wrote: > >> > >> > We might want to take a call here. Following are the options. > >> > >> > > >> > >> > 1. Let KIP-50 be the way it is, i.e., just add > getDescription() > >> to > >> > >> > existing scala authorizer interface. It will break binary > >> > >> > compatibility > >> > >> > (only when using CLI and/or AdminCommand from >= 0.10 against > >> > >> > authorizer > >> > >> > implementations based on 0.9.). If we go this route, it is a > >> > simpler > >> > >> > change > >> > >> > and existing implementations won’t have to change anything on > >> their > >> > >> > end. > >> > >> > 2. Increase scope of KIP-50 to move authorizer and related > >> classes > >> > to > >> > >> > a > >> > >> > separate package. The new package will have java interface. > This > >> > will > >> > >> > allow > >> > >> > implementations to not depend on kafka core and just on > >> authorizer > >> > >> > package, > >> > >> > make authorization interface follow kafka’s coding standards > and > >> > will > >> > >> > allow > >> > >> > java implementations to be cleaner. We can either completely > drop > >> > >> > scala > >> > >> > interface, which might be a pain for existing > implementations, or > >> > we > >> > >> > can > >> > >> > have scala interface wrap java interface. Later allows a > cleaner > >> > >> > deprecation path for existing scala authorizer interface, > however > >> > it > >> > >> > may or > >> > >> > may not be feasible as Kafka server will have to somehow > decide > >> > which > >> > >> > interface it should be looking for while loading authorizer > >> > >> > implementation, > >> > >> > this can probably be solved with a config or some reflection. > If > >> we > >> > >> > choose > >> > >> > to go this route, I can dig deeper. > >> > >> > > >> > >> > If we decide to go with option 1, I think it would be fair to say > >> that > >> > >> > scala authorizer interface will be around for some time, as there > >> > will be > >> > >> > more implementations relying on it. If we go with option 2 and > >> commit > >> > on > >> > >> > getting this in ASAP, preferably in 0.10, there will be fewer > >> > >> > implementations that will be affected. > >> > >> > > >> > >> > *Another thing to notice is that scala authorizer interface is > not > >> > >> > annotated as unstable.* > >> > >> > > >> > >> > > >> > >> > On Wed, Apr 6, 2016 at 9:41 AM, Ashish Singh < > asi...@cloudera.com <javascript:;>> > >> > >> wrote: > >> > >> > > >> > >> > > I see value in minimizing breaking changes and I do not oppose > the > >> > >> idea of > >> > >> > > increasing scope of KIP-50 to move auth interface to java. > >> > >> > > > >> > >> > > As authorizer implementations do not really need to depend on > >> Kafka > >> > >> core, > >> > >> > > I would suggest that we keep authorizer interface and its > >> components > >> > >> in a > >> > >> > > separate package. I share the concern that right now using > >> Resource, > >> > >> > > Operation, etc, in java implementations is messy. I had to deal > >> with > >> > >> lot of > >> > >> > > it while writing Apache Sentry plugin. > >> > >> > > > >> > >> > > My only ask is to have this in 0.10. As Jay pointed out, right > now > >> > >> there > >> > >> > > are not many implementations out there, we might want to fix it > >> > ASAP. > >> > >> I can > >> > >> > > only speak of Sentry integration and I think 0.10 will be the > best > >> > for > >> > >> such > >> > >> > > a change, as I should be able to adopt the changes in Sentry > >> > >> integration > >> > >> > > before a lot of users start using it. > >> > >> > > > >> > >> > > On Wed, Apr 6, 2016 at 9:25 AM, Ismael Juma <ism...@juma.me.uk > <javascript:;>> > >> > wrote: > >> > >> > > > >> > >> > >> It is small, but breaks binary compatibility. > >> > >> > >> > >> > >> > >> Ismael > >> > >> > >> > >> > >> > >> On Wed, Apr 6, 2016 at 5:20 PM, Grant Henke < > ghe...@cloudera.com <javascript:;> > >> > > >> > >> wrote: > >> > >> > >> > >> > >> > >> > KIP-50 as defined is very small. I don't see any harm in > >> putting > >> > it > >> > >> in > >> > >> > >> as > >> > >> > >> > is and then tackling the follow up work. > >> > >> > >> > > >> > >> > >> > > >> > >> > >> > On Wed, Apr 6, 2016 at 11:16 AM, Ismael Juma < > >> ism...@juma.me.uk <javascript:;>> > >> > >> wrote: > >> > >> > >> > > >> > >> > >> > > Thanks Grant. I wonder if KIP-50 should just be done as > part > >> of > >> > >> this > >> > >> > >> > work. > >> > >> > >> > > > >> > >> > >> > > Ismael > >> > >> > >> > > > >> > >> > >> > > On Wed, Apr 6, 2016 at 5:12 PM, Grant Henke < > >> > ghe...@cloudera.com <javascript:;>> > >> > >> > >> wrote: > >> > >> > >> > > > >> > >> > >> > > > My work with KIP-4 found that many of the Scala classes > >> used > >> > in > >> > >> the > >> > >> > >> > > > Authorizer interface are needed in the Clients package > when > >> > >> adding > >> > >> > >> the > >> > >> > >> > > > various ACL requests and responses. I also found that we > >> > don't > >> > >> have > >> > >> > >> > > > standard Exceptions defined for the authorizer > interface. > >> > This > >> > >> means > >> > >> > >> > that > >> > >> > >> > > > when I add the Authorizer calls to the broker and wire > >> > >> protocols all > >> > >> > >> > > > exceptions will be reported as an "Unknown Error" back > to > >> the > >> > >> user > >> > >> > >> via > >> > >> > >> > > the > >> > >> > >> > > > wire protocol. > >> > >> > >> > > > > >> > >> > >> > > > I have written more about it on the KIP-4 wiki and > created > >> > >> jiras to > >> > >> > >> > track > >> > >> > >> > > > those issues (See below). I think we should wrap up this > >> KIP > >> > as > >> > >> is > >> > >> > >> and > >> > >> > >> > > > tackle the Java/Exception changes as a part of those > >> > jiras/kips. > >> > >> > >> > > > > >> > >> > >> > > > - KIP-4 "Follow Up Changes" > >> > >> > >> > > > < > >> > >> > >> > > > > >> > >> > >> > > > >> > >> > >> > > >> > >> > >> > >> > >> > >> > > >> > https://cwiki.apache.org/confluence/display/KAFKA/KIP-4+-+Command+line+and+centralized+administrative+operations#KIP-4-Commandlineandcentralizedadministrativeoperations-FollowUpChangesfollow-up-changes > >> > >> > >> > > > > > >> > >> > >> > > > - KAFKA-3509 < > >> > >> https://issues.apache.org/jira/browse/KAFKA-3509>: > >> > >> > >> > > > Provide > >> > >> > >> > > > an Authorizer interface using the Java client > enumerator > >> > >> classes > >> > >> > >> > > > - KAFKA-3507 < > >> > >> https://issues.apache.org/jira/browse/KAFKA-3507>: > >> > >> > >> > > Define > >> > >> > >> > > > standard exceptions for the Authorizer interface > >> > >> > >> > > > > >> > >> > >> > > > Thank you, > >> > >> > >> > > > Grant > >> > >> > >> > > > > >> > >> > >> > > > On Wed, Apr 6, 2016 at 10:58 AM, Jay Kreps < > >> j...@confluent.io <javascript:;> > >> > > > >> > >> > >> wrote: > >> > >> > >> > > > > >> > >> > >> > > > > Hey Ismael, > >> > >> > >> > > > > > >> > >> > >> > > > > Yeah I think this is a minor cleanliness thing. Since > >> this > >> > is > >> > >> kind > >> > >> > >> > of a > >> > >> > >> > > > > power user interface I don't feel strongly either way. > >> > >> > >> > > > > > >> > >> > >> > > > > My motivation with Scala is just that we've tried to > move > >> > to > >> > >> > >> having > >> > >> > >> > the > >> > >> > >> > > > > public interfaces be Java, and as a group we > definitely > >> > >> struggled > >> > >> > >> a > >> > >> > >> > lot > >> > >> > >> > > > > with understanding and maintaining Scala > compatibility in > >> > the > >> > >> > >> older > >> > >> > >> > > > > clients. > >> > >> > >> > > > > > >> > >> > >> > > > > -Jay > >> > >> > >> > > > > > >> > >> > >> > > > > On Tue, Apr 5, 2016 at 11:46 PM, Ismael Juma < > >> > >> ism...@juma.me.uk <javascript:;>> > >> > >> > >> > > wrote: > >> > >> > >> > > > > > >> > >> > >> > > > > > Hi Jay, > >> > >> > >> > > > > > > >> > >> > >> > > > > > On Wed, Apr 6, 2016 at 3:48 AM, Jay Kreps < > >> > j...@confluent.io <javascript:;> > >> > >> > > >> > >> > >> > wrote: > >> > >> > >> > > > > > > >> > >> > >> > > > > > > Given that we're breaking compatibility anyway > should > >> > we: > >> > >> > >> > > > > > > > >> > >> > >> > > > > > > >> > >> > >> > > > > > We are not breaking source compatibility since the > new > >> > >> method > >> > >> > >> has a > >> > >> > >> > > > > default > >> > >> > >> > > > > > implementation. I take it that you mean binary > >> > >> compatibility? > >> > >> > >> > > > > > > >> > >> > >> > > > > > > >> > >> > >> > > > > > > 1. Remove the get prefix on this method and the > >> > existing > >> > >> one > >> > >> > >> > which > >> > >> > >> > > > > > violate > >> > >> > >> > > > > > > our own code style guidelines (Oops! Kind of sad > we > >> > went > >> > >> > >> through > >> > >> > >> > > the > >> > >> > >> > > > > > whole > >> > >> > >> > > > > > > KIP process and no one even flagged this) > >> > >> > >> > > > > > > > >> > >> > >> > > > > > > >> > >> > >> > > > > > I did flag this during the discussion and Ashish > said > >> he > >> > >> would > >> > >> > >> > change > >> > >> > >> > > > it > >> > >> > >> > > > > if > >> > >> > >> > > > > > other people felt that it should be changed. > >> > >> > >> > > > > > > >> > >> > >> > > > > > > >> > >> > >> > > > > > > 2. Move the interface out of scala to be a normal > >> Java > >> > >> > >> interface > >> > >> > >> > > > > > > > >> > >> > >> > > > > > > This breaks source compatibility but probably > what we > >> > >> should > >> > >> > >> have > >> > >> > >> > > > done > >> > >> > >> > > > > > > originally I suspect. Probably there are few > enough > >> > >> > >> > implementations > >> > >> > >> > > > of > >> > >> > >> > > > > > this > >> > >> > >> > > > > > > that it is better to just rip the bandaid off. > >> > >> > >> > > > > > > > >> > >> > >> > > > > > > >> > >> > >> > > > > > Can you please explain the motivation? It did come > up > >> in > >> > >> > >> previous > >> > >> > >> > > > > > discussions that some things like Operation and > >> > ResourceType > >> > >> > >> should > >> > >> > >> > > be > >> > >> > >> > > > in > >> > >> > >> > > > > > the clients library, but not Authorizer itself. Are > we > >> > >> saying > >> > >> > >> that > >> > >> > >> > > any > >> > >> > >> > > > > > pluggable interface should be in Java so that users > can > >> > >> > >> implement > >> > >> > >> > it > >> > >> > >> > > > > > without including the Scala library? > >> > >> > >> > > > > > > >> > >> > >> > > > > > Grant, you originally suggested that some things > would > >> > have > >> > >> to > >> > >> > >> be > >> > >> > >> > in > >> > >> > >> > > > the > >> > >> > >> > > > > > Java side as well. Can you please elaborate on this? > >> > >> > >> > > > > > > >> > >> > >> > > > > > Ismael > >> > >> > >> > > > > > > >> > >> > >> > > > > > >> > >> > >> > > > > >> > >> > >> > > > > >> > >> > >> > > > > >> > >> > >> > > > -- > >> > >> > >> > > > Grant Henke > >> > >> > >> > > > Software Engineer | Cloudera > >> > >> > >> > > > gr...@cloudera.com <javascript:;> | twitter.com/gchenke > | > >> > >> > >> linkedin.com/in/granthenke > >> > >> > >> > > > > >> > >> > >> > > > >> > >> > >> > > >> > >> > >> > > >> > >> > >> > > >> > >> > >> > -- > >> > >> > >> > Grant Henke > >> > >> > >> > Software Engineer | Cloudera > >> > >> > >> > gr...@cloudera.com <javascript:;> | twitter.com/gchenke | > >> > >> linkedin.com/in/granthenke > >> > >> > >> > > >> > >> > >> > >> > >> > > > >> > >> > > > >> > >> > > > >> > >> > > -- > >> > >> > > > >> > >> > > Regards, > >> > >> > > Ashish > >> > >> > > > >> > >> > > >> > >> > > >> > >> > > >> > >> > -- > >> > >> > > >> > >> > Regards, > >> > >> > Ashish > >> > >> > >> > > > >> > >-- > >> > > > >> > >Regards, > >> > >Ashish > >> > > >> > > >> > > > > > > > >-- > > > >Regards, > >Ashish > > -- Ashish 🎤h