Thanks again, Rajini, Units will have to be implemented on a per-config basis, then. I've removed all language reference to units and replaced QuotaKey -> String (config name). I've also renamed DescribeEffective -> Resolve, and replaced --list with --describe, and --describe to --resolve to be consistent with the config command and clear about what functionality is "new".
Thanks, Brian On Fri, Jan 24, 2020 at 2:27 AM Rajini Sivaram <rajinisiva...@gmail.com> wrote: > Hi Brian, > > Thanks for the responses. > > 4) Yes, agree that it would be simpler to leave units out of the initial > design. We currently have units that are interpreted by the configurable > callback. The default callback interprets the value as > per-broker-bytes-per-second and per-broker-percentage-cores. But callbacks > using partition-based throughput quotas for example would interpret the > value as cluster-wide-bytes-per-second. We could update callbacks to work > with units, but as you said, it may be better to leave it out initially and > address later. > > > > On Thu, Jan 23, 2020 at 6:29 PM Brian Byrne <bby...@confluent.io> wrote: > > > Thanks Rajini, > > > > 1) Good catch, fixed. > > > > 2) You're right. We'd need to extend ClientQuotaCallback#quotaLimit or > add > > an alternate function. For the sake of an initial implementation, I'm > going > > to remove '--show-overridden', and a subsequent KIP will have to propose > an > > extents to ClientQuotaCallback to return more detailed information. > > > > 3) You're correct. I've removed the default. > > > > 4) The idea of the first iteration is be compatible with the existing > API, > > so no modification to start. The APIs should be kept consistent. If a > user > > wants to add custom functionality, say an entity type, they'll need to > > update their ConfigEntityType any way, and the quotas APIs are meant to > > handle that gracefully by accepting a String which can be propagated. > > > > The catch is 'units'. Part of the reason for having a default unit was > for > > backwards compatibility, but maybe it's best to leave units out of the > > initial design. This might lead to adding more configuration entries, but > > it's also the most flexible option. Thoughts? > > > > Thanks, > > Brian > > > > > > On Thu, Jan 23, 2020 at 4:57 AM Rajini Sivaram <rajinisiva...@gmail.com> > > wrote: > > > > > Hi Brian, > > > > > > Thanks for the KIP. Looks good, hope we finally get this in! > > > > > > A few comments: > > > > > > 1) All the Admin interface methods seem to be using method names > starting > > > with upper-case letter, should be lower-case to be follow conventions. > > > 2) Effective quotas returns not only the actual effective quota, but > also > > > overridden values. I don't think this works with custom quota > callbacks. > > > 3) KIP says that all quotas are currently bytes-per-second and we will > > use > > > RATE_BPS as the default. Request quotas are a percentage. So this > doesn't > > > quite work. We also need to consider how this works with custom quota > > > callbacks. Can custom quota implementations define their own units? > > > 4) We seem to be defining a new set of quota-related classes e.g. for > > quota > > > types, but we haven't considered what we do with the existing API in > > > org.apache.kafka.server.quota. Should we keep these consistent? Are we > > > planning to deprecate some of those? > > > > > > > > > Regards, > > > > > > Rajini > > > > > > > > > On Wed, Jan 22, 2020 at 7:28 PM Brian Byrne <bby...@confluent.io> > wrote: > > > > > > > Hi Jason, > > > > > > > > I agree on (1). It was Colin's original suggestion, too, but he had > > > changed > > > > his mind in preference for enums. Strings are the more generic way > for > > > now, > > > > so hopefully Colin can share his thinking when he's back. The > > QuotaFilter > > > > usage was an error, this has been corrected. > > > > > > > > For (2), the config-centric mode is what we have today in > > CommandConfig: > > > > reading/altering the configuration as it's described. The > > > > DescribeEffectiveClientQuotas would be resolving the various config > > > entries > > > > to see what actually applies to a particular entity. The examples > are a > > > > little trivial, but the resolution can become much more complicated > as > > > the > > > > number of config entries grows. > > > > > > > > List/describe aren't perfect either. Perhaps describe/resolve are a > > > better > > > > pair, with DescribeEffectiveClientQuotas -> ResolveClientQuotas? > > > > > > > > I appreciate the feedback! > > > > > > > > Thanks, > > > > Brian > > > > > > > > > > > > > > > > On Tue, Jan 21, 2020 at 12:09 PM Jason Gustafson <ja...@confluent.io > > > > > > wrote: > > > > > > > > > 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 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > >