Hey Guys, If there are no objections or major modifications to suggest I would like to start a vote thread on this. I will wait till EOD today before starting a vote thread.
On Thu, Apr 21, 2016 at 4:36 PM, Gwen Shapira <g...@confluent.io> wrote: > I would like to suggest taking the discussion of "how to break Kafka > down into modules" outside the scope of KIP-50 and outside the scope > of the next release. > > I understand that the current location of the authorizer API is not > ideal, but I want to point out that the scope was already expanded > from a new method to a complete rewrite of the authorizer. Is the > current location really bad enough to expand the scope into larger > refactoring of Kafka? > > Gwen > > On Wed, Apr 20, 2016 at 10:43 PM, Ismael Juma <ism...@juma.me.uk> wrote: > > Hi Jay, > > > > Thanks for summarising the reasoning for the current approach. On the > topic > > of additional jars, the obvious example that came up recently is sharing > > JSON serializers between connect and streams. Given the desire not to > add a > > Jackson dependency to clients, it seems like adding a > kafka-serializer-json > > (or something like that) may be needed. This is similar to the > > kafka-log4j-appender jar that we have today. > > > > When you look at it this way, then the situation is not as clear-cut as > > initially described. Perhaps a way to explain this is that we only add > > additional modules when they introduce a new dependency. > > > > Finally, it seems a bit weird to add something to `common` that is, in > > fact, not common. Would it not make sense to have a separate package for > > pluggable core/server classes (because they are pluggable we want them to > > be in Java and not to be associated with a particular Scala version)? > > > > Ismael > > > > On Wed, Apr 20, 2016 at 4:52 PM, Jay Kreps <j...@confluent.io> wrote: > > > >> Yeah our take when we came up with this approach was pretty much what > Gwen > >> is saying: > >> 1. In practice you either need the server or client to do anything and > the > >> server depends on the client so bundling common and client doesn't hurt. > >> 2. Our experience with more granular jars (not in Kafka) was that > although > >> it feels "cleaner" the complexity comes quickly for a few reasons. > First it > >> gets hard to detangle the more granular packages (e.g. somebody needs to > >> use something in Utils in the authorizer package and then you no longer > >> have a dag). Second people end up mixing and matching in ways you didn't > >> anticipate which causes crazy heisenbugs (e.g. they depend on two > different > >> versions of the client via transitive dependencies and somehow end up > with > >> client version x and common version y due to duplicate entries on the > class > >> path). > >> > >> I'm not really arguing that this approach is superior, I'm just saying > this > >> is the current approach and that is the reason we went with it. > >> > >> So I could see splitting common and client and you could even further > split > >> the producer and consumer and multiple sub-jars in common, and if this > was > >> the approach I think a separate authorizer jar would make sense. But in > the > >> current approach I think the authorizer stuff would be most consistent > as a > >> public package in common. It is true that this means you build against > more > >> stuff then needed but I'm not sure this has any negative implications in > >> practice. > >> > >> -Jay > >> > >> On Wed, Apr 20, 2016 at 4:17 PM, Gwen Shapira <g...@confluent.io> > wrote: > >> > >> > But its just a compile-time dependency, right? > >> > Since the third-party-authorizer-implementation will be installed on a > >> > broker where the common classes will exist anyway. > >> > > >> > > >> > On Wed, Apr 20, 2016 at 3:13 PM, Ashish Singh <asi...@cloudera.com> > >> wrote: > >> > > Jay, > >> > > > >> > > Thanks for the info. I think having common in clients jar makes > sense, > >> as > >> > > their is no direct usage of it. i.e., without depending on or using > >> > > clients. Authorizer is a bit different, as third party > implementations > >> do > >> > > not really need anything from clients or server, all they need is > >> > > Authorizer interface and related classes. If we move authorizer into > >> > > common, then third party implementations will have to depend on > >> clients. > >> > > Though third party implementations depending on clients is not a big > >> > > problem, right now they depend on core, I think it is cleaner to > have > >> > > dependency on minimal modules. Would you agree? > >> > > > >> > > On Wed, Apr 20, 2016 at 2:27 PM, Jay Kreps <j...@confluent.io> > wrote: > >> > > > >> > >> I think it's great that we're moving the interface to java and > fixing > >> > some > >> > >> of the naming foibles. > >> > >> > >> > >> This isn't explicit in the KIP which just refers to the java > package > >> > name > >> > >> (I think), but it looks like you are proposing adding a new > authorizer > >> > jar > >> > >> for this new package and adding it as a dependency for the client > jar. > >> > This > >> > >> is a bit inconsistent with how we decided to package stuff when we > >> > started > >> > >> with the new clients so it'd be good to work that out. > >> > >> > >> > >> To date the categorization has been: > >> > >> 1. Anything which is just in the clients is in org.apache.clients > >> under > >> > >> clients/ > >> > >> 2. Anything which is in the server is kafka.* which is under core/ > >> > >> 3. Anything which is needed in both places (as it sounds like some > >> enums > >> > >> for authorization are?) is in common which is under clients/ > >> > >> > >> > >> org.apache.clients and org.apache.common are both pure java and > >> > dependency > >> > >> free other than the compression libraries and slf4j and are > packaged > >> > into > >> > >> the kafka-clients.java, the server has it's own jar which has > richer > >> > >> dependencies and depends on the client jar. > >> > >> > >> > >> There are other ways this could have been done--e.g. common could > have > >> > been > >> > >> its own library or even split into multiple sub-libraries--but the > >> > decision > >> > >> at that time was just to keep it simple and hard to mess up. Based > on > >> > the > >> > >> experience with the scala clients our plan was to be ultra-hostile > to > >> > any > >> > >> added client dependencies. > >> > >> > >> > >> So I think if we're continuing this model we would put the shared > >> > >> authorizer code somewhere under > >> > >> clients/src/main/java/org/apache/kafka/common as with the other > shared > >> > >> authorizer. If we're moving away from this model we should probably > >> > rethink > >> > >> things and be consistent with this, at the very least splitting up > >> > common > >> > >> and clients. > >> > >> > >> > >> -Jay > >> > >> > >> > >> On Wed, Apr 20, 2016 at 1:04 PM, Ashish Singh <asi...@cloudera.com > > > >> > wrote: > >> > >> > >> > >> > Jun/ Jay/ Gwen/ Harsha/ Ismael, > >> > >> > > >> > >> > As you guys have provided feedback on this earlier, could you > review > >> > the > >> > >> > KIP again? I have updated the PR < > >> > >> https://github.com/apache/kafka/pull/861> > >> > >> > as > >> > >> > well. > >> > >> > > >> > >> > On Wed, Apr 20, 2016 at 1:01 PM, Ashish Singh < > asi...@cloudera.com> > >> > >> wrote: > >> > >> > > >> > >> > > Hi Grant, > >> > >> > > > >> > >> > > On Tue, Apr 19, 2016 at 8:13 AM, Grant Henke < > ghe...@cloudera.com > >> > > >> > >> > wrote: > >> > >> > > > >> > >> > >> Hi Ashish, > >> > >> > >> > >> > >> > >> Thanks for the updates. I have a few questions below: > >> > >> > >> > >> > >> > >> > Move following interfaces to new package, > >> > >> org.apche.kafka.authorizer. > >> > >> > >> > > >> > >> > >> > 1. Authorizer > >> > >> > >> > 2. Acl > >> > >> > >> > 3. Operation > >> > >> > >> > 4. PermissionType > >> > >> > >> > 5. Resource > >> > >> > >> > 6. ResourceType > >> > >> > >> > 7. KafkaPrincipal > >> > >> > >> > 8. Session > >> > >> > >> > > >> > >> > >> > > >> > >> > >> This means the client would be required to depend on the > >> authorizer > >> > >> > >> package > >> > >> > >> as a part of KIP-4. Another option is to have the client > objects > >> in > >> > >> > >> common. > >> > >> > >> Have we ruled out leaving the interface in the core module? > >> > >> > >> > >> > >> > > With this entities that use Authorizer will depend only on > >> > Authorizer > >> > >> > > package. Third party implementations can have only the > authorizer > >> > pkg > >> > >> as > >> > >> > > dependency. core and client modules will also have to depend on > >> the > >> > >> > > authorizer with this approach. Do you see any issue with it? > >> > >> > > > >> > >> > >> > >> > >> > >> Authorizer interface will be updated to remove getter naming > >> > >> convention. > >> > >> > >> > >> > >> > >> > >> > >> > >> Now that this is Java do we still want to change to the Scala > >> > naming > >> > >> > >> convention? > >> > >> > >> > >> > >> > > Even in clients module I do not see getter naming convention > being > >> > >> > > followed, it is better to be consistent I guess. > >> > >> > > > >> > >> > >> > >> > >> > >> > >> > >> > >> Since we are completely rewriting the interface, can we add > some > >> > (at > >> > >> > least > >> > >> > >> one to start with) standard exceptions that each method is > >> > recommended > >> > >> > to > >> > >> > >> use/throw? This will help the server in KIP-4 provide > meaningful > >> > error > >> > >> > >> codes. KAFKA-3507 < > >> > https://issues.apache.org/jira/browse/KAFKA-3507> > >> > >> is > >> > >> > >> tracking it right now. > >> > >> > >> > >> > >> > > That should be good to have. Will include that. Thanks. > >> > >> > > > >> > >> > >> > >> > >> > >> Thanks, > >> > >> > >> Grant > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> On Tue, Apr 19, 2016 at 9:48 AM, Ashish Singh < > >> asi...@cloudera.com > >> > > > >> > >> > >> wrote: > >> > >> > >> > >> > >> > >> > 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 > >> > >> > >> > > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> -- > >> > >> > >> Grant Henke > >> > >> > >> Software Engineer | Cloudera > >> > >> > >> gr...@cloudera.com | twitter.com/gchenke | > >> > linkedin.com/in/granthenke > >> > >> > >> > >> > >> > > > >> > >> > > > >> > >> > > > >> > >> > > -- > >> > >> > > > >> > >> > > Regards, > >> > >> > > Ashish > >> > >> > > > >> > >> > > >> > >> > > >> > >> > > >> > >> > -- > >> > >> > > >> > >> > Regards, > >> > >> > Ashish > >> > >> > > >> > >> > >> > > > >> > > > >> > > > >> > > -- > >> > > > >> > > Regards, > >> > > Ashish > >> > > >> > > >> > -- Regards, Ashish