Hi Brian,

Thanks for the proposal! I have a couple comments/questions:

1. I'm having a hard time understanding the point of `QuotaEntity.Type`. It
sounds like this might be just for convenience since the APIs are using
string types. If so, I think it's a bit misleading to represent it as an
enum. In particular, I cannot see how the UNKNOWN type would be used. The
`PrincipalBuilder` plugin allows users to provide their own principal type,
so I think the API should be usable even for unknown entity types. Note
also that we appear to be relying on this enum in `QuotaFilter` class. I
think that should be changed to just a string?

2. It's a little annoying that we have two separate APIs to describe client
quotas. The names do not really make it clear which API someone should use.
It might just be a naming problem. In the command utility, it looks like
you are using --list and --describe to distinguish the two. Perhaps the
APIs can be named similarly: e.g. ListClientQuotas and
DescribeClientQuotas. However, looking at the examples, it's still not very
clear to me why we need both options. Basically I'm finding the
"config-centric" mode not very intuitive.

Thanks,
Jason


On Fri, Jan 17, 2020 at 2:14 PM Brian Byrne <bby...@confluent.io> wrote:

> Thanks Colin, I've updated the KIP with the relevant changes.
>
> On Fri, Jan 17, 2020 at 10:17 AM Colin McCabe <cmcc...@apache.org> wrote:
>
> > I thought about this a little bit more, and maybe we can leave in the
> > enums rather than going with strings.  But we need to have an "UNKNOWN"
> > value for all the enums, so that if a value that the client doesn't
> > understand is returned, it can get translated to that.  This is what we
> did
> > with the ACLs API, and it worked out well.
> >
>
> Done. One thing I omitted here was that the API still accepts/returns
> Strings, since there may be plugins that specify their own types/units. If
> we'd like to keep it this way, then the UNKNOWN may be unnecessary. Let me
> know how you'd feel this is best resolved.
>
>
> > On balance, I think we should leave in "units."  It could be useful for
> > future-proofing.
> >
>
> Done. Also added a comment in the ClientQuotaCommand to default to RATE_BPS
> if no unit is supplied to ease adoption.
>
>
> > Also, since there are other kinds of quotas not covered by this API, we
> > should rename DescribeQuotas -> DescribeClientQuotas, AlterQuotas ->
> > AlterClientQuotas, etc. etc.
> >
>
> Done. Updated command and script name, too.
>
>
> > Maybe QuotaFilter doesn't need a "rule" argument to its constructor right
> > now.  We can just do literal matching for everything.  Like I said
> earlier,
> > I don't think people do a lot of prefixing of principal names.  When we
> > added the "prefix matching" stuff for ACLs, it was mostly to let people
> do
> > it for topics.  Then we made it more generic because it was easy to do
> so.
> > In this case, the API is probably easier to understand if we just do a
> > literal match.  We can always have a follow-on KIP to add fancier
> filtering
> > if needed.
> >
>
> Done.
>
>
> > For DescribeEffectiveQuotasResult, if you request all relevant quotas, it
> > would be nice to see which ones apply and which ones don't.  Right now,
> you
> > just get a map, but you don't know which quotas are actually in force,
> and
> > which are not relevant but might be in the future if a different quota
> gets
> > deleted.  One way to do this would be to have two maps-- one for
> applicable
> > quotas and one for shadowed quotas.
> >
>
> So the way it's specified is that it maps QuotaKey -> Value, however Value
> is actually defined to have two parts: the entry, and a list of overridden
> entries (where an entry is the value, along with the source). Perhaps the
> Value is poorly named, or maybe there's a simpler structure to be had?
>
> Thanks,
> Brian
>
>
>
> > On Tue, Jan 14, 2020, at 13:32, Brian Byrne wrote:
> > > Hi Colin,
> > >
> > > Your feedback is appreciated, thank you.
> > >
> > > On Tue, Jan 14, 2020 at 11:34 AM Colin McCabe <cmcc...@apache.org>
> > wrote:
> > >
> > > > This is probably a nitpick, but it would be nice to specify that this
> > list
> > > > is in order of highest priority to lowest.
> > > >
> > >
> > > Done.
> > >
> > >
> > > > Hmm.  Maybe --show-overridden or --include-overridden is a better
> flag
> > > > name?
> > > >
> > >
> > > Done (--show-overridden).
> > >
> > >
> > > > I think it would be nice to avoid using enums for QuotaEntity#Type,
> > > > QuotaKey#Type, and QuotaFilter#Rule.  With enums, we have to worry
> > about
> > > > forwards and backwards compatibility problems.  For example, what do
> > you do
> > > > when you're querying a broker that has a new value for one of these,
> > that
> > > > is not in your enum?  In the  past, we've created an UNKNOWN value
> for
> > enum
> > > > types to solve this conundrum, but I'm not sure the extra complexity
> is
> > > > worth it here.  We can jut make them strings and avoid worrying about
> > the
> > > > compatibility issues.
> > > >
> > >
> > > Makes sense. Done.
> > >
> > >
> > > > Is QuotaKey#Units really needed?  It seems like perhaps QuotaKey#Type
> > > > could imply the units used.
> > > >
> > >
> > > Possibly, maybe. It depends on how much structure is useful, which
> > > influences the implementation in the broker. For example, for the
> > existing
> > > (global) bytes-per-second types (e.g. consumer byte rate), it may be
> > useful
> > > to define them on a per-broker BPS basis, and in some cases, in terms
> of
> > > shares. The question becomes whether it'd be better to have a module in
> > the
> > > broker that is capable of deducing the effective quota automatically
> > among
> > > different units for the same quota type, or whether each should be
> > handled
> > > individually.
> > >
> > > Given we don't expect many units, and some units may be incompatible
> with
> > > others, perhaps it is best to have the unit implicit in the type
> string,
> > to
> > > be handled by the broker appropriately.
> > >
> > > I've updated the KIP to reflect this change, which factors out the
> > > QuotaKey. Let me know your thoughts.
> > >
> > >
> > > > How common is the prefix matching use-case?  I haven't heard about
> > people
> > > > setting up principal names with a common prefix or anything like
> > that-- is
> > > > that commonly done?
> > > >
> > >
> > > It was, in part, for exposition, but would handle a case where
> principals
> > > could be prefixed by organization/team name, numbered, or the like. If
> > you
> > > prefer I remove the rules and just accept a pattern, that's also an
> > option.
> > >
> > >
> > >
> > > > I sort of feel like maybe we could have a simpler API for
> > describeQuotas
> > > > where it takes a map of quota entity type to value, and we do a
> > logical AND
> > > > On that.  I'm not sure if there's really a reason why it needs to be
> a
> > > > collection rather than a set, in other words...
> > > >
> > >
> > > For clarification, are you suggesting an interface where the user might
> > > provide {type=user, name=x} and it would return all entities that
> match,
> > > with their resulting quota values? Should I scrap pattern matching for
> > now,
> > > since it's a simple extension that can be done at a future time?
> > >
> > > Thanks,
> > > Brian
> > >
> > >
> > >
> > > > On Wed, Dec 11, 2019, at 15:30, Brian Byrne wrote:
> > > > > Hello all,
> > > > >
> > > > > I'm reviving the discussion for adding a quotas API to the admin
> > client
> > > > by
> > > > > submitting a new proposal. There are some notable changes from
> > previous
> > > > > attempts, namely a way to deduce the effective quota for a client
> > > > (entity),
> > > > > a way to query for configured quotas, and the concept of "units" on
> > > > quotas,
> > > > > among other minor updates.
> > > > >
> > > > > Please take a look, and I'll be happy to make any clarifications
> and
> > > > > modifications in regards to feedback.
> > > > >
> > > > >
> > > >
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-546%3A+Add+quota-specific+APIs+to+the+Admin+Client%2C+redux
> > > > >
> > > > > Thanks,
> > > > > Brian
> > > > >
> > > >
> > >
> >
>

Reply via email to