I have updated KIP-50 <https://cwiki.apache.org/confluence/display/KAFKA/KIP-50+-+Move+Authorizer+to+a+separate+package> and PR <https://github.com/apache/kafka/pull/861> as per recent discussions. Please take a look.
@Harsha / Don, it would be nice if you guys can review the KIP and PR as well. On Mon, Apr 11, 2016 at 7:36 PM, Ashish Singh <asi...@cloudera.com> wrote: > Yes, Jun. I would like to try get option 2 in, if possible in 0.10. I am > not asking for delaying 0.10 for it, but some reviews and early feedback > would be great. At this point this is what I have in mind. > > 1. Move authorizer and related entities to its own package. Note that I am > proposing to drop scala interface completely. Ranger team is fine with it > and I will update Sentry. > 2. The only new public method that will be added to authorizer interface > is description(). > 3. Update SimpleAclAuthorizer to use the new interface and classes. > > On Mon, Apr 11, 2016 at 6:38 PM, Jun Rao <j...@confluent.io> wrote: > >> Ashish, >> >> So, you want to take a shot at option 2 for 0.10.0? That's fine with me >> too. I am just not sure if we have enough time to think through the >> changes. >> >> Thanks, >> >> Jun >> >> On Mon, Apr 11, 2016 at 6:05 PM, Ashish Singh <asi...@cloudera.com> >> wrote: >> >> > Hello Jun, >> > >> > The 3rd option will require Apache Sentry to go GA with current >> authorizer >> > interface, and at this point it seems that the interface won't last >> long. >> > Within a few months, Sentry will have to make a breaking change. I do >> > understand that Kafka should not have to delay its release due to one of >> > the authorizer implementations. However, can we assist Sentry users to >> > avoid that breaking upgrade? I think it is worth a shot. If the changes >> are >> > not done by 0.10 code freeze, then sure lets punt it to next release. >> Does >> > this seem reasonable to you? >> > >> > On Sun, Apr 10, 2016 at 11:42 AM, Jun Rao <j...@confluent.io> wrote: >> > >> > > Ashish, >> > > >> > > A 3rd option is to in 0.10.0, just sanity check the principal type in >> the >> > > implementation of addAcls/removeAcls of Authorizer, but don't change >> the >> > > Authorizer api to add the getDescription() method. This fixes the >> > immediate >> > > issue that an acl rule with the wrong principal type is silently >> ignored. >> > > Knowing valid user types is nice, but not critical (we can include the >> > > supported user type in the UnsupportedPrincipalTypeException thrown >> from >> > > addAcls/removeAcls). This will give us more time to clean up the >> > Authorizer >> > > api post 0.10.0. >> > > >> > > Thanks >> > > >> > > Jun >> > > >> > > On Fri, Apr 8, 2016 at 9:04 AM, Ashish Singh <asi...@cloudera.com> >> > wrote: >> > > >> > > > 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 >> > > > >> > > >> > >> > >> > >> > -- >> > >> > Regards, >> > Ashish >> > >> > > > > -- > > Regards, > Ashish > -- Regards, Ashish