Hi Don,

Thanks for your note.

1) The intention is to avoid blocking in the calling thread. We already
have several requests that are put into a purgatory when waiting for remote
communication, for example produce request waiting for replication. Since
we have a limited number of request threads in the broker, we want to make
progress with other requests, while one is waiting on any form of remote
communication.

2) Async management calls will be useful with the default authorizer when
KIP-500 removes ZK and we rely on Kafka instead. Our current ZK-based
implementation as well as any custom implementations that don't want to be
async will just need to return a sync'ed value. So instead of returning `
value`, the code would just return `CompletableFuture.completedFuture(value)
`. So it would be just a single line change in the implementation with the
new API. The caller would treat completedFuture exactly as it does today,
processing the request synchronously without using a purgatory.

3) For implementations that return a completedFuture as described in 2),
the behaviour would remain exactly the same. No additional threads or
purgatory will be used for this case. So there would be no performance
penalty. For implementations that return a future that is not complete, we
prioritise running more requests concurrently. So in a deployment with a
large number of clients, we would improve performance by allowing other
requests to be processed on the request threads while some are waiting for
authorization metadata.

4) I was concerned about this too. The goal is to make the API flexible
enough to handle large scale deployments in future when caching all
authorization metadata in each broker is not viable. Using an async API
that returns CompletionStage, the caller has the option to handle the
result synchronously or asynchronously, so we don't necessarily need to
update the calling code right away. Custom authorizers using the async API
have full control over whether authorization is performed in-line since
completedFuture will always be handled synchronously. We do need to update
KafkaApis to take advantage of the asynchronous API to improve scale. Even
though this is a big change, since we will be doing the same for all
requests, it shouldn't be too hard to maintain since the same pattern will
be used for all requests.

Regards,

Rajini

On Tue, Sep 3, 2019 at 11:48 PM Don Bosco Durai <bo...@apache.org> wrote:

> Hi Rajini
>
> Help me understand this a bit more.
>
> 1. For all practical purpose, without authorization you can't go to the
> next step. The calling code needs to block anyway. So should we just let
> the implementation code do the async part?
> 2. If you feel management calls need to be async, then we should consider
> another set of async APIs. I don't feel we should complicate it further (
> 3. Another concern I have is wrt performance. Kafka has been built to
> handle 1000s per second requests. Not sure whether making it async will add
> any unnecessary overhead.
> 4. How much complication would this add on the calling side? And is it
> worth it?
>
> Thanks
>
> Bosco
>
>
> On 9/3/19, 8:50 AM, "Rajini Sivaram" <rajinisiva...@gmail.com> wrote:
>
>     Hi all,
>
>     Ismael brought up a point that it will be good to make the Authorizer
>     interface asynchronous to avoid blocking request threads during remote
>     operations.
>
>     1) Since we want to support different backends for authorization
> metadata,
>     making createAcls() and deleteAcls() asynchronous makes sense since
> these
>     always involve remote operations. When KIP-500 removes ZooKeeper, we
> would
>     want to move ACLs to Kafka and async updates will avoid unnecessary
>     blocking.
>     2) For authorize() method, we currently use cached ACLs in the built-in
>     authorizers, so synchronous authorise operations work well now. But
> async
>     authorize() would support this scenario as well as authorizers in large
>     organisations where an LRU cache would enable a smaller cache even
> when the
>     backend holds a large amount of ACLs for infrequently used resources or
>     users who don't use the system frequently.
>
>     For both cases, the built-in authorizer will continue to be
> synchronous,
>     using CompletableFuture.completedFuture() to return the actual result.
> But
>     async API will make custom authorizer implementations more flexible. I
>     would like to know if there are any concerns with these changes before
>     updating the KIP.
>
>     *Proposed API:*
>     public interface Authorizer extends Configurable, Closeable {
>
>         Map<Endpoint, CompletionStage<Void>> start(AuthorizerServerInfo
> serverInfo);
>         List<CompletionStage<AuthorizationResult>>
>     authorize(AuthorizableRequestContext requestContext, List<Action>
>     actions);
>         List<CompletionStage<AclCreateResult>>
>     createAcls(AuthorizableRequestContext requestContext, List<AclBinding>
>     aclBindings);
>         List<CompletionStage<AclDeleteResult>>
>     deleteAcls(AuthorizableRequestContext requestContext,
>     List<AclBindingFilter> aclBindingFilters);
>         CompletionStage<Collection<AclBinding>> acls(AclBindingFilter
> filter);
>     }
>
>
>     Thank you,
>
>     Rajini
>
>     On Sun, Aug 18, 2019 at 6:25 PM Don Bosco Durai <bo...@apache.org>
> wrote:
>
>     > Hi Rajini
>     >
>     > Thanks for clarifying. I am good for now.
>     >
>     > Regards
>     >
>     > Bosco
>     >
>     >
>     > On 8/16/19, 11:30 AM, "Rajini Sivaram" <rajinisiva...@gmail.com>
> wrote:
>     >
>     >     Hi Don,
>     >
>     >     That should be fine. I guess Ranger loads policies from the
> database
>     >     synchronously when the authorizer is configured, similar to
>     >     SimpleAclAuthorizer loading from ZooKeeper. Ranger can continue
> to load
>     >     synchronously from `configure()` or `start()` and return an
> empty map
>     > from
>     >     `start()`. That would retain the existing behaviour.. When the
> same
>     >     database stores policies for all listeners and the policies are
> not
>     > stored
>     >     in Kafka, there is no value in making the load asynchronous.
>     >
>     >     Regards,
>     >
>     >     Rajini
>     >
>     >
>     >     On Fri, Aug 16, 2019 at 6:43 PM Don Bosco Durai <
> bo...@apache.org>
>     > wrote:
>     >
>     >     > Hi Rajini
>     >     >
>     >     > Assuming this doesn't affect custom plugins, I don't have any
>     > concerns
>     >     > regarding this.
>     >     >
>     >     > I do have one question regarding:
>     >     >
>     >     > "For authorizers that don’t store metadata in ZooKeeper,
> ensure that
>     >     > authorizer metadata for each listener is available before
> starting
>     > up the
>     >     > listener. This enables different authorization metadata stores
> for
>     >     > different listeners."
>     >     >
>     >     > Since Ranger uses its own database for storing policies, do you
>     > anticipate
>     >     > any issues?
>     >     >
>     >     > Thanks
>     >     >
>     >     > Bosco
>     >     >
>     >     >
>     >     > On 8/16/19, 6:49 AM, "Rajini Sivaram" <
> rajinisiva...@gmail.com>
>     > wrote:
>     >     >
>     >     >     Hi all,
>     >     >
>     >     >     I made another change to the KIP. The KIP was originally
>     > proposing to
>     >     >     extend SimpleAclAuthorizer to also implement the new API
> (in
>     > addition
>     >     > to
>     >     >     the existing API). But since we use the new API when
> available,
>     > this
>     >     > can
>     >     >     break custom authorizers that extend this class and
> override
>     > specific
>     >     >     methods of the old API. To avoid breaking any existing
> custom
>     >     >     implementations that extend this class, particularly
> because it
>     > is in
>     >     > the
>     >     >     public package kafka.security.auth, the KIP now proposes to
>     > retain the
>     >     > old
>     >     >     authorizer as-is.  SimpleAclAuthorizer will continue to
>     > implement the
>     >     > old
>     >     >     API, but will be deprecated. A new authorizer
> implementation
>     >     >     kafka.security.authorizer.AclAuthorizer will be added for
> the
>     > new API
>     >     > (this
>     >     >     will not be in the public package).
>     >     >
>     >     >     Please let me know if you have any concerns.
>     >     >
>     >     >     Regards,
>     >     >
>     >     >     Rajini
>     >     >
>     >     >
>     >     >     On Fri, Aug 16, 2019 at 8:48 AM Rajini Sivaram <
>     >     > rajinisiva...@gmail.com>
>     >     >     wrote:
>     >     >
>     >     >     > Thanks Colin.
>     >     >     >
>     >     >     > If there are no other concerns, I will start vote later
> today.
>     > Many
>     >     > thanks
>     >     >     > to every one for the feedback.
>     >     >     >
>     >     >     > Regards,
>     >     >     >
>     >     >     > Rajini
>     >     >     >
>     >     >     >
>     >     >     > On Thu, Aug 15, 2019 at 11:57 PM Colin McCabe <
>     > cmcc...@apache.org>
>     >     > wrote:
>     >     >     >
>     >     >     >> Thanks, Rajini.  It looks good to me.
>     >     >     >>
>     >     >     >> best,
>     >     >     >> Colin
>     >     >     >>
>     >     >     >>
>     >     >     >> On Thu, Aug 15, 2019, at 11:37, Rajini Sivaram wrote:
>     >     >     >> > Hi Colin,
>     >     >     >> >
>     >     >     >> > Thanks for the review. I have updated the KIP to move
> the
>     >     > interfaces for
>     >     >     >> > request context and server info to the authorizer
> package.
>     > These
>     >     > are now
>     >     >     >> > called AuthorizableRequestContext and
> AuthorizerServerInfo.
>     >     > Endpoint is
>     >     >     >> now
>     >     >     >> > a class in org.apache.kafka.common to make it reusable
>     > since we
>     >     > already
>     >     >     >> > have multiple implementations of it. I have removed
>     > requestName
>     >     > from the
>     >     >     >> > request context interface since authorizers can
> distinguish
>     >     > follower
>     >     >     >> fetch
>     >     >     >> > and consumer fetch from the operation being
> authorized. So
>     > 16-bit
>     >     >     >> request
>     >     >     >> > type should be sufficient for audit logging.  Also
> replaced
>     >     > AuditFlag
>     >     >     >> with
>     >     >     >> > two booleans as you suggested.
>     >     >     >> >
>     >     >     >> > Can you take another look and see if the KIP is ready
> for
>     > voting?
>     >     >     >> >
>     >     >     >> > Thanks for all your help!
>     >     >     >> >
>     >     >     >> > Regards,
>     >     >     >> >
>     >     >     >> > Rajini
>     >     >     >> >
>     >     >     >> > On Wed, Aug 14, 2019 at 8:59 PM Colin McCabe <
>     > cmcc...@apache.org>
>     >     >     >> wrote:
>     >     >     >> >
>     >     >     >> > > Hi Rajini,
>     >     >     >> > >
>     >     >     >> > > I think it would be good to rename
> KafkaRequestContext to
>     >     > something
>     >     >     >> like
>     >     >     >> > > AuthorizableRequestContext, and put it in the
>     >     >     >> > > org.apache.kafka.server.authorizer namespace.  If
> we put
>     > it in
>     >     > the
>     >     >     >> > > org.apache.kafka.common namespace, then it's not
> really
>     > clear
>     >     > that
>     >     >     >> it's
>     >     >     >> > > part of the Authorizer API.  Since this class is
> purely an
>     >     > interface,
>     >     >     >> with
>     >     >     >> > > no concrete implementation of anything, there's
> nothing
>     > common
>     >     > to
>     >     >     >> really
>     >     >     >> > > reuse in any case.  We definitely don't want
> someone to
>     >     > accidentally
>     >     >     >> add or
>     >     >     >> > > remove methods because they think this is just
> another
>     > internal
>     >     > class
>     >     >     >> used
>     >     >     >> > > for requests.
>     >     >     >> > >
>     >     >     >> > > The BrokerInfo class is a nice improvement.  It
> looks
>     > like it
>     >     > will be
>     >     >     >> > > useful for passing in information about the context
> we're
>     >     > running
>     >     >     >> in.  It
>     >     >     >> > > would be nice to call this class ServerInfo rather
> than
>     >     > BrokerInfo,
>     >     >     >> since
>     >     >     >> > > we will want to run the authorizer on controllers
> as well
>     > as on
>     >     >     >> brokers,
>     >     >     >> > > and the controller may run as a separate process
> post
>     > KIP-500.
>     >     > I also
>     >     >     >> > > think that this class should be in the
>     >     >     >> org.apache.kafka.server.authorizer
>     >     >     >> > > namespace.  Again, it is an interface, not a
> concrete
>     >     > implementation,
>     >     >     >> and
>     >     >     >> > > it's an interface that is very specifically for the
>     > authorizer.
>     >     >     >> > >
>     >     >     >> > > I agree that we probably don't have enough
> information
>     >     > preserved for
>     >     >     >> > > requests currently to always know what entity made
> them.
>     > So we
>     >     > can
>     >     >     >> leave
>     >     >     >> > > that out for now (except in the special case of
> Fetch).
>     >     > Perhaps we
>     >     >     >> can add
>     >     >     >> > > this later if it's needed.
>     >     >     >> > >
>     >     >     >> > > I understand the intention behind AuthorizationMode
>     > (which is
>     >     > now
>     >     >     >> called
>     >     >     >> > > AuditFlag in the latest revision).  But it still
> feels
>     >     > complex.  What
>     >     >     >> if we
>     >     >     >> > > just had two booleans in Action: logSuccesses and
>     > logFailures?
>     >     > That
>     >     >     >> seems
>     >     >     >> > > to cover all the cases here.  MANDATORY_AUTHORIZE =
> true,
>     > true.
>     >     >     >> > > OPTIONAL_AUTHORIZE = true, false.  FILTER = true,
> false.
>     >     >     >> LIST_AUTHORIZED =
>     >     >     >> > > false, false.  Would there be anything lost versus
> having
>     > the
>     >     > enum?
>     >     >     >> > >
>     >     >     >> > > best,
>     >     >     >> > > Colin
>     >     >     >> > >
>     >     >     >> > >
>     >     >     >> > > On Wed, Aug 14, 2019, at 06:29, Mickael Maison
> wrote:
>     >     >     >> > > > Hi Rajini,
>     >     >     >> > > >
>     >     >     >> > > > Thanks for the KIP!
>     >     >     >> > > > I really like that authorize() will be able to
> take a
>     > batch of
>     >     >     >> > > > requests, this will speed up many implementations!
>     >     >     >> > > >
>     >     >     >> > > > On Tue, Aug 13, 2019 at 5:57 PM Rajini Sivaram <
>     >     >     >> rajinisiva...@gmail.com>
>     >     >     >> > > wrote:
>     >     >     >> > > > >
>     >     >     >> > > > > Thanks David! I have fixed the typo.
>     >     >     >> > > > >
>     >     >     >> > > > > Also made a couple of changes to make the
> context
>     >     > interfaces more
>     >     >     >> > > generic.
>     >     >     >> > > > > KafkaRequestContext now returns the 16-bit API
> key as
>     > Colin
>     >     >     >> suggested
>     >     >     >> > > as
>     >     >     >> > > > > well as the friendly name used in metrics which
> are
>     > useful
>     >     > in
>     >     >     >> audit
>     >     >     >> > > logs.
>     >     >     >> > > > > `Authorizer#start` is now provided a generic
>     > `BrokerInfo`
>     >     >     >> interface
>     >     >     >> > > that
>     >     >     >> > > > > gives cluster id, broker id and endpoint
> information.
>     > The
>     >     > generic
>     >     >     >> > > interface
>     >     >     >> > > > > can potentially be used in other broker plugins
> in
>     > future
>     >     > and
>     >     >     >> provides
>     >     >     >> > > > > dynamically generated configs like broker id
> and ports
>     >     > which are
>     >     >     >> > > currently
>     >     >     >> > > > > not available to plugins unless these configs
> are
>     > statically
>     >     >     >> > > configured.
>     >     >     >> > > > > Please let me know if there are any concerns.
>     >     >     >> > > > >
>     >     >     >> > > > > Regards,
>     >     >     >> > > > >
>     >     >     >> > > > > Rajini
>     >     >     >> > > > >
>     >     >     >> > > > > On Tue, Aug 13, 2019 at 4:30 PM David Jacot <
>     >     > dja...@confluent.io>
>     >     >     >> > > wrote:
>     >     >     >> > > > >
>     >     >     >> > > > > > Hi Rajini,
>     >     >     >> > > > > >
>     >     >     >> > > > > > Thank you for the update! It looks good to me.
>     > There is a
>     >     > typo
>     >     >     >> in the
>     >     >     >> > > > > > `AuditFlag` enum: `MANDATORY_AUTHOEIZE` ->
>     >     >     >> `MANDATORY_AUTHORIZE`.
>     >     >     >> > > > > >
>     >     >     >> > > > > > Regards,
>     >     >     >> > > > > > David
>     >     >     >> > > > > >
>     >     >     >> > > > > > On Mon, Aug 12, 2019 at 2:54 PM Rajini
> Sivaram <
>     >     >     >> > > rajinisiva...@gmail.com>
>     >     >     >> > > > > > wrote:
>     >     >     >> > > > > >
>     >     >     >> > > > > > > Hi David,
>     >     >     >> > > > > > >
>     >     >     >> > > > > > > Thanks for reviewing the KIP! Since
> questions
>     > about
>     >     >     >> `authorization
>     >     >     >> > > mode`
>     >     >     >> > > > > > > and `count` have come up multiple times, I
> have
>     > renamed
>     >     > both.
>     >     >     >> > > > > > >
>     >     >     >> > > > > > > 1) Renamed `count` to
> `resourceReferenceCount`.
>     > It is
>     >     > the
>     >     >     >> number
>     >     >     >> > > of times
>     >     >     >> > > > > > > the resource being authorized is referenced
>     > within the
>     >     >     >> request.
>     >     >     >> > > > > > >
>     >     >     >> > > > > > > 2) Renamed `AuthorizationMode` to
> `AuditFlag`. It
>     > is
>     >     > provided
>     >     >     >> to
>     >     >     >> > > improve
>     >     >     >> > > > > > > audit logging in the authorizer. The enum
> values
>     > have
>     >     > javadoc
>     >     >     >> which
>     >     >     >> > > > > > > indicate how the authorization result is
> used in
>     > each
>     >     > of the
>     >     >     >> modes
>     >     >     >> > > to
>     >     >     >> > > > > > > enable authorizers to log audit messages at
> the
>     > right
>     >     > severity
>     >     >     >> > > level.
>     >     >     >> > > > > > >
>     >     >     >> > > > > > > Regards,
>     >     >     >> > > > > > >
>     >     >     >> > > > > > > Rajini
>     >     >     >> > > > > > >
>     >     >     >> > > > > > > On Mon, Aug 12, 2019 at 5:54 PM David Jacot
> <
>     >     >     >> dja...@confluent.io>
>     >     >     >> > > wrote:
>     >     >     >> > > > > > >
>     >     >     >> > > > > > > > Hi Rajini,
>     >     >     >> > > > > > > >
>     >     >     >> > > > > > > > Thank you for the KIP. Overall, it looks
> good
>     > to me.
>     >     > I have
>     >     >     >> few
>     >     >     >> > > > > > > > questions/suggestions:
>     >     >     >> > > > > > > >
>     >     >     >> > > > > > > > 1. It is hard to grasp what
> `Action#count` is
>     > for. I
>     >     > guess I
>     >     >     >> > > understand
>     >     >     >> > > > > > > > where you want to go with it but it took
> me a
>     > while to
>     >     >     >> figure it
>     >     >     >> > > out.
>     >     >     >> > > > > > > > Perhaps, we could come up with a better
> name
>     > than
>     >     > `count`?
>     >     >     >> > > > > > > >
>     >     >     >> > > > > > > > 2. I had a hard time trying to understand
> the
>     >     >     >> `AuthorizationMode`
>     >     >     >> > > > > > > concept,
>     >     >     >> > > > > > > > especially wrt. the OPTIONAL one. My
>     > understanding is
>     >     > that
>     >     >     >> an
>     >     >     >> > > ACL is
>     >     >     >> > > > > > > either
>     >     >     >> > > > > > > > defined or not. Could you elaborate a bit
> more
>     > on
>     >     > that?
>     >     >     >> > > > > > > >
>     >     >     >> > > > > > > > Thanks,
>     >     >     >> > > > > > > > David
>     >     >     >> > > > > > > >
>     >     >     >> > > > > > > > On Fri, Aug 9, 2019 at 10:26 PM Don Bosco
> Durai
>     > <
>     >     >     >> > > bo...@apache.org>
>     >     >     >> > > > > > > wrote:
>     >     >     >> > > > > > > >
>     >     >     >> > > > > > > > > Hi Rajini
>     >     >     >> > > > > > > > >
>     >     >     >> > > > > > > > > 3.2 - This makes sense. Thanks for
> clarifying.
>     >     >     >> > > > > > > > >
>     >     >     >> > > > > > > > > Rest looks fine. Once the
> implementations are
>     > done,
>     >     > it
>     >     >     >> will be
>     >     >     >> > > more
>     >     >     >> > > > > > > clear
>     >     >     >> > > > > > > > > on the different values RequestType and
> Mode.
>     >     >     >> > > > > > > > >
>     >     >     >> > > > > > > > > Thanks
>     >     >     >> > > > > > > > >
>     >     >     >> > > > > > > > > Bosco
>     >     >     >> > > > > > > > >
>     >     >     >> > > > > > > > >
>     >     >     >> > > > > > > > > On 8/9/19, 5:08 AM, "Rajini Sivaram" <
>     >     >     >> rajinisiva...@gmail.com
>     >     >     >> > > >
>     >     >     >> > > > > > wrote:
>     >     >     >> > > > > > > > >
>     >     >     >> > > > > > > > >     Hi Don,
>     >     >     >> > > > > > > > >
>     >     >     >> > > > > > > > >     Thanks for the suggestions. A few
>     > responses
>     >     > below:
>     >     >     >> > > > > > > > >
>     >     >     >> > > > > > > > >     3.1 Can rename and improve docs if
> we keep
>     >     > this. Let's
>     >     >     >> > > finish the
>     >     >     >> > > > > > > > >     discussion on Colin's suggestions
>     > regarding this
>     >     >     >> first.
>     >     >     >> > > > > > > > >     3.2 No, I was thinking of some
> requests
>     > that
>     >     > have an
>     >     >     >> old
>     >     >     >> > > way of
>     >     >     >> > > > > > > > > authorizing
>     >     >     >> > > > > > > > >     and a new way where we have
> retained the
>     > old
>     >     > way for
>     >     >     >> > > backward
>     >     >     >> > > > > > > > >     compatibility. One example is
>     > Cluster:Create
>     >     >     >> permission to
>     >     >     >> > > create
>     >     >     >> > > > > > > > > topics.
>     >     >     >> > > > > > > > >     We have replaced this with
> fine-grained
>     > topic
>     >     > create
>     >     >     >> > > access using
>     >     >     >> > > > > > > > > Topic:Create
>     >     >     >> > > > > > > > >     for topic patterns. But we still
> check if
>     > user
>     >     > has
>     >     >     >> > > Cluster:Create
>     >     >     >> > > > > > > > > first. If
>     >     >     >> > > > > > > > >     Denied, the deny is ignored and we
> check
>     >     >     >> Topic:Create. We
>     >     >     >> > > dont
>     >     >     >> > > > > > want
>     >     >     >> > > > > > > > to
>     >     >     >> > > > > > > > > log
>     >     >     >> > > > > > > > >     DENY for Cluster:Create at INFO
> level for
>     > this,
>     >     > since
>     >     >     >> this
>     >     >     >> > > is
>     >     >     >> > > > > > not a
>     >     >     >> > > > > > > > >     mandatory ACL for creating topics.
> We
>     > will get
>     >     >     >> appropriate
>     >     >     >> > > logs
>     >     >     >> > > > > > > from
>     >     >     >> > > > > > > > > the
>     >     >     >> > > > > > > > >     subsequent Topic:Create in this
> case.
>     >     >     >> > > > > > > > >     3.3 They are not quite the same.
> FILTER
>     > implies
>     >     > that
>     >     >     >> user
>     >     >     >> > > > > > actually
>     >     >     >> > > > > > > > >     requested access to and performed
> some
>     >     > operation on
>     >     >     >> the
>     >     >     >> > > filtered
>     >     >     >> > > > > > > > > resources.
>     >     >     >> > > > > > > > >     LIST_AUTHORZED did not result in any
>     > actual
>     >     > access.
>     >     >     >> User
>     >     >     >> > > simply
>     >     >     >> > > > > > > > wanted
>     >     >     >> > > > > > > > > to
>     >     >     >> > > > > > > > >     know what they are allowed to
> access.
>     >     >     >> > > > > > > > >     3.4 Request types are Produce,
> JoinGroup,
>     >     > OffsetCommit
>     >     >     >> > > etc. So
>     >     >     >> > > > > > that
>     >     >     >> > > > > > > > is
>     >     >     >> > > > > > > > >     different from authorization mode,
>     > operation
>     >     > etc.
>     >     >     >> > > > > > > > >
>     >     >     >> > > > > > > > >
>     >     >     >> > > > > > > > >     On Thu, Aug 8, 2019 at 11:36 PM Don
> Bosco
>     > Durai
>     >     > <
>     >     >     >> > > > > > bo...@apache.org>
>     >     >     >> > > > > > > > > wrote:
>     >     >     >> > > > > > > > >
>     >     >     >> > > > > > > > >     > Hi Rajini
>     >     >     >> > > > > > > > >     >
>     >     >     >> > > > > > > > >     > Thanks for clarifying. This is
> very
>     > helpful...
>     >     >     >> > > > > > > > >     >
>     >     >     >> > > > > > > > >     > #1 - On the Ranger side, we
> should be
>     > able to
>     >     > handle
>     >     >     >> > > multiple
>     >     >     >> > > > > > > > > requests at
>     >     >     >> > > > > > > > >     > the same time. I was just not
> sure how
>     > much
>     >     >     >> processing
>     >     >     >> > > overhead
>     >     >     >> > > > > > > > will
>     >     >     >> > > > > > > > > be
>     >     >     >> > > > > > > > >     > there on the Broker side to split
> and
>     > then
>     >     >     >> consolidate
>     >     >     >> > > the
>     >     >     >> > > > > > > results.
>     >     >     >> > > > > > > > > If it
>     >     >     >> > > > > > > > >     > is negligible,  then this is the
> better
>     > way.
>     >     > It will
>     >     >     >> > > make it
>     >     >     >> > > > > > > future
>     >     >     >> > > > > > > > > proof.
>     >     >     >> > > > > > > > >     > #2 -  I agree, having a single
> "start"
>     > call
>     >     > makes it
>     >     >     >> > > cleaner.
>     >     >     >> > > > > > The
>     >     >     >> > > > > > > > >     > Authorization implementation will
> only
>     > have
>     >     > to do
>     >     >     >> the
>     >     >     >> > > > > > > > initialization
>     >     >     >> > > > > > > > > only
>     >     >     >> > > > > > > > >     > once.
>     >     >     >> > > > > > > > >     > #3.1 - Thanks for the
> clarification. I
>     > think
>     >     > it
>     >     >     >> makes
>     >     >     >> > > sense to
>     >     >     >> > > > > > > have
>     >     >     >> > > > > > > > > this.
>     >     >     >> > > > > > > > >     > The term "Mode" might not be
> explicit
>     > enough.
>     >     >     >> > > Essentially it
>     >     >     >> > > > > > > seems
>     >     >     >> > > > > > > > > you want
>     >     >     >> > > > > > > > >     > the Authorizer to know the
>     > Intent/Purpose of
>     >     > the
>     >     >     >> > > authorize call
>     >     >     >> > > > > > > and
>     >     >     >> > > > > > > > > let the
>     >     >     >> > > > > > > > >     > Authorizer decide what to log as
> Audit
>     > event.
>     >     >     >> Changing
>     >     >     >> > > the
>     >     >     >> > > > > > > > > class/field name
>     >     >     >> > > > > > > > >     > or giving more documentation will
> do.
>     >     >     >> > > > > > > > >     > #3.2 - Regarding the option
> "OPTIONAL".
>     > Are
>     >     > you
>     >     >     >> thinking
>     >     >     >> > > from
>     >     >     >> > > > > > > > > chaining
>     >     >     >> > > > > > > > >     > multiple Authorizer? If so,  I am
> not
>     > sure
>     >     > whether
>     >     >     >> the
>     >     >     >> > > Broker
>     >     >     >> > > > > > > would
>     >     >     >> > > > > > > > > have
>     >     >     >> > > > > > > > >     > enough information to make that
>     > decision. I
>     >     > feel the
>     >     >     >> > > Authorizer
>     >     >     >> > > > > > > > will
>     >     >     >> > > > > > > > > be the
>     >     >     >> > > > > > > > >     > one who would have that
> knowledge. E.g.
>     > in
>     >     > Ranger
>     >     >     >> we have
>     >     >     >> > > > > > > explicit
>     >     >     >> > > > > > > > > deny,
>     >     >     >> > > > > > > > >     > which means no matter what, the
> request
>     >     > should be
>     >     >     >> denied
>     >     >     >> > > for
>     >     >     >> > > > > > the
>     >     >     >> > > > > > > > > user/group
>     >     >     >> > > > > > > > >     > or condition. So if you are
> thinking of
>     >     > chaining
>     >     >     >> > > Authorizers,
>     >     >     >> > > > > > > then
>     >     >     >> > > > > > > > >     > responses should have the third
> state,
>     > e.g.
>     >     >     >> > > "DENIED_FINAL", in
>     >     >     >> > > > > > > > which
>     >     >     >> > > > > > > > > case
>     >     >     >> > > > > > > > >     > if there is an Authorization
> chain, it
>     > will
>     >     > be stop
>     >     >     >> and
>     >     >     >> > > the
>     >     >     >> > > > > > > request
>     >     >     >> > > > > > > > > will be
>     >     >     >> > > > > > > > >     > denied and if it is just denied,
> then
>     > you
>     >     > might fall
>     >     >     >> > > back to
>     >     >     >> > > > > > next
>     >     >     >> > > > > > > > >     > authorizer. If we don't have
> chaining of
>     >     >     >> Authorizing in
>     >     >     >> > > mind,
>     >     >     >> > > > > > > then
>     >     >     >> > > > > > > > we
>     >     >     >> > > > > > > > >     > should reconsider OPTIONAL for
> now. Or
>     >     > clarify under
>     >     >     >> > > which
>     >     >     >> > > > > > > scenario
>     >     >     >> > > > > > > > >     > OPTIONAL will be called.
>     >     >     >> > > > > > > > >     > #3.3 Regarding, FILTER v/s
>     > LIST_AUTHORIZED,
>     >     > isn't
>     >     >     >> > > > > > > LIST_AUTHORIZED a
>     >     >     >> > > > > > > > >     > special case for "FILTER"?
>     >     >     >> > > > > > > > >     > #3.4 KafkaRequestContext.
> requestType()
>     > v/s
>     >     > Action.
>     >     >     >> > > > > > > > > authorizationMode. I
>     >     >     >> > > > > > > > >     > am not sure about the overlap or
>     > ambiguity.
>     >     >     >> > > > > > > > >     > #4 - Cool. This is good, it will
> be less
>     >     > stress on
>     >     >     >> the
>     >     >     >> > > > > > > Authorizer.
>     >     >     >> > > > > > > > > Ranger
>     >     >     >> > > > > > > > >     > already supports the "count"
> concept
>     > and also
>     >     > has
>     >     >     >> > > batching
>     >     >     >> > > > > > > > > capability to
>     >     >     >> > > > > > > > >     > aggregate similar requests to
> reduce the
>     >     > number of
>     >     >     >> audit
>     >     >     >> > > logs
>     >     >     >> > > > > > to
>     >     >     >> > > > > > > > > write. We
>     >     >     >> > > > > > > > >     > should be able to pass this
> through.
>     >     >     >> > > > > > > > >     > #5 - Assuming if the object
> instance is
>     > going
>     >     > out of
>     >     >     >> > > scope, we
>     >     >     >> > > > > > > > > should be
>     >     >     >> > > > > > > > >     > fine. Not a super important ask.
> Ranger
>     > is
>     >     > already
>     >     >     >> > > catching
>     >     >     >> > > > > > KILL
>     >     >     >> > > > > > > > > signal for
>     >     >     >> > > > > > > > >     > clean up.
>     >     >     >> > > > > > > > >     >
>     >     >     >> > > > > > > > >     > Thanks again. These are good
>     > enhancements.
>     >     >     >> Appreciate
>     >     >     >> > > your
>     >     >     >> > > > > > > efforts
>     >     >     >> > > > > > > > > here.
>     >     >     >> > > > > > > > >     >
>     >     >     >> > > > > > > > >     > Bosco
>     >     >     >> > > > > > > > >     >
>     >     >     >> > > > > > > > >     >
>     >     >     >> > > > > > > > >     >
>     >     >     >> > > > > > > > >     > On 8/8/19, 2:03 AM, "Rajini
> Sivaram" <
>     >     >     >> > > rajinisiva...@gmail.com
>     >     >     >> > > > > > >
>     >     >     >> > > > > > > > > wrote:
>     >     >     >> > > > > > > > >     >
>     >     >     >> > > > > > > > >     >     Hi Don,
>     >     >     >> > > > > > > > >     >
>     >     >     >> > > > > > > > >     >     Thanks for reviewing the KIP.
>     >     >     >> > > > > > > > >     >
>     >     >     >> > > > > > > > >     >     1. I had this originally as a
> single
>     >     > Action, but
>     >     >     >> > > thought it
>     >     >     >> > > > > > > may
>     >     >     >> > > > > > > > > be
>     >     >     >> > > > > > > > >     > useful
>     >     >     >> > > > > > > > >     >     to support batched authorize
> calls
>     > as
>     >     > well and
>     >     >     >> keep
>     >     >     >> > > it
>     >     >     >> > > > > > > > > consistent with
>     >     >     >> > > > > > > > >     >     other methods. Single
> requests can
>     > contain
>     >     >     >> multiple
>     >     >     >> > > topics.
>     >     >     >> > > > > > > For
>     >     >     >> > > > > > > > >     > example a
>     >     >     >> > > > > > > > >     >     produce request can contain
> records
>     > for
>     >     > several
>     >     >     >> > > partitions
>     >     >     >> > > > > > of
>     >     >     >> > > > > > > > > different
>     >     >     >> > > > > > > > >     >     topics. Broker could
> potentially
>     >     > authorize these
>     >     >     >> > > together.
>     >     >     >> > > > > > > For
>     >     >     >> > > > > > > > >     >     SimpleAclAuthorizer, batched
>     > authorize
>     >     > methods
>     >     >     >> don't
>     >     >     >> > > > > > provide
>     >     >     >> > > > > > > > any
>     >     >     >> > > > > > > > >     >     optimisation since lookup is
> based
>     > on
>     >     > resources
>     >     >     >> > > followed by
>     >     >     >> > > > > > > the
>     >     >     >> > > > > > > > >     > matching
>     >     >     >> > > > > > > > >     >     logic. But some authorizers
> may
>     > manage
>     >     > ACLs by
>     >     >     >> user
>     >     >     >> > > > > > principal
>     >     >     >> > > > > > > > > rather
>     >     >     >> > > > > > > > >     > than
>     >     >     >> > > > > > > > >     >     resource and may be able to
> optimize
>     >     > batched
>     >     >     >> > > requests. I am
>     >     >     >> > > > > > > ok
>     >     >     >> > > > > > > > > with
>     >     >     >> > > > > > > > >     > using
>     >     >     >> > > > > > > > >     >     single Action if this is
> likely to
>     > cause
>     >     > issues.
>     >     >     >> > > > > > > > >     >     2. If you have two listeners,
> one
>     > for
>     >     >     >> inter-broker
>     >     >     >> > > traffic
>     >     >     >> > > > > > > and
>     >     >     >> > > > > > > > > another
>     >     >     >> > > > > > > > >     > for
>     >     >     >> > > > > > > > >     >     external clients, start
> method is
>     > invoked
>     >     > twice,
>     >     >     >> > > once for
>     >     >     >> > > > > > > each
>     >     >     >> > > > > > > > >     > listener. On
>     >     >     >> > > > > > > > >     >     second thought, that may be
>     > confusing and
>     >     > a
>     >     >     >> single
>     >     >     >> > > start()
>     >     >     >> > > > > > > > > invocation
>     >     >     >> > > > > > > > >     > that
>     >     >     >> > > > > > > > >     >     provides all listener
> information
>     > and
>     >     > returns
>     >     >     >> > > multiple
>     >     >     >> > > > > > > futures
>     >     >     >> > > > > > > > > would be
>     >     >     >> > > > > > > > >     >     better. Will update the KIP.
>     >     >     >> > > > > > > > >     >     3. A typical example is a
> consumer
>     >     > subscribing
>     >     >     >> to a
>     >     >     >> > > regex
>     >     >     >> > > > > > > > > pattern. We
>     >     >     >> > > > > > > > >     >     request all topic metadata
> from the
>     >     > broker in
>     >     >     >> order
>     >     >     >> > > to
>     >     >     >> > > > > > decide
>     >     >     >> > > > > > > > > whether
>     >     >     >> > > > > > > > >     > the
>     >     >     >> > > > > > > > >     >     pattern matches, expecting to
>     > receive a
>     >     > list of
>     >     >     >> > > authorised
>     >     >     >> > > > > > > > > topics. The
>     >     >     >> > > > > > > > >     > user
>     >     >     >> > > > > > > > >     >     is not asking to subscribe to
> an
>     >     > unauthorized
>     >     >     >> topic.
>     >     >     >> > > If
>     >     >     >> > > > > > there
>     >     >     >> > > > > > > > > are 10000
>     >     >     >> > > > > > > > >     >     topics in the cluster and the
> user
>     > has
>     >     > access
>     >     >     >> to 100
>     >     >     >> > > of
>     >     >     >> > > > > > them,
>     >     >     >> > > > > > > > at
>     >     >     >> > > > > > > > > the
>     >     >     >> > > > > > > > >     > moment
>     >     >     >> > > > > > > > >     >     we log 9900 DENIED log
> entries at
>     > INFO
>     >     > level in
>     >     >     >> > > > > > > > > SimpleAclAuthorizer.
>     >     >     >> > > > > > > > >     > The
>     >     >     >> > > > > > > > >     >     proposal is to authorize this
>     > request with
>     >     >     >> > > > > > > > > AuthorizationMode.FILTER, so
>     >     >     >> > > > > > > > >     >     that authorizers can log
> resources
>     > that
>     >     > are
>     >     >     >> filtered
>     >     >     >> > > out at
>     >     >     >> > > > > > > > > lower level
>     >     >     >> > > > > > > > >     >     like DEBUG since this is not
> an
>     > attempt to
>     >     >     >> access
>     >     >     >> > > > > > > unauthorized
>     >     >     >> > > > > > > > >     > resources.
>     >     >     >> > > > > > > > >     >     Brokers already handle these
>     > differently
>     >     > since
>     >     >     >> no
>     >     >     >> > > > > > > authorization
>     >     >     >> > > > > > > > > error
>     >     >     >> > > > > > > > >     > is
>     >     >     >> > > > > > > > >     >     returned to the client in
> these
>     > cases.
>     >     > Providing
>     >     >     >> > > > > > > authorization
>     >     >     >> > > > > > > > > mode to
>     >     >     >> > > > > > > > >     >     authorizers enables authorizer
>     >     > implementations
>     >     >     >> to
>     >     >     >> > > generate
>     >     >     >> > > > > > > > > better audit
>     >     >     >> > > > > > > > >     >     logs.
>     >     >     >> > > > > > > > >     >     4. Each request may contain
> multiple
>     >     > instances
>     >     >     >> of
>     >     >     >> > > the same
>     >     >     >> > > > > > > > > authorizable
>     >     >     >> > > > > > > > >     >     resource. For example a
> produce
>     > request
>     >     > may
>     >     >     >> contain
>     >     >     >> > > records
>     >     >     >> > > > > > > for
>     >     >     >> > > > > > > > > 10
>     >     >     >> > > > > > > > >     >     partitions of the same topic.
> At the
>     >     > moment, we
>     >     >     >> > > invoke
>     >     >     >> > > > > > > > authorize
>     >     >     >> > > > > > > > >     > method 10
>     >     >     >> > > > > > > > >     >     times. The proposal is to
> invoke it
>     > once
>     >     > with
>     >     >     >> > > count=10. The
>     >     >     >> > > > > > > > > count is
>     >     >     >> > > > > > > > >     >     provided to authorizer just
> for
>     > audit
>     >     > logging
>     >     >     >> > > purposes.
>     >     >     >> > > > > > > > >     >     5. Authorizer implements
> Closeable,
>     > so you
>     >     >     >> could use
>     >     >     >> > > > > > close()
>     >     >     >> > > > > > > to
>     >     >     >> > > > > > > > > flush
>     >     >     >> > > > > > > > >     >     audits?
>     >     >     >> > > > > > > > >     >
>     >     >     >> > > > > > > > >     >     On Thu, Aug 8, 2019 at 7:01
> AM Don
>     > Bosco
>     >     > Durai <
>     >     >     >> > > > > > > > bo...@apache.org
>     >     >     >> > > > > > > > > >
>     >     >     >> > > > > > > > >     > wrote:
>     >     >     >> > > > > > > > >     >
>     >     >     >> > > > > > > > >     >     > Rajini
>     >     >     >> > > > > > > > >     >     >
>     >     >     >> > > > > > > > >     >     > Thanks for putting this
> together.
>     > It is
>     >     >     >> looking
>     >     >     >> > > good. I
>     >     >     >> > > > > > > have
>     >     >     >> > > > > > > > > few
>     >     >     >> > > > > > > > >     >     > questions...
>     >     >     >> > > > > > > > >     >     >
>     >     >     >> > > > > > > > >     >     > 1. List<AuthorizationResult>
>     >     > authorize(...,
>     >     >     >> > > List<Action>
>     >     >     >> > > > > > > > > actions).
>     >     >     >> > > > > > > > >     > Do you
>     >     >     >> > > > > > > > >     >     > see a scenario where the
> broker
>     > will
>     >     > call
>     >     >     >> > > authorize for
>     >     >     >> > > > > > > > > multiple
>     >     >     >> > > > > > > > >     > topics at
>     >     >     >> > > > > > > > >     >     > the same time? I can
> understand
>     > that
>     >     > during
>     >     >     >> > > > > > > creating/deleting
>     >     >     >> > > > > > > > > ACLS,
>     >     >     >> > > > > > > > >     >     > multiple permissions for
> multiple
>     >     > resources
>     >     >     >> might
>     >     >     >> > > be
>     >     >     >> > > > > > done.
>     >     >     >> > > > > > > > For
>     >     >     >> > > > > > > > >     > authorize
>     >     >     >> > > > > > > > >     >     > call, would this be a case?
> And
>     > does the
>     >     >     >> Authorize
>     >     >     >> > > > > > > > > implementation
>     >     >     >> > > > > > > > >     > will be
>     >     >     >> > > > > > > > >     >     > able to do performance
>     > optimization
>     >     > because of
>     >     >     >> > > this? Or
>     >     >     >> > > > > > > > should
>     >     >     >> > > > > > > > > we
>     >     >     >> > > > > > > > >     > just keep
>     >     >     >> > > > > > > > >     >     > it simple? I don't see it
> as an
>     > issue
>     >     > from
>     >     >     >> Apache
>     >     >     >> > > Ranger
>     >     >     >> > > > > > > > side,
>     >     >     >> > > > > > > > > but
>     >     >     >> > > > > > > > >     > just
>     >     >     >> > > > > > > > >     >     > checking to see whether we
> need
>     > to be
>     >     > aware of
>     >     >     >> > > something.
>     >     >     >> > > > > > > > >     >     > 2. Should I assume that the
>     >     > SecurityProtocol
>     >     >     >> passed
>     >     >     >> > > > > > during
>     >     >     >> > > > > > > > > start and
>     >     >     >> > > > > > > > >     > the
>     >     >     >> > > > > > > > >     >     > one return by
>     >     >     >> > > KafkaRequestContext.securityProtocol() will
>     >     >     >> > > > > > > be
>     >     >     >> > > > > > > > > the
>     >     >     >> > > > > > > > >     > same?
>     >     >     >> > > > > > > > >     >     > CompletableFuture<Void>
>     > start(String
>     >     >     >> listenerName,
>     >     >     >> > > > > > > > > SecurityProtocol
>     >     >     >> > > > > > > > >     >     > securityProtocol);
>     >     >     >> > > > > > > > >     >     >
>     > KafkaRequestContext.securityProtocol()
>     >     >     >> > > > > > > > >     >     > 3. What is the purpose of
>     >     > AuthorizationMode?
>     >     >     >> How
>     >     >     >> > > does the
>     >     >     >> > > > > > > > > broker
>     >     >     >> > > > > > > > >     > decide
>     >     >     >> > > > > > > > >     >     > what mode to use when the
>     > authorize()
>     >     > method
>     >     >     >> is
>     >     >     >> > > called?
>     >     >     >> > > > > > > > >     >     > 4. Can we clarify "count" in
>     > Action a
>     >     > bit
>     >     >     >> more?
>     >     >     >> > > How is it
>     >     >     >> > > > > > > > used?
>     >     >     >> > > > > > > > >     >     > 5. Do you feel having "stop"
>     > along with
>     >     >     >> "start" be
>     >     >     >> > > > > > helpful?
>     >     >     >> > > > > > > > > E.g. In
>     >     >     >> > > > > > > > >     > Ranger
>     >     >     >> > > > > > > > >     >     > we try to optimize the Audit
>     > writing by
>     >     >     >> caching
>     >     >     >> > > the logs
>     >     >     >> > > > > > > for
>     >     >     >> > > > > > > > a
>     >     >     >> > > > > > > > > fixed
>     >     >     >> > > > > > > > >     >     > interval. But when the
> Broker
>     >     > terminates, we
>     >     >     >> do a
>     >     >     >> > > forced
>     >     >     >> > > > > > > > flush.
>     >     >     >> > > > > > > > >     > Having an
>     >     >     >> > > > > > > > >     >     > explicit "stop" might give
> us a
>     > formal
>     >     > way to
>     >     >     >> > > flush our
>     >     >     >> > > > > > > > audits.
>     >     >     >> > > > > > > > >     >     >
>     >     >     >> > > > > > > > >     >     > Thanks
>     >     >     >> > > > > > > > >     >     >
>     >     >     >> > > > > > > > >     >     > Bosco
>     >     >     >> > > > > > > > >     >     >
>     >     >     >> > > > > > > > >     >     > On 8/7/19, 3:59 PM, "Rajini
>     > Sivaram" <
>     >     >     >> > > > > > > > rajinisiva...@gmail.com
>     >     >     >> > > > > > > > > >
>     >     >     >> > > > > > > > >     > wrote:
>     >     >     >> > > > > > > > >     >     >
>     >     >     >> > > > > > > > >     >     >     Hi Ron/Harsha/Satish,
>     >     >     >> > > > > > > > >     >     >
>     >     >     >> > > > > > > > >     >     >     Thanks for reviewing
> the KIP!
>     >     >     >> > > > > > > > >     >     >
>     >     >     >> > > > > > > > >     >     >     We should perhaps have
> a wider
>     >     > discussion
>     >     >     >> > > outside
>     >     >     >> > > > > > this
>     >     >     >> > > > > > > > KIP
>     >     >     >> > > > > > > > > for
>     >     >     >> > > > > > > > >     >     > refactoring
>     >     >     >> > > > > > > > >     >     >     clients so that others
> who
>     > are not
>     >     >     >> following
>     >     >     >> > > this KIP
>     >     >     >> > > > > > > > also
>     >     >     >> > > > > > > > >     > notice the
>     >     >     >> > > > > > > > >     >     >     discussion. Satish,
> would you
>     > like
>     >     > to
>     >     >     >> start a
>     >     >     >> > > > > > > discussion
>     >     >     >> > > > > > > > > thread
>     >     >     >> > > > > > > > >     > on dev?
>     >     >     >> > > > > > > > >     >     >
>     >     >     >> > > > > > > > >     >     >     Regards,
>     >     >     >> > > > > > > > >     >     >
>     >     >     >> > > > > > > > >     >     >     Rajini
>     >     >     >> > > > > > > > >     >     >
>     >     >     >> > > > > > > > >     >     >
>     >     >     >> > > > > > > > >     >     >     On Wed, Aug 7, 2019 at
> 6:21 PM
>     >     > Satish
>     >     >     >> Duggana <
>     >     >     >> > > > > > > > >     >     > satish.dugg...@gmail.com>
>     >     >     >> > > > > > > > >     >     >     wrote:
>     >     >     >> > > > > > > > >     >     >
>     >     >     >> > > > > > > > >     >     >     > I felt the same need
> when
>     > we want
>     >     > to
>     >     >     >> add a
>     >     >     >> > > > > > pluggable
>     >     >     >> > > > > > > > API
>     >     >     >> > > > > > > > > for
>     >     >     >> > > > > > > > >     > core
>     >     >     >> > > > > > > > >     >     >     > server functionality.
> This
>     > does
>     >     > not
>     >     >     >> need to
>     >     >     >> > > be part
>     >     >     >> > > > > > > of
>     >     >     >> > > > > > > > > this
>     >     >     >> > > > > > > > >     > KIP, it
>     >     >     >> > > > > > > > >     >     >     > can be a separate
> KIP. I can
>     >     > contribute
>     >     >     >> those
>     >     >     >> > > > > > > > refactoring
>     >     >     >> > > > > > > > >     > changes if
>     >     >     >> > > > > > > > >     >     >     > others are OK with
> that.
>     >     >     >> > > > > > > > >     >     >     >
>     >     >     >> > > > > > > > >     >     >     > It is better to have a
>     > structure
>     >     > like
>     >     >     >> below.
>     >     >     >> > > > > > > > >     >     >     >
>     >     >     >> > > > > > > > >     >     >     > kafka-common:
>     >     >     >> > > > > > > > >     >     >     > common classes which
> can be
>     > used
>     >     > in any
>     >     >     >> of
>     >     >     >> > > the
>     >     >     >> > > > > > other
>     >     >     >> > > > > > > > > modules
>     >     >     >> > > > > > > > >     > in Kafka
>     >     >     >> > > > > > > > >     >     >     > like client,
>     > Kafka-server-common
>     >     > and
>     >     >     >> server
>     >     >     >> > > etc.
>     >     >     >> > > > > > > > >     >     >     >
>     >     >     >> > > > > > > > >     >     >     > kafka-client-common:
>     >     >     >> > > > > > > > >     >     >     > common classes which
> can be
>     > used
>     >     > in the
>     >     >     >> > > client
>     >     >     >> > > > > > > module.
>     >     >     >> > > > > > > > > This
>     >     >     >> > > > > > > > >     > can be
>     >     >     >> > > > > > > > >     >     >     > part of client module
>     > itself.
>     >     >     >> > > > > > > > >     >     >     >
>     >     >     >> > > > > > > > >     >     >     > kafka-server-common:
>     >     >     >> > > > > > > > >     >     >     > classes required only
> for
>     >     > kafka-server.
>     >     >     >> > > > > > > > >     >     >     >
>     >     >     >> > > > > > > > >     >     >     > Thanks.
>     >     >     >> > > > > > > > >     >     >     > Satish.
>     >     >     >> > > > > > > > >     >     >     >
>     >     >     >> > > > > > > > >     >     >     > On Wed, Aug 7, 2019
> at 9:28
>     > PM
>     >     > Harsha
>     >     >     >> > > Chintalapani
>     >     >     >> > > > > > <
>     >     >     >> > > > > > > > >     > ka...@harsha.io>
>     >     >     >> > > > > > > > >     >     >     > wrote:
>     >     >     >> > > > > > > > >     >     >     > >
>     >     >     >> > > > > > > > >     >     >     > > Thanks for the KIP
> Rajini.
>     >     >     >> > > > > > > > >     >     >     > > Quick thought, it
> would
>     > be good
>     >     > to
>     >     >     >> have a
>     >     >     >> > > common
>     >     >     >> > > > > > > > module
>     >     >     >> > > > > > > > >     > outside of
>     >     >     >> > > > > > > > >     >     >     > clients
>     >     >     >> > > > > > > > >     >     >     > > that only applies to
>     > server side
>     >     >     >> > > interfaces &
>     >     >     >> > > > > > > > changes.
>     >     >     >> > > > > > > > > It
>     >     >     >> > > > > > > > >     > looks
>     >     >     >> > > > > > > > >     >     > like we
>     >     >     >> > > > > > > > >     >     >     > are
>     >     >     >> > > > > > > > >     >     >     > > increasingly in
> favor of
>     > using
>     >     > Java
>     >     >     >> > > interface for
>     >     >     >> > > > > > > > > pluggable
>     >     >     >> > > > > > > > >     >     > modules  on
>     >     >     >> > > > > > > > >     >     >     > the
>     >     >     >> > > > > > > > >     >     >     > > broker side.
>     >     >     >> > > > > > > > >     >     >     > >
>     >     >     >> > > > > > > > >     >     >     > > Thanks,
>     >     >     >> > > > > > > > >     >     >     > > Harsha
>     >     >     >> > > > > > > > >     >     >     > >
>     >     >     >> > > > > > > > >     >     >     > >
>     >     >     >> > > > > > > > >     >     >     > > On Tue, Aug 06,
> 2019 at
>     > 2:31 PM,
>     >     >     >> Rajini
>     >     >     >> > > Sivaram <
>     >     >     >> > > > > > > > >     >     > rajinisiva...@gmail.com
>     >     >     >> > > > > > > > >     >     >     > >
>     >     >     >> > > > > > > > >     >     >     > > wrote:
>     >     >     >> > > > > > > > >     >     >     > >
>     >     >     >> > > > > > > > >     >     >     > > > Hi all,
>     >     >     >> > > > > > > > >     >     >     > > >
>     >     >     >> > > > > > > > >     >     >     > > > I have created a
> KIP to
>     >     > replace the
>     >     >     >> Scala
>     >     >     >> > > > > > > > Authorizer
>     >     >     >> > > > > > > > > API
>     >     >     >> > > > > > > > >     > with a
>     >     >     >> > > > > > > > >     >     > new
>     >     >     >> > > > > > > > >     >     >     > Java
>     >     >     >> > > > > > > > >     >     >     > > > API:
>     >     >     >> > > > > > > > >     >     >     > > >
>     >     >     >> > > > > > > > >     >     >     > > > -
>     >     >     >> > > > > > > > >     >     >     > > >
>     >     >     >> > > > > > >
>     > https://cwiki.apache.org/confluence/display/KAFKA/
>     >     >     >> > > > > > > > >     >     >     > > >
>     >     >     >> > > KIP-504+-+Add+new+Java+Authorizer+Interface
>     >     >     >> > > > > > > > >     >     >     > > >
>     >     >     >> > > > > > > > >     >     >     > > > This is
> replacement for
>     > KIP-50
>     >     >     >> which was
>     >     >     >> > > > > > accepted
>     >     >     >> > > > > > > > > but never
>     >     >     >> > > > > > > > >     >     > merged.
>     >     >     >> > > > > > > > >     >     >     > Apart
>     >     >     >> > > > > > > > >     >     >     > > > from moving to a
> Java
>     > API
>     >     > consistent
>     >     >     >> > > with other
>     >     >     >> > > > > > > > > pluggable
>     >     >     >> > > > > > > > >     >     > interfaces
>     >     >     >> > > > > > > > >     >     >     > in the
>     >     >     >> > > > > > > > >     >     >     > > > broker, KIP-504
> also
>     > attempts
>     >     > to
>     >     >     >> address
>     >     >     >> > > known
>     >     >     >> > > > > > > > > limitations
>     >     >     >> > > > > > > > >     > in the
>     >     >     >> > > > > > > > >     >     >     > > > authorizer. If
> you have
>     > come
>     >     > across
>     >     >     >> other
>     >     >     >> > > > > > > > > limitations that
>     >     >     >> > > > > > > > >     > you
>     >     >     >> > > > > > > > >     >     > would
>     >     >     >> > > > > > > > >     >     >     > like
>     >     >     >> > > > > > > > >     >     >     > > > to see addressed
> in the
>     > new
>     >     > API,
>     >     >     >> please
>     >     >     >> > > raise
>     >     >     >> > > > > > > these
>     >     >     >> > > > > > > > > on the
>     >     >     >> > > > > > > > >     >     > discussion
>     >     >     >> > > > > > > > >     >     >     > > > thread so that we
> can
>     >     > consider those
>     >     >     >> > > too. All
>     >     >     >> > > > > > > > > suggestions
>     >     >     >> > > > > > > > >     > and
>     >     >     >> > > > > > > > >     >     > feedback
>     >     >     >> > > > > > > > >     >     >     > are
>     >     >     >> > > > > > > > >     >     >     > > > welcome.
>     >     >     >> > > > > > > > >     >     >     > > >
>     >     >     >> > > > > > > > >     >     >     > > > Thank you,
>     >     >     >> > > > > > > > >     >     >     > > >
>     >     >     >> > > > > > > > >     >     >     > > > Rajini
>     >     >     >> > > > > > > > >     >     >     > > >
>     >     >     >> > > > > > > > >     >     >     >
>     >     >     >> > > > > > > > >     >     >
>     >     >     >> > > > > > > > >     >     >
>     >     >     >> > > > > > > > >     >     >
>     >     >     >> > > > > > > > >     >     >
>     >     >     >> > > > > > > > >     >
>     >     >     >> > > > > > > > >     >
>     >     >     >> > > > > > > > >     >
>     >     >     >> > > > > > > > >     >
>     >     >     >> > > > > > > > >
>     >     >     >> > > > > > > > >
>     >     >     >> > > > > > > > >
>     >     >     >> > > > > > > > >
>     >     >     >> > > > > > > >
>     >     >     >> > > > > > >
>     >     >     >> > > > > >
>     >     >     >> > > >
>     >     >     >> > >
>     >     >     >> >
>     >     >     >>
>     >     >     >
>     >     >
>     >     >
>     >     >
>     >     >
>     >     >
>     >
>     >
>     >
>     >
>     >
>
>
>
>

Reply via email to