The quota callback interface was updated based on Jun's suggestion during
the PR review. I have updated the KIP to reflect this.

Let me know if there are any concerns.

Thanks,

Rajini

On Thu, Apr 5, 2018 at 1:04 PM, Rajini Sivaram <rajinisiva...@gmail.com>
wrote:

> Thanks, Ismael.
>
> I have updated the KIP and the PR.
>
> On Wed, Apr 4, 2018 at 7:37 PM, Ismael Juma <ism...@juma.me.uk> wrote:
>
>> Sounds good to me Rajini. Good catch spotting this before it's included in
>> a release. :)
>>
>> Ismael
>>
>> On Wed, Apr 4, 2018 at 11:13 AM, Rajini Sivaram <rajinisiva...@gmail.com>
>> wrote:
>>
>> > For compatibility reasons, we are now using Java rather than Scala for
>> all
>> > pluggable interfaces including those on the broker. There is already a
>> KIP
>> > to move Authorizer to Java as well. As we will be removing support for
>> Java
>> > 7 in the next release, we can also use default methods in Java when we
>> need
>> > to update pluggable Java interfaces. So the plan is to use Java for all
>> new
>> > pluggable interfaces.
>> >
>> > We already have the package org.apache.kafka.server, under which we have
>> > the sub-package for policies, so it makes sense to define quota
>> callback as
>> > a Java interface here too.
>> >
>> > If there are any concerns, please let me know. Otherwise I will update
>> the
>> > KIP and the associated PR.
>> >
>> > Thank you,
>> >
>> > Rajini
>> >
>> > On Thu, Mar 22, 2018 at 9:52 PM, Rajini Sivaram <
>> rajinisiva...@gmail.com>
>> > wrote:
>> >
>> > > Since there all the comments so far have been addressed, I will start
>> > vote
>> > > for this KIP.
>> > >
>> > > Regards,
>> > >
>> > > Rajini
>> > >
>> > > On Thu, Mar 15, 2018 at 6:37 PM, Rajini Sivaram <
>> rajinisiva...@gmail.com
>> > >
>> > > wrote:
>> > >
>> > >> Thanks, Jun.
>> > >>
>> > >> 11. updatePartitionMetadata() provides all partitions with their
>> leaders
>> > >> so that callbacks that scale down quotas based on fraction of
>> partitions
>> > >> hosted on each broker may compute the scaling factor. Callbacks that
>> > scale
>> > >> up quotas based on the partition count hosted on each broker can
>> simply
>> > >> filter out the others. I have updated the Javadoc in the KIP.
>> > >>
>> > >> On Thu, Mar 15, 2018 at 5:24 PM, Jun Rao <j...@confluent.io> wrote:
>> > >>
>> > >>> Hi, Rajini,
>> > >>>
>> > >>> Thanks for the explanation. It makes sense.
>> > >>>
>> > >>> 11. We probably want to clarify in the interface that every time
>> when
>> > >>> updatePartitionMetadata() is called, the full list of partitions
>> whose
>> > >>> leader is on this broker will be passed in?
>> > >>>
>> > >>> Jun
>> > >>>
>> > >>> On Thu, Mar 15, 2018 at 4:42 AM, Rajini Sivaram <
>> > rajinisiva...@gmail.com
>> > >>> >
>> > >>> wrote:
>> > >>>
>> > >>> > Hi Jun,
>> > >>> >
>> > >>> > 12. Sorry, I had to revert the change that removed `
>> > >>> > ClientQuotaCallback.quotaLimit()`. We are allowing quota
>> callbacks
>> > to
>> > >>> use
>> > >>> > custom metric tags. For each request, quota manager uses `
>> > >>> > ClientQuotaCallback.quota()` to map (user-principal, client-id) to
>> > the
>> > >>> > metric tags that determine which clients share the quota. When
>> quotas
>> > >>> are
>> > >>> > updated using  `updateQuota` or `updatePartitionMetadata`,
>> existing
>> > >>> metrics
>> > >>> > need to updated, but quota managers don't have a reverse mapping
>> of
>> > >>> metric
>> > >>> > tags to (user-principal, client-id) for
>> invoking`ClientQuotaCallback.
>> > >>> > quota()
>> > >>> > ` . Callbacks cannot return all updated metrics since they don't
>> have
>> > >>> > access to the metrics object and we don't want to require
>> callbacks
>> > to
>> > >>> > track all the entities for which metrics have been created (since
>> > they
>> > >>> may
>> > >>> > contain client-ids and hence need expiring). With the extra
>> method,
>> > >>> quota
>> > >>> > manager traverses the metric list after `updateQuota` or `
>> > >>> > updatePartitionMetadata` and obtains the latest value
>> corresponding
>> > to
>> > >>> each
>> > >>> > metric based on the tags using `ClientQuotaCallback.quotaLimi
>> t()`.
>> > >>> >
>> > >>> > An alternative may be to delay quota metrics updates until the
>> next
>> > >>> request
>> > >>> > that uses the metric. When we get sensors, we can check if the
>> quota
>> > >>> > configured in the metric matches the value returned by `
>> > >>> > ClientQuotaCallback.quota()`. This will be slightly more expensive
>> > >>> since we
>> > >>> > need to check on every request, but the callback API as well as
>> the
>> > >>> quota
>> > >>> > manager update code path would be simpler. What do you think?
>> > >>> >
>> > >>> > Thanks,
>> > >>> >
>> > >>> > Rajini
>> > >>> >
>> > >>> >
>> > >>> >
>> > >>> > On Wed, Mar 14, 2018 at 11:21 PM, Rajini Sivaram <
>> > >>> rajinisiva...@gmail.com>
>> > >>> > wrote:
>> > >>> >
>> > >>> > > Hi Jun,
>> > >>> > >
>> > >>> > > Thank you for reviewing the KIP.
>> > >>> > >
>> > >>> > > 10. This is the current behaviour (this KIP retains the same
>> > >>> behaviour
>> > >>> > for
>> > >>> > > the default quota callback). We include 'user' and 'client-id'
>> tags
>> > >>> in
>> > >>> > > all the quota metrics, rather than omit tags at the moment.
>> > >>> > >
>> > >>> > > 11. Ah, I hadn't realised that. I wasn't expecting to include
>> > deleted
>> > >>> > > partitions in updatePartitionMetadata. I have updated the
>> Javadoc
>> > in
>> > >>> the
>> > >>> > > KIP to reflect that.
>> > >>> > >
>> > >>> > > 12. When quotas are updated as a result of `updateQuota` or `
>> > >>> > > updatePartitionMetadata`, we may need to update quota bound for
>> one
>> > >>> or
>> > >>> > > more existing metrics. I didn't want to expose metrics to the
>> > >>> callback.
>> > >>> > So `
>> > >>> > > quotaLimit` was providing the new quotas corresponding to
>> existing
>> > >>> > > metrics. But perhaps a neater way to do this is to return
>> updated
>> > >>> quotas
>> > >>> > as
>> > >>> > > the return value of `updateQuota` and `updatePartitionMetadata`
>> so
>> > >>> that
>> > >>> > > the quota manager can handle metrics updates for those. I have
>> > >>> updated
>> > >>> > the
>> > >>> > > KIP.
>> > >>> > >
>> > >>> > >
>> > >>> > > On Wed, Mar 14, 2018 at 9:57 PM, Jun Rao <j...@confluent.io>
>> wrote:
>> > >>> > >
>> > >>> > >> Hi, Rajini,
>> > >>> > >>
>> > >>> > >> Thanks for the KIP. Looks good overall. A few comments below.
>> > >>> > >>
>> > >>> > >> 10. "If <user> quota config is used, *user* tag is set to user
>> > >>> principal
>> > >>> > >> of
>> > >>> > >> the session and *client-id* tag is set to empty string. "
>> Could we
>> > >>> just
>> > >>> > >> omit such a tag if the value is empty?
>> > >>> > >>
>> > >>> > >> 11. I think Viktor has a valid point on handling partition
>> > removal.
>> > >>> > >> Currently, we use -2 as the leader to signal the deletion of a
>> > >>> > partition.
>> > >>> > >> Not sure if we want to depend on that in the interface since
>> it's
>> > an
>> > >>> > >> internal value.
>> > >>> > >>
>> > >>> > >> 12. Could you explain a bit more the need for quotaLimit()?
>> This
>> > is
>> > >>> > called
>> > >>> > >> after the updateQuota() call. Could we just let updateQuota do
>> > what
>> > >>> > >> quotaLimit()
>> > >>> > >> does?
>> > >>> > >>
>> > >>> > >> Jun
>> > >>> > >>
>> > >>> > >> On Wed, Feb 21, 2018 at 10:57 AM, Rajini Sivaram <
>> > >>> > rajinisiva...@gmail.com
>> > >>> > >> >
>> > >>> > >> wrote:
>> > >>> > >>
>> > >>> > >> > Hi all,
>> > >>> > >> >
>> > >>> > >> > I have submitted KIP-257 to enable customisation of client
>> quota
>> > >>> > >> > computation:
>> > >>> > >> >
>> > >>> > >> > https://cwiki.apache.org/confluence/display/KAFKA/KIP-
>> > >>> > >> > 257+-+Configurable+Quota+Management
>> > >>> > >> >
>> > >>> > >> >
>> > >>> > >> > The KIP proposes to make quota management pluggable to enable
>> > >>> > >> group-based
>> > >>> > >> > and partition-based quotas for clients.
>> > >>> > >> >
>> > >>> > >> > Feedback and suggestions are welcome.
>> > >>> > >> >
>> > >>> > >> > Thank you...
>> > >>> > >> >
>> > >>> > >> > Regards,
>> > >>> > >> >
>> > >>> > >> > Rajini
>> > >>> > >> >
>> > >>> > >>
>> > >>> > >
>> > >>> > >
>> > >>> >
>> > >>>
>> > >>
>> > >>
>> > >
>> >
>>
>
>

Reply via email to