Piyush Vijay On Fri, May 18, 2018 at 1:55 PM, Andy Coates <a...@confluent.io> wrote:
> Hey Piyush, > > Thanks for getting this in! :D > > About to read now. But just quickly... > > 1. I'll read up on the need for getMatchingAcls - but just playing devils > advocate for a moment - if a current caller of getAcls() expects it to > return the full set of ACLs for a given resource, would post this change > only returning a sub set and requiring them to return getMatchingAcls to > get the full set not itself be a break in compatibility? I'm thinking about > any tooling / UI / etc people may have built on top of this. If Im missing > the point, then maybe a concrete example, (if you've not already added one > to the doc), may help. > > getAcls() return only ACLs at a particular path. It doesn't return full set of ACLs today. > 2. Something must change on the command line, surely? e.g. as command line > user how would the command differ if I wanted to add an ACL onto a group > called 'foo*' as opposed to a all groups starting with 'foo'? > > Yes, I've been thinking about this. Looks like we need more CLI flags and more APIs in Authorizer if we want to do this in a backward compatible fashion. There might be existing tooling which writes ACL for consumer group literal "foo*" today. We don't want to break things there. > 3. Thinking this through, I actually bracktracked - I don't think it will > work due to path collisions, even with escaping - as the escaped version > can still collide. > > Off to read the doc now. > > On 18 May 2018 at 13:33, Piyush Vijay <piyushvij...@gmail.com> wrote: > > > Ready to review. Let me know if something looks missing or not clear. > > > > Thanks > > > > > > Piyush Vijay > > > > On Fri, May 18, 2018 at 12:54 PM, Piyush Vijay <piyushvij...@gmail.com> > > wrote: > > > > > Andy, > > > > > > 1. Updated the KIP about need for getMatchingAcls(). Basically, it's > > > required to add an inspection method without breaking compatibility. > > > getAcls() only looks at a single location. > > > > > > 2. Nothing will change from user's perspective. they will add / delete/ > > > list ACLs as earlier. > > > > > > 3. Good point about moving everything to a v2 path. We might still have > > to > > > support snowflakes but I will this better. > > > > > > I'm giving it a final read. I'll update here once I think it's ready. > > > > > > Thanks > > > > > > > > > Piyush Vijay > > > > > > On Fri, May 18, 2018 at 12:18 PM, Piyush Vijay <piyushvij...@gmail.com > > > > > wrote: > > > > > >> On it, Andy. It should be out in next 30 mins. > > >> > > >> On Fri, May 18, 2018 at 12:17 PM Andy Coates <a...@confluent.io> > wrote: > > >> > > >>> Hey Piyush, > > >>> > > >>> How are you getting on updating the KIP? Can we offer any support? > > We're > > >>> starting to fly really close to the required 72 hours cut off for > KIPs. > > >>> This doesn't leave much room for resolving any issues any committers > > >>> find. > > >>> Also, we now require at least three committers to review this KIP > today > > >>> _and_ find no issues if we're to get this KIP accepted. > > >>> > > >>> Thanks, > > >>> > > >>> Andy > > >>> > > >>> On 18 May 2018 at 01:21, Piyush Vijay <piyushvij...@gmail.com> > wrote: > > >>> > > >>> > Hi Andy, > > >>> > > > >>> > I still have some minor changes left to the KIP. I'll make them in > > the > > >>> > morning. I'm sorry I got caught up in some other things today. But > > that > > >>> > would still give us 72 hours before the deadline :) > > >>> > > > >>> > Thanks > > >>> > > > >>> > > > >>> > Piyush Vijay > > >>> > > > >>> > On Thu, May 17, 2018 at 1:27 PM, Andy Coates <a...@confluent.io> > > >>> wrote: > > >>> > > > >>> > > Hey Piyush - my bad. Sorry. > > >>> > > > > >>> > > On 17 May 2018 at 13:23, Piyush Vijay <piyushvij...@gmail.com> > > >>> wrote: > > >>> > > > > >>> > > > It's still not complete. I'll drop a message here when I'm done > > >>> with > > >>> > the > > >>> > > > updates. > > >>> > > > > > >>> > > > Thanks > > >>> > > > > > >>> > > > > > >>> > > > Piyush Vijay > > >>> > > > > > >>> > > > On Thu, May 17, 2018 at 12:04 PM, Andy Coates < > a...@confluent.io > > > > > >>> > wrote: > > >>> > > > > > >>> > > > > Thanks for the update to the KIP Piyush! > > >>> > > > > > > >>> > > > > Reading it through again, I've a couple of questions: > > >>> > > > > > > >>> > > > > 1. Why is there a need for a new 'getMatchingAcls' method, > over > > >>> the > > >>> > > > > existing getAcls method? They both take a Resource instance > and > > >>> > return > > >>> > > a > > >>> > > > > set of Acls. What is the difference in their behaviour? > > >>> > > > > 2. It's not clear to me from the KIP alone what will change, > > >>> from a > > >>> > > users > > >>> > > > > perspective, on how they add / list / delete ACLs. I'm > > assuming > > >>> this > > >>> > > > won't > > >>> > > > > change. > > >>> > > > > 3. Writing ACLs to a new location to get around the issues of > > >>> > embedded > > >>> > > > > wildcards in existing group ACLs makes sense to me - but > just a > > >>> > > thought, > > >>> > > > > will we be writing all new ACLs under this new path, or just > > >>> those > > >>> > that > > >>> > > > are > > >>> > > > > partial wildcards? I'm assuming its the latter, but it could > > >>> just be > > >>> > > > 'all' > > >>> > > > > right? As we could escape illegal chars. So we could just > make > > >>> this > > >>> > > new > > >>> > > > > path 'v2' rather wildcard. > > >>> > > > > > > >>> > > > > Andy > > >>> > > > > > > >>> > > > > On 17 May 2018 at 09:32, Colin McCabe <cmcc...@apache.org> > > >>> wrote: > > >>> > > > > > > >>> > > > > > On Thu, May 17, 2018, at 09:28, Piyush Vijay wrote: > > >>> > > > > > > I was planning to do that. > > >>> > > > > > > > > >>> > > > > > > Another unrelated detail is the presence of the support > for > > >>> ‘*’ > > >>> > ACL > > >>> > > > > > > currently. Looks like we’ll have to keep supporting this > > as a > > >>> > > special > > >>> > > > > > case, > > >>> > > > > > > even though using a different location for > wildcard-suffix > > >>> ACLs > > >>> > on > > >>> > > > Zk. > > >>> > > > > > > > >>> > > > > > +1. > > >>> > > > > > > > >>> > > > > > Thanks, Piyush. > > >>> > > > > > > > >>> > > > > > Colin > > >>> > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> > > > > > > > > >>> > > > > > > On Thu, May 17, 2018 at 9:15 AM Colin McCabe < > > >>> cmcc...@apache.org > > >>> > > > > >>> > > > > wrote: > > >>> > > > > > > > > >>> > > > > > > > Thanks, Piyush. +1 for starting the vote soon. > > >>> > > > > > > > > > >>> > > > > > > > Can you please also add a discussion about escaping? > For > > >>> > > example, > > >>> > > > > > earlier > > >>> > > > > > > > we discussed using backslashes to escape special > > >>> characters. > > >>> > So > > >>> > > > that > > >>> > > > > > users > > >>> > > > > > > > can create an ACL referring to a literal "foo*" group > by > > >>> > creating > > >>> > > > an > > >>> > > > > > ACL > > >>> > > > > > > > for "foo\*" Similarly, you can get a literal backslash > > >>> with > > >>> > > "\\". > > >>> > > > > > This is > > >>> > > > > > > > the standard UNIX escaping mechanism. > > >>> > > > > > > > > > >>> > > > > > > > Also, for the section that says "Changes to AdminClient > > >>> (needs > > >>> > > > > > > > discussion)", we need a new method that will allow > users > > to > > >>> > > escape > > >>> > > > > > consumer > > >>> > > > > > > > group names and other names. So you can feed this > method > > >>> your > > >>> > > > > "foo\*" > > >>> > > > > > > > consumer group name, and it will give you "foo\\\*", > > which > > >>> is > > >>> > > what > > >>> > > > > you > > >>> > > > > > > > would need to use to create an ACL for this consumer > > group > > >>> in > > >>> > > > > > AdminClient. > > >>> > > > > > > > I think that's the only change we need to admin client > > >>> > > > > > > > > > >>> > > > > > > > regards, > > >>> > > > > > > > Colin > > >>> > > > > > > > > > >>> > > > > > > > > > >>> > > > > > > > On Thu, May 17, 2018, at 08:55, Piyush Vijay wrote: > > >>> > > > > > > > > Hi Rajini/Colin, > > >>> > > > > > > > > > > >>> > > > > > > > > I will remove the wildcard principals from the scope > > for > > >>> now, > > >>> > > > > > updating > > >>> > > > > > > > KIP > > >>> > > > > > > > > right now and will open it for vote. > > >>> > > > > > > > > > > >>> > > > > > > > > Thanks > > >>> > > > > > > > > > > >>> > > > > > > > > > > >>> > > > > > > > > Piyush Vijay > > >>> > > > > > > > > > > >>> > > > > > > > > On Thu, May 17, 2018 at 6:59 AM, Rajini Sivaram < > > >>> > > > > > rajinisiva...@gmail.com > > >>> > > > > > > > > > > >>> > > > > > > > > wrote: > > >>> > > > > > > > > > > >>> > > > > > > > > > Hi Piyush, > > >>> > > > > > > > > > > > >>> > > > > > > > > > I have added a PR (https://github.com/apache/ > > >>> > kafka/pull/5030 > > >>> > > ) > > >>> > > > > with > > >>> > > > > > > > tests > > >>> > > > > > > > > > to > > >>> > > > > > > > > > show how group principals can be used for > > authorization > > >>> > with > > >>> > > > > custom > > >>> > > > > > > > > > principal builders. One of the tests uses SASL. It > is > > >>> not > > >>> > > quite > > >>> > > > > the > > >>> > > > > > > > same as > > >>> > > > > > > > > > a full-fledged user groups, but since it works with > > all > > >>> > > > security > > >>> > > > > > > > protocols, > > >>> > > > > > > > > > it could be an alternative to wildcarded > principals. > > >>> > > > > > > > > > > > >>> > > > > > > > > > Let us know if we can help in any way to get this > KIP > > >>> > updated > > >>> > > > and > > >>> > > > > > > > ready for > > >>> > > > > > > > > > voting to include in 2.0.0. > > >>> > > > > > > > > > > > >>> > > > > > > > > > Thanks, > > >>> > > > > > > > > > > > >>> > > > > > > > > > Rajini > > >>> > > > > > > > > > > > >>> > > > > > > > > > > > >>> > > > > > > > > > On Wed, May 16, 2018 at 10:21 PM, Colin McCabe < > > >>> > > > > cmcc...@apache.org > > >>> > > > > > > > > >>> > > > > > > > wrote: > > >>> > > > > > > > > > > > >>> > > > > > > > > > > > On Tue, May 15, 2018 at 7:18 PM, Rajini > Sivaram < > > >>> > > > > > > > > > rajinisiva...@gmail.com > > >>> > > > > > > > > > > > > > >>> > > > > > > > > > > > wrote: > > >>> > > > > > > > > > > > > > >>> > > > > > > > > > > > > Hi Piyush, > > >>> > > > > > > > > > > > > > > >>> > > > > > > > > > > > > It is possible to configure PrincipalBuilder > > for > > >>> > SASL ( > > >>> > > > > > > > > > > > > https://cwiki.apache.org/ > > >>> > confluence/display/KAFKA/KIP- > > >>> > > > > > > > > > > > > 189%3A+Improve+principal+build > > >>> er+interface+and+add+ > > >>> > > > > > > > > > support+for+SASL). > > >>> > > > > > > > > > > If > > >>> > > > > > > > > > > > > that satisfies your requirements, perhaps we > > can > > >>> move > > >>> > > > > > wildcarded > > >>> > > > > > > > > > > principals > > >>> > > > > > > > > > > > > out of this KIP and focus on wildcarded > > >>> resources? > > >>> > > > > > > > > > > > > >>> > > > > > > > > > > +1. > > >>> > > > > > > > > > > > > >>> > > > > > > > > > > We also need to determine which characters will > be > > >>> > reserved > > >>> > > > for > > >>> > > > > > the > > >>> > > > > > > > > > > future. I think previously we thought about @, > #, > > >>> $, %, > > >>> > ^, > > >>> > > > &, > > >>> > > > > *. > > >>> > > > > > > > > > > > > >>> > > > > > > > > > > > > On Tue, May 15, 2018 at 7:15 PM, Piyush > Vijay < > > >>> > > > > > > > > > piyushvij...@gmail.com> > > >>> > > > > > > > > > > > > wrote: > > >>> > > > > > > > > > > > > > > >>> > > > > > > > > > > > >> Hi Colin, > > >>> > > > > > > > > > > > >> > > >>> > > > > > > > > > > > >> Escaping at this level is making sense to me > > >>> but let > > >>> > > me > > >>> > > > > > think > > >>> > > > > > > > more > > >>> > > > > > > > > > > and get > > >>> > > > > > > > > > > > >> back to you. > > >>> > > > > > > > > > > > > >>> > > > > > > > > > > Thanks, Piyush. What questions do you think are > > >>> still > > >>> > open > > >>> > > > > > regarding > > >>> > > > > > > > > > > escape characters? > > >>> > > > > > > > > > > As Rajini mentioned, we have to get this in soon > in > > >>> order > > >>> > > to > > >>> > > > > make > > >>> > > > > > > > the KIP > > >>> > > > > > > > > > > freeze. > > >>> > > > > > > > > > > > > >>> > > > > > > > > > > > >> > > >>> > > > > > > > > > > > >> But should we not just get rid of one of > > >>> AclBinding > > >>> > or > > >>> > > > > > > > > > > AclBindingFilter > > >>> > > > > > > > > > > > >> then? Is there a reason to keep both given > > that > > >>> > > > > > > > AclBindingFilter and > > >>> > > > > > > > > > > > >> AclBinding look exact copy of each other > after > > >>> this > > >>> > > > > change? > > >>> > > > > > This > > >>> > > > > > > > > > will > > >>> > > > > > > > > > > be a > > >>> > > > > > > > > > > > >> one-time breaking change in APIs marked as > > >>> > "Evolving", > > >>> > > > but > > >>> > > > > > makes > > >>> > > > > > > > > > > sense in > > >>> > > > > > > > > > > > >> the long term? Am I missing something here? > > >>> > > > > > > > > > > > > >>> > > > > > > > > > > AclBinding represents an ACL. AclBindingFilter > is > > a > > >>> > filter > > >>> > > > > which > > >>> > > > > > > > can be > > >>> > > > > > > > > > > used to locate AclBinding objects. Similarly > with > > >>> > Resource > > >>> > > > and > > >>> > > > > > > > > > > ResourceFilter. There is no reason to combine > them > > >>> > because > > >>> > > > > they > > >>> > > > > > > > > > represent > > >>> > > > > > > > > > > different things. Although they contain many of > > the > > >>> same > > >>> > > > > fields, > > >>> > > > > > > > they > > >>> > > > > > > > > > are > > >>> > > > > > > > > > > not exact copies. Many fields can be null in > > >>> > > > > AclBindingFilter-- > > >>> > > > > > > > fields > > >>> > > > > > > > > > can > > >>> > > > > > > > > > > never be null in AclBinding. > > >>> > > > > > > > > > > > > >>> > > > > > > > > > > For example, you can have an AclBindingFilter > that > > >>> > matches > > >>> > > > > every > > >>> > > > > > > > > > > AclBinding. There is more discussion of this on > > the > > >>> > > original > > >>> > > > > KIP > > >>> > > > > > > > that > > >>> > > > > > > > > > > added ACL support to AdminClient. > > >>> > > > > > > > > > > > > >>> > > > > > > > > > > best, > > >>> > > > > > > > > > > Colin > > >>> > > > > > > > > > > > > >>> > > > > > > > > > > > >> > > >>> > > > > > > > > > > > >> > > >>> > > > > > > > > > > > >> > > >>> > > > > > > > > > > > >> Piyush Vijay > > >>> > > > > > > > > > > > >> > > >>> > > > > > > > > > > > >> On Tue, May 15, 2018 at 9:01 AM, Colin > McCabe > > < > > >>> > > > > > > > cmcc...@apache.org> > > >>> > > > > > > > > > > wrote: > > >>> > > > > > > > > > > > >> > > >>> > > > > > > > > > > > >> > Hi Piyush, > > >>> > > > > > > > > > > > >> > > > >>> > > > > > > > > > > > >> > I think AclBinding should operate the same > > >>> way as > > >>> > > > > > > > > > AclBindingFilter. > > >>> > > > > > > > > > > > >> > > > >>> > > > > > > > > > > > >> > So you should be able to do something like > > >>> this: > > >>> > > > > > > > > > > > >> > > AclBindingFilter filter = new > > >>> > AclBindingFiler(new > > >>> > > > > > > > > > > > >> > ResourceFilter(ResourceType.GROUP, > "foo*")) > > >>> > > > > > > > > > > > >> > > AclBinding binding = new AclBinding(new > > >>> > > > > > > > > > > Resource(ResourceType.GROUP, > > >>> > > > > > > > > > > > >> > "foo*")) > > >>> > > > > > > > > > > > >> > > assertTrue(filter.matches(binding)); > > >>> > > > > > > > > > > > >> > > > >>> > > > > > > > > > > > >> > Thinking about this more, it's starting to > > >>> feel > > >>> > > really > > >>> > > > > > messy > > >>> > > > > > > > to > > >>> > > > > > > > > > > create > > >>> > > > > > > > > > > > >> new > > >>> > > > > > > > > > > > >> > "pattern" constructors for Resource and > > >>> > > > > ResourceFilter. I > > >>> > > > > > > > don't > > >>> > > > > > > > > > > think > > >>> > > > > > > > > > > > >> > people will be able to figure this out. > > >>> Maybe we > > >>> > > > should > > >>> > > > > > just > > >>> > > > > > > > > > have a > > >>> > > > > > > > > > > > >> > limited compatibility break here, where it > > is > > >>> now > > >>> > > > > > required to > > >>> > > > > > > > > > escape > > >>> > > > > > > > > > > > >> weird > > >>> > > > > > > > > > > > >> > consumer group names when creating ACLs > for > > >>> them. > > >>> > > > > > > > > > > > >> > > > >>> > > > > > > > > > > > >> > To future-proof this, we should reserve a > > >>> bunch of > > >>> > > > > > characters > > >>> > > > > > > > at > > >>> > > > > > > > > > > once, > > >>> > > > > > > > > > > > >> > like *, @, $, %, ^, &, +, [, ], etc. If > > these > > >>> > > > > characters > > >>> > > > > > > > appear > > >>> > > > > > > > > > in > > >>> > > > > > > > > > > a > > >>> > > > > > > > > > > > >> > resource name, it should be an error, > unless > > >>> they > > >>> > > are > > >>> > > > > > escaped > > >>> > > > > > > > > > with a > > >>> > > > > > > > > > > > >> > backslash. That way, we can use them in > the > > >>> > future. > > >>> > > > We > > >>> > > > > > > > should > > >>> > > > > > > > > > > create a > > >>> > > > > > > > > > > > >> > Resource.escapeName function which adds > the > > >>> > correct > > >>> > > > > escape > > >>> > > > > > > > > > > characters to > > >>> > > > > > > > > > > > >> > resource names (so it would translate foo* > > >>> into > > >>> > > foo\*, > > >>> > > > > > foo+bar > > >>> > > > > > > > > > into > > >>> > > > > > > > > > > > >> > foo\+bar, etc. etc. > > >>> > > > > > > > > > > > >> > > > >>> > > > > > > > > > > > >> > best, > > >>> > > > > > > > > > > > >> > Colin > > >>> > > > > > > > > > > > >> > > > >>> > > > > > > > > > > > >> > > > >>> > > > > > > > > > > > >> > On Mon, May 14, 2018, at 17:08, Piyush > Vijay > > >>> > wrote: > > >>> > > > > > > > > > > > >> > > Colin, > > >>> > > > > > > > > > > > >> > > > > >>> > > > > > > > > > > > >> > > createAcls take a AclBinding, however, > > >>> instead > > >>> > of > > >>> > > > > > > > > > > AclBindingFilter. > > >>> > > > > > > > > > > > >> What > > >>> > > > > > > > > > > > >> > > are your thoughts here? > > >>> > > > > > > > > > > > >> > > > > >>> > > > > > > > > > > > >> > > public abstract DescribeAclsResult > > >>> > > > > > > > describeAcls(AclBindingFilter > > >>> > > > > > > > > > > > >> > > filter, DescribeAclsOptions options); > > >>> > > > > > > > > > > > >> > > > > >>> > > > > > > > > > > > >> > > public abstract CreateAclsResult > > >>> > > > > createAcls(Collection< > > >>> > > > > > > > > > > AclBinding> > > >>> > > > > > > > > > > > >> > > acls, CreateAclsOptions options); > > >>> > > > > > > > > > > > >> > > > > >>> > > > > > > > > > > > >> > > public abstract DeleteAclsResult > > >>> > > > > > > > > > > > >> > > deleteAcls(Collection<AclBindingFilter> > > >>> > filters, > > >>> > > > > > > > > > > DeleteAclsOptions > > >>> > > > > > > > > > > > >> > > options); > > >>> > > > > > > > > > > > >> > > > > >>> > > > > > > > > > > > >> > > > > >>> > > > > > > > > > > > >> > > Thanks > > >>> > > > > > > > > > > > >> > > > > >>> > > > > > > > > > > > >> > > Piyush Vijay > > >>> > > > > > > > > > > > >> > > > > >>> > > > > > > > > > > > >> > > On Mon, May 14, 2018 at 9:26 AM, Andy > > >>> Coates < > > >>> > > > > > > > a...@confluent.io > > >>> > > > > > > > > > > > > >>> > > > > > > > > > > > >> wrote: > > >>> > > > > > > > > > > > >> > > > > >>> > > > > > > > > > > > >> > > > +1 > > >>> > > > > > > > > > > > >> > > > > > >>> > > > > > > > > > > > >> > > > On 11 May 2018 at 17:14, Colin McCabe > < > > >>> > > > > > cmcc...@apache.org > > >>> > > > > > > > > > > >>> > > > > > > > > > > wrote: > > >>> > > > > > > > > > > > >> > > > > > >>> > > > > > > > > > > > >> > > > > Hi Andy, > > >>> > > > > > > > > > > > >> > > > > > > >>> > > > > > > > > > > > >> > > > > I see what you mean. I guess my > > thought > > >>> > here > > >>> > > is > > >>> > > > > > that > > >>> > > > > > > > if the > > >>> > > > > > > > > > > > >> fields > > >>> > > > > > > > > > > > >> > are > > >>> > > > > > > > > > > > >> > > > > private, we can change it later if > we > > >>> need > > >>> > to. > > >>> > > > > > > > > > > > >> > > > > > > >>> > > > > > > > > > > > >> > > > > I definitely agree that we should > use > > >>> the > > >>> > > scheme > > >>> > > > > you > > >>> > > > > > > > > > describe > > >>> > > > > > > > > > > for > > >>> > > > > > > > > > > > >> > sending > > >>> > > > > > > > > > > > >> > > > > ACLs over the wire (just the string > + > > >>> > version > > >>> > > > > > number) > > >>> > > > > > > > > > > > >> > > > > > > >>> > > > > > > > > > > > >> > > > > cheers, > > >>> > > > > > > > > > > > >> > > > > Colin > > >>> > > > > > > > > > > > >> > > > > > > >>> > > > > > > > > > > > >> > > > > > > >>> > > > > > > > > > > > >> > > > > On Fri, May 11, 2018, at 09:39, Andy > > >>> Coates > > >>> > > > wrote: > > >>> > > > > > > > > > > > >> > > > > > i think I'm agreeing with you. I > was > > >>> > merely > > >>> > > > > > suggesting > > >>> > > > > > > > > > that > > >>> > > > > > > > > > > > >> having > > >>> > > > > > > > > > > > >> > an > > >>> > > > > > > > > > > > >> > > > > > additional field that controls how > > the > > >>> > > current > > >>> > > > > > field > > >>> > > > > > > > is > > >>> > > > > > > > > > > > >> > interpreted is > > >>> > > > > > > > > > > > >> > > > > more > > >>> > > > > > > > > > > > >> > > > > > flexible / extensible in the > future > > >>> than > > >>> > > > using a > > >>> > > > > > > > 'union' > > >>> > > > > > > > > > > style > > >>> > > > > > > > > > > > >> > > > approach, > > >>> > > > > > > > > > > > >> > > > > > where only one of several possible > > >>> fields > > >>> > > > should > > >>> > > > > > be > > >>> > > > > > > > > > > populated. > > >>> > > > > > > > > > > > >> But > > >>> > > > > > > > > > > > >> > > > it's a > > >>> > > > > > > > > > > > >> > > > > > minor thing. > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > > > > > > > > > > >> > > > > > On 10 May 2018 at 09:29, Colin > > McCabe > > >>> < > > >>> > > > > > > > cmcc...@apache.org > > >>> > > > > > > > > > > > > >>> > > > > > > > > > > > >> wrote: > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > > > > > > > > > > >> > > > > > > Hi Andy, > > >>> > > > > > > > > > > > >> > > > > > > > > >>> > > > > > > > > > > > >> > > > > > > The issue that I was trying to > > solve > > >>> > here > > >>> > > is > > >>> > > > > the > > >>> > > > > > > > Java > > >>> > > > > > > > > > API. > > >>> > > > > > > > > > > > >> Right > > >>> > > > > > > > > > > > >> > > > now, > > >>> > > > > > > > > > > > >> > > > > > > someone can write "new > > >>> > > > > > ResourceFilter(ResourceType. > > >>> > > > > > > > > > > > >> > TRANSACTIONAL_ID, > > >>> > > > > > > > > > > > >> > > > > > > "foo*") and have a > ResourceFilter > > >>> that > > >>> > > > applies > > >>> > > > > > to a > > >>> > > > > > > > > > > > >> > Transactional ID > > >>> > > > > > > > > > > > >> > > > > named > > >>> > > > > > > > > > > > >> > > > > > > "foo*". This has to continue to > > >>> work, > > >>> > or > > >>> > > > else > > >>> > > > > > we > > >>> > > > > > > > have > > >>> > > > > > > > > > > broken > > >>> > > > > > > > > > > > >> > > > > compatibility. > > >>> > > > > > > > > > > > >> > > > > > > > > >>> > > > > > > > > > > > >> > > > > > > I was proposing that there would > > be > > >>> > > > something > > >>> > > > > > like > > >>> > > > > > > > a new > > >>> > > > > > > > > > > > >> function > > >>> > > > > > > > > > > > >> > > > like > > >>> > > > > > > > > > > > >> > > > > > > ResourceFilter.fromPattern( > > >>> > > > > > > > > > ResourceType.TRANSACTIONAL_ID, > > >>> > > > > > > > > > > > >> > "foo*") > > >>> > > > > > > > > > > > >> > > > > which > > >>> > > > > > > > > > > > >> > > > > > > would create a ResourceFilter > that > > >>> > applied > > >>> > > > to > > >>> > > > > > > > > > > transactional > > >>> > > > > > > > > > > > >> IDs > > >>> > > > > > > > > > > > >> > > > > starting > > >>> > > > > > > > > > > > >> > > > > > > with "foo", rather than > > >>> transactional > > >>> > IDs > > >>> > > > > named > > >>> > > > > > > > "foo*" > > >>> > > > > > > > > > > > >> > specifically. > > >>> > > > > > > > > > > > >> > > > > > > > > >>> > > > > > > > > > > > >> > > > > > > I don't think it's important > > >>> whether the > > >>> > > > Java > > >>> > > > > > class > > >>> > > > > > > > has > > >>> > > > > > > > > > an > > >>> > > > > > > > > > > > >> > integer, > > >>> > > > > > > > > > > > >> > > > an > > >>> > > > > > > > > > > > >> > > > > > > enum, or two string fields. The > > >>> > important > > >>> > > > > > thing is > > >>> > > > > > > > that > > >>> > > > > > > > > > > > >> there's > > >>> > > > > > > > > > > > >> > a > > >>> > > > > > > > > > > > >> > > > new > > >>> > > > > > > > > > > > >> > > > > > > static function, or new > > constructor > > >>> > > > overload, > > >>> > > > > > etc. > > >>> > > > > > > > that > > >>> > > > > > > > > > > works > > >>> > > > > > > > > > > > >> for > > >>> > > > > > > > > > > > >> > > > > patterns > > >>> > > > > > > > > > > > >> > > > > > > rather than literal strings. > > >>> > > > > > > > > > > > >> > > > > > > > > >>> > > > > > > > > > > > >> > > > > > > On Thu, May 10, 2018, at 03:30, > > Andy > > >>> > > Coates > > >>> > > > > > wrote: > > >>> > > > > > > > > > > > >> > > > > > > > Rather than having name and > > >>> pattern > > >>> > > fields > > >>> > > > > on > > >>> > > > > > the > > >>> > > > > > > > > > > > >> > ResourceFilter, > > >>> > > > > > > > > > > > >> > > > > where > > >>> > > > > > > > > > > > >> > > > > > > > it’s only valid for one to be > > >>> set, and > > >>> > > we > > >>> > > > > > want to > > >>> > > > > > > > > > > restrict > > >>> > > > > > > > > > > > >> the > > >>> > > > > > > > > > > > >> > > > > character > > >>> > > > > > > > > > > > >> > > > > > > > set in case future > enhancements > > >>> need > > >>> > > them, > > >>> > > > > we > > >>> > > > > > > > could > > >>> > > > > > > > > > > instead > > >>> > > > > > > > > > > > >> > add a > > >>> > > > > > > > > > > > >> > > > new > > >>> > > > > > > > > > > > >> > > > > > > > integer ‘nameType’ field, and > > use > > >>> > > > constants > > >>> > > > > to > > >>> > > > > > > > > > indicate > > >>> > > > > > > > > > > how > > >>> > > > > > > > > > > > >> the > > >>> > > > > > > > > > > > >> > > > name > > >>> > > > > > > > > > > > >> > > > > > > > field should be interpreted, > > e.g. > > >>> 0 = > > >>> > > > > > literal, 1 = > > >>> > > > > > > > > > > wildcard. > > >>> > > > > > > > > > > > >> > This > > >>> > > > > > > > > > > > >> > > > > would > > >>> > > > > > > > > > > > >> > > > > > > > be extendable, e.g we can > later > > >>> add 2 > > >>> > = > > >>> > > > > > regex, or > > >>> > > > > > > > what > > >>> > > > > > > > > > > ever, > > >>> > > > > > > > > > > > >> > and > > >>> > > > > > > > > > > > >> > > > > > > > wouldn’t require any escaping. > > >>> > > > > > > > > > > > >> > > > > > > > > >>> > > > > > > > > > > > >> > > > > > > This is very user-unfriendly, > > >>> though. > > >>> > > Users > > >>> > > > > > don't > > >>> > > > > > > > want > > >>> > > > > > > > > > to > > >>> > > > > > > > > > > > >> have > > >>> > > > > > > > > > > > >> > to > > >>> > > > > > > > > > > > >> > > > > > > explicitly supply a version > number > > >>> when > > >>> > > > using > > >>> > > > > > the > > >>> > > > > > > > API, > > >>> > > > > > > > > > > which > > >>> > > > > > > > > > > > >> is > > >>> > > > > > > > > > > > >> > what > > >>> > > > > > > > > > > > >> > > > > this > > >>> > > > > > > > > > > > >> > > > > > > would force them to do. I don't > > >>> think > > >>> > > users > > >>> > > > > are > > >>> > > > > > > > going > > >>> > > > > > > > > > to > > >>> > > > > > > > > > > > >> want to > > >>> > > > > > > > > > > > >> > > > > memorize > > >>> > > > > > > > > > > > >> > > > > > > that version 4 supprted "+", > > whereas > > >>> > > > version 3 > > >>> > > > > > only > > >>> > > > > > > > > > > supported > > >>> > > > > > > > > > > > >> > > > "[0-9]", > > >>> > > > > > > > > > > > >> > > > > or > > >>> > > > > > > > > > > > >> > > > > > > whatever. > > >>> > > > > > > > > > > > >> > > > > > > > > >>> > > > > > > > > > > > >> > > > > > > Just as an example, do you > > remember > > >>> > which > > >>> > > > > > versions > > >>> > > > > > > > of > > >>> > > > > > > > > > > > >> > FetchRequest > > >>> > > > > > > > > > > > >> > > > > added > > >>> > > > > > > > > > > > >> > > > > > > which features? I don't. I > > always > > >>> have > > >>> > > to > > >>> > > > > > look at > > >>> > > > > > > > the > > >>> > > > > > > > > > > code > > >>> > > > > > > > > > > > >> to > > >>> > > > > > > > > > > > >> > > > > remember. > > >>> > > > > > > > > > > > >> > > > > > > > > >>> > > > > > > > > > > > >> > > > > > > Also, escaping is still required > > any > > >>> > time > > >>> > > > you > > >>> > > > > > > > overload a > > >>> > > > > > > > > > > > >> > character to > > >>> > > > > > > > > > > > >> > > > > mean > > >>> > > > > > > > > > > > >> > > > > > > two things. Escaping is > required > > >>> in the > > >>> > > > > current > > >>> > > > > > > > > > proposal > > >>> > > > > > > > > > > to > > >>> > > > > > > > > > > > >> be > > >>> > > > > > > > > > > > >> > able > > >>> > > > > > > > > > > > >> > > > to > > >>> > > > > > > > > > > > >> > > > > > > create a pattern that matches > only > > >>> > "foo*". > > >>> > > > > You > > >>> > > > > > > > have to > > >>> > > > > > > > > > > type > > >>> > > > > > > > > > > > >> > "foo\*" > > >>> > > > > > > > > > > > >> > > > > It > > >>> > > > > > > > > > > > >> > > > > > > would be required if we forced > > >>> users to > > >>> > > > > specify > > >>> > > > > > a > > >>> > > > > > > > > > > version, as > > >>> > > > > > > > > > > > >> > well. > > >>> > > > > > > > > > > > >> > > > > > > > > >>> > > > > > > > > > > > >> > > > > > > best, > > >>> > > > > > > > > > > > >> > > > > > > Colin > > >>> > > > > > > > > > > > >> > > > > > > > > >>> > > > > > > > > > > > >> > > > > > > > > > >>> > > > > > > > > > > > >> > > > > > > > Sent from my iPhone > > >>> > > > > > > > > > > > >> > > > > > > > > > >>> > > > > > > > > > > > >> > > > > > > > > On 7 May 2018, at 05:16, > > Piyush > > >>> > Vijay > > >>> > > < > > >>> > > > > > > > > > > > >> > piyushvij...@gmail.com> > > >>> > > > > > > > > > > > >> > > > > wrote: > > >>> > > > > > > > > > > > >> > > > > > > > > > > >>> > > > > > > > > > > > >> > > > > > > > > Makes sense. I'll update the > > >>> KIP. > > >>> > > > > > > > > > > > >> > > > > > > > > > > >>> > > > > > > > > > > > >> > > > > > > > > Does anyone have any other > > >>> comments? > > >>> > > :) > > >>> > > > > > > > > > > > >> > > > > > > > > > > >>> > > > > > > > > > > > >> > > > > > > > > Thanks > > >>> > > > > > > > > > > > >> > > > > > > > > > > >>> > > > > > > > > > > > >> > > > > > > > > > > >>> > > > > > > > > > > > >> > > > > > > > > Piyush Vijay > > >>> > > > > > > > > > > > >> > > > > > > > > > > >>> > > > > > > > > > > > >> > > > > > > > >> On Thu, May 3, 2018 at > 11:55 > > >>> AM, > > >>> > > Colin > > >>> > > > > > McCabe < > > >>> > > > > > > > > > > > >> > > > cmcc...@apache.org > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > > > > > > > > > > >> > > > > > > wrote: > > >>> > > > > > > > > > > > >> > > > > > > > >> > > >>> > > > > > > > > > > > >> > > > > > > > >> Yeah, I guess that's a good > > >>> point. > > >>> > > It > > >>> > > > > > probably > > >>> > > > > > > > > > makes > > >>> > > > > > > > > > > > >> sense > > >>> > > > > > > > > > > > >> > to > > >>> > > > > > > > > > > > >> > > > > > > support the > > >>> > > > > > > > > > > > >> > > > > > > > >> prefix scheme for consumer > > >>> groups > > >>> > and > > >>> > > > > > > > transactional > > >>> > > > > > > > > > > IDs > > >>> > > > > > > > > > > > >> as > > >>> > > > > > > > > > > > >> > well > > >>> > > > > > > > > > > > >> > > > as > > >>> > > > > > > > > > > > >> > > > > > > topics. > > >>> > > > > > > > > > > > >> > > > > > > > >> > > >>> > > > > > > > > > > > >> > > > > > > > >> I agree that the current > > >>> situation > > >>> > > > where > > >>> > > > > > > > anything > > >>> > > > > > > > > > > goes in > > >>> > > > > > > > > > > > >> > > > consumer > > >>> > > > > > > > > > > > >> > > > > > > group > > >>> > > > > > > > > > > > >> > > > > > > > >> names and transactional ID > > >>> names is > > >>> > > not > > >>> > > > > > > > ideal. I > > >>> > > > > > > > > > > wish we > > >>> > > > > > > > > > > > >> > could > > >>> > > > > > > > > > > > >> > > > > > > rewind the > > >>> > > > > > > > > > > > >> > > > > > > > >> clock and impose > restrictions > > >>> on > > >>> > the > > >>> > > > > names. > > >>> > > > > > > > > > > However, it > > >>> > > > > > > > > > > > >> > doesn't > > >>> > > > > > > > > > > > >> > > > > seem > > >>> > > > > > > > > > > > >> > > > > > > > >> practical at the moment. > > >>> Adding > > >>> > new > > >>> > > > > > > > restrictions > > >>> > > > > > > > > > > would > > >>> > > > > > > > > > > > >> > break a > > >>> > > > > > > > > > > > >> > > > > lot of > > >>> > > > > > > > > > > > >> > > > > > > > >> existing users after an > > >>> upgrade. > > >>> > It > > >>> > > > > would > > >>> > > > > > be a > > >>> > > > > > > > > > > really > > >>> > > > > > > > > > > > >> bad > > >>> > > > > > > > > > > > >> > > > upgrade > > >>> > > > > > > > > > > > >> > > > > > > > >> experience. > > >>> > > > > > > > > > > > >> > > > > > > > >> > > >>> > > > > > > > > > > > >> > > > > > > > >> However, I think we can > > support > > >>> > this > > >>> > > > in a > > >>> > > > > > > > > > compatible > > >>> > > > > > > > > > > way. > > >>> > > > > > > > > > > > >> > From > > >>> > > > > > > > > > > > >> > > > > the > > >>> > > > > > > > > > > > >> > > > > > > > >> perspective of AdminClient, > > we > > >>> just > > >>> > > > have > > >>> > > > > to > > >>> > > > > > > > add a > > >>> > > > > > > > > > new > > >>> > > > > > > > > > > > >> field > > >>> > > > > > > > > > > > >> > to > > >>> > > > > > > > > > > > >> > > > > > > > >> ResourceFilter. Currently, > > it > > >>> has > > >>> > > two > > >>> > > > > > fields, > > >>> > > > > > > > > > > > >> resourceType > > >>> > > > > > > > > > > > >> > and > > >>> > > > > > > > > > > > >> > > > > name: > > >>> > > > > > > > > > > > >> > > > > > > > >> > > >>> > > > > > > > > > > > >> > > > > > > > >>> /** > > >>> > > > > > > > > > > > >> > > > > > > > >>> * A filter which matches > > >>> Resource > > >>> > > > > objects. > > >>> > > > > > > > > > > > >> > > > > > > > >>> * > > >>> > > > > > > > > > > > >> > > > > > > > >>> * The API for this class > is > > >>> still > > >>> > > > > evolving > > >>> > > > > > > > and we > > >>> > > > > > > > > > > may > > >>> > > > > > > > > > > > >> break > > >>> > > > > > > > > > > > >> > > > > > > > >> compatibility in minor > > >>> releases, if > > >>> > > > > > necessary. > > >>> > > > > > > > > > > > >> > > > > > > > >>> */ > > >>> > > > > > > > > > > > >> > > > > > > > >>> > @InterfaceStability.Evolving > > >>> > > > > > > > > > > > >> > > > > > > > >>> public class > ResourceFilter > > { > > >>> > > > > > > > > > > > >> > > > > > > > >>> private final > > ResourceType > > >>> > > > > > resourceType; > > >>> > > > > > > > > > > > >> > > > > > > > >>> private final String > > name; > > >>> > > > > > > > > > > > >> > > > > > > > >> > > >>> > > > > > > > > > > > >> > > > > > > > >> We can add a third field, > > >>> pattern. > > >>> > > > > > > > > > > > >> > > > > > > > >> > > >>> > > > > > > > > > > > >> > > > > > > > >> So the API will basically > be, > > >>> if I > > >>> > > > > create a > > >>> > > > > > > > > > > > >> > > > > > > ResourceFilter(resourceType= > > GROUP, > > >>> > > > > > > > > > > > >> > > > > > > > >> name=foo*, pattern=null), > it > > >>> > applies > > >>> > > > only > > >>> > > > > > to > > >>> > > > > > > > the > > >>> > > > > > > > > > > consumer > > >>> > > > > > > > > > > > >> > group > > >>> > > > > > > > > > > > >> > > > > named > > >>> > > > > > > > > > > > >> > > > > > > > >> "foo*". If I create a > > >>> > > > > > > > > > ResourceFilter(resourceType=GR > > >>> > > > > > > > > > > > >> OUP, > > >>> > > > > > > > > > > > >> > > > > name=null, > > >>> > > > > > > > > > > > >> > > > > > > > >> pattern=foo*), it applies > to > > >>> any > > >>> > > > consumer > > >>> > > > > > group > > >>> > > > > > > > > > > starting > > >>> > > > > > > > > > > > >> in > > >>> > > > > > > > > > > > >> > > > "foo". > > >>> > > > > > > > > > > > >> > > > > > > name > > >>> > > > > > > > > > > > >> > > > > > > > >> and pattern cannot be both > > set > > >>> at > > >>> > the > > >>> > > > > same > > >>> > > > > > > > time. > > >>> > > > > > > > > > > This > > >>> > > > > > > > > > > > >> > preserves > > >>> > > > > > > > > > > > >> > > > > > > > >> compatibility at the > > >>> AdminClient > > >>> > > level. > > >>> > > > > > > > > > > > >> > > > > > > > >> > > >>> > > > > > > > > > > > >> > > > > > > > >> It's possible that we will > > >>> want to > > >>> > > add > > >>> > > > > more > > >>> > > > > > > > types > > >>> > > > > > > > > > of > > >>> > > > > > > > > > > > >> > pattern in > > >>> > > > > > > > > > > > >> > > > > the > > >>> > > > > > > > > > > > >> > > > > > > > >> future. So we should > reserve > > >>> > > "special > > >>> > > > > > > > characters" > > >>> > > > > > > > > > > such > > >>> > > > > > > > > > > > >> as > > >>> > > > > > > > > > > > >> > +, /, > > >>> > > > > > > > > > > > >> > > > > &, > > >>> > > > > > > > > > > > >> > > > > > > %, #, > > >>> > > > > > > > > > > > >> > > > > > > > >> $, etc. These characters > > >>> should be > > >>> > > > > > treated as > > >>> > > > > > > > > > > special > > >>> > > > > > > > > > > > >> > unless > > >>> > > > > > > > > > > > >> > > > > they are > > >>> > > > > > > > > > > > >> > > > > > > > >> prefixed with a backslash > to > > >>> escape > > >>> > > > them. > > >>> > > > > > This > > >>> > > > > > > > > > will > > >>> > > > > > > > > > > > >> allow > > >>> > > > > > > > > > > > >> > us to > > >>> > > > > > > > > > > > >> > > > > add > > >>> > > > > > > > > > > > >> > > > > > > > >> support for using these > > >>> characters > > >>> > in > > >>> > > > the > > >>> > > > > > > > future > > >>> > > > > > > > > > > without > > >>> > > > > > > > > > > > >> > > > breaking > > >>> > > > > > > > > > > > >> > > > > > > > >> compatibility. > > >>> > > > > > > > > > > > >> > > > > > > > >> > > >>> > > > > > > > > > > > >> > > > > > > > >> At the protocol level, we > > need > > >>> a > > >>> > new > > >>> > > > API > > >>> > > > > > > > version > > >>> > > > > > > > > > for > > >>> > > > > > > > > > > > >> > > > > > > CreateAclsRequest / > > >>> > > > > > > > > > > > >> > > > > > > > >> DeleteAclsRequest. The new > > API > > >>> > > version > > >>> > > > > > will > > >>> > > > > > > > send > > >>> > > > > > > > > > all > > >>> > > > > > > > > > > > >> > special > > >>> > > > > > > > > > > > >> > > > > > > characters > > >>> > > > > > > > > > > > >> > > > > > > > >> over the wire escaped > rather > > >>> than > > >>> > > > > directly. > > >>> > > > > > > > (So > > >>> > > > > > > > > > > there > > >>> > > > > > > > > > > > >> is no > > >>> > > > > > > > > > > > >> > > > need > > >>> > > > > > > > > > > > >> > > > > for > > >>> > > > > > > > > > > > >> > > > > > > the > > >>> > > > > > > > > > > > >> > > > > > > > >> equivalent of both "name" > and > > >>> > > > "pattern"-- > > >>> > > > > > we > > >>> > > > > > > > > > > translate > > >>> > > > > > > > > > > > >> name > > >>> > > > > > > > > > > > >> > > > into a > > >>> > > > > > > > > > > > >> > > > > > > validly > > >>> > > > > > > > > > > > >> > > > > > > > >> escaped pattern that > matches > > >>> only > > >>> > one > > >>> > > > > > thing, by > > >>> > > > > > > > > > > adding > > >>> > > > > > > > > > > > >> > escape > > >>> > > > > > > > > > > > >> > > > > > > characters as > > >>> > > > > > > > > > > > >> > > > > > > > >> appropriate.) The broker > > will > > >>> > > validate > > >>> > > > > the > > >>> > > > > > > > new API > > >>> > > > > > > > > > > > >> version > > >>> > > > > > > > > > > > >> > and > > >>> > > > > > > > > > > > >> > > > > reject > > >>> > > > > > > > > > > > >> > > > > > > > >> malformed of unsupported > > >>> patterns. > > >>> > > > > > > > > > > > >> > > > > > > > >> > > >>> > > > > > > > > > > > >> > > > > > > > >> At the ZK level, we can > > >>> introduce a > > >>> > > > > > protocol > > >>> > > > > > > > > > version > > >>> > > > > > > > > > > to > > >>> > > > > > > > > > > > >> the > > >>> > > > > > > > > > > > >> > data > > >>> > > > > > > > > > > > >> > > > > in > > >>> > > > > > > > > > > > >> > > > > > > ZK-- > > >>> > > > > > > > > > > > >> > > > > > > > >> or store it under a > different > > >>> root. > > >>> > > > > > > > > > > > >> > > > > > > > >> > > >>> > > > > > > > > > > > >> > > > > > > > >> best, > > >>> > > > > > > > > > > > >> > > > > > > > >> Colin > > >>> > > > > > > > > > > > >> > > > > > > > >> > > >>> > > > > > > > > > > > >> > > > > > > > >> > > >>> > > > > > > > > > > > >> > > > > > > > >>> On Wed, May 2, 2018, at > > 18:09, > > >>> > > Piyush > > >>> > > > > > Vijay > > >>> > > > > > > > wrote: > > >>> > > > > > > > > > > > >> > > > > > > > >>> Thank you everyone for the > > >>> > interest > > >>> > > > and, > > >>> > > > > > > > prompt > > >>> > > > > > > > > > and > > >>> > > > > > > > > > > > >> > valuable > > >>> > > > > > > > > > > > >> > > > > > > feedback. I > > >>> > > > > > > > > > > > >> > > > > > > > >>> really appreciate the > quick > > >>> > > > turnaround. > > >>> > > > > > I’ve > > >>> > > > > > > > tried > > >>> > > > > > > > > > > to > > >>> > > > > > > > > > > > >> > organize > > >>> > > > > > > > > > > > >> > > > > the > > >>> > > > > > > > > > > > >> > > > > > > > >> comments > > >>> > > > > > > > > > > > >> > > > > > > > >>> into common headings. See > my > > >>> > replies > > >>> > > > > > below: > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> *Case of ‘*’ might already > > be > > >>> > > present > > >>> > > > in > > >>> > > > > > > > consumer > > >>> > > > > > > > > > > groups > > >>> > > > > > > > > > > > >> > and > > >>> > > > > > > > > > > > >> > > > > > > > >> transactional > > >>> > > > > > > > > > > > >> > > > > > > > >>> ids* > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> - We definitely need > > >>> wildcard > > >>> > ACLs > > >>> > > > > > support > > >>> > > > > > > > for > > >>> > > > > > > > > > > > >> resources > > >>> > > > > > > > > > > > >> > like > > >>> > > > > > > > > > > > >> > > > > > > consumer > > >>> > > > > > > > > > > > >> > > > > > > > >>> groups and transactional > > >>> ids for > > >>> > > the > > >>> > > > > > reason > > >>> > > > > > > > Andy > > >>> > > > > > > > > > > > >> > mentioned. A > > >>> > > > > > > > > > > > >> > > > > big > > >>> > > > > > > > > > > > >> > > > > > > win > > >>> > > > > > > > > > > > >> > > > > > > > >> of > > >>> > > > > > > > > > > > >> > > > > > > > >>> this feature is that > > service > > >>> > > > providers > > >>> > > > > > don’t > > >>> > > > > > > > > > have > > >>> > > > > > > > > > > to > > >>> > > > > > > > > > > > >> > track > > >>> > > > > > > > > > > > >> > > > and > > >>> > > > > > > > > > > > >> > > > > keep > > >>> > > > > > > > > > > > >> > > > > > > > >>> up-to-date all the > > consumer > > >>> > groups > > >>> > > > > their > > >>> > > > > > > > > > > customers are > > >>> > > > > > > > > > > > >> > using. > > >>> > > > > > > > > > > > >> > > > > > > > >>> - I agree with Andy’s > > >>> thoughts > > >>> > on > > >>> > > > the > > >>> > > > > > two > > >>> > > > > > > > > > possible > > >>> > > > > > > > > > > > >> ways. > > >>> > > > > > > > > > > > >> > > > > > > > >>> - My vote would be to do > > the > > >>> > > > breaking > > >>> > > > > > change > > >>> > > > > > > > > > > because > > >>> > > > > > > > > > > > >> we > > >>> > > > > > > > > > > > >> > > > should > > >>> > > > > > > > > > > > >> > > > > > > > >> restrict > > >>> > > > > > > > > > > > >> > > > > > > > >>> the format of consumer > > >>> groups > > >>> > and > > >>> > > > > > > > transactional > > >>> > > > > > > > > > > ids > > >>> > > > > > > > > > > > >> > sooner > > >>> > > > > > > > > > > > >> > > > than > > >>> > > > > > > > > > > > >> > > > > > > later. > > >>> > > > > > > > > > > > >> > > > > > > > >>> - Consumer groups and > > >>> > > > transactional > > >>> > > > > > ids > > >>> > > > > > > > are > > >>> > > > > > > > > > > basic > > >>> > > > > > > > > > > > >> > Kafka > > >>> > > > > > > > > > > > >> > > > > > > concepts. > > >>> > > > > > > > > > > > >> > > > > > > > >>> There is a lot of > value > > >>> in > > >>> > > > having a > > >>> > > > > > > > defined > > >>> > > > > > > > > > > naming > > >>> > > > > > > > > > > > >> > > > > convention on > > >>> > > > > > > > > > > > >> > > > > > > > >> these > > >>> > > > > > > > > > > > >> > > > > > > > >>> concepts. > > >>> > > > > > > > > > > > >> > > > > > > > >>> - This will help us > not > > >>> run > > >>> > > into > > >>> > > > > more > > >>> > > > > > > > issues > > >>> > > > > > > > > > > down > > >>> > > > > > > > > > > > >> the > > >>> > > > > > > > > > > > >> > > > line. > > >>> > > > > > > > > > > > >> > > > > > > > >>> - I’m not sure if > > people > > >>> > > actually > > >>> > > > > use > > >>> > > > > > > > ‘*’ in > > >>> > > > > > > > > > > their > > >>> > > > > > > > > > > > >> > > > consumer > > >>> > > > > > > > > > > > >> > > > > > > group > > >>> > > > > > > > > > > > >> > > > > > > > >>> names anyway. > > >>> > > > > > > > > > > > >> > > > > > > > >>> - Escaping ‘*’ isn’t > > >>> trivial > > >>> > > > > because > > >>> > > > > > ‘\’ > > >>> > > > > > > > is > > >>> > > > > > > > > > an > > >>> > > > > > > > > > > > >> allowed > > >>> > > > > > > > > > > > >> > > > > character > > >>> > > > > > > > > > > > >> > > > > > > > >> too. > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> *Why introduce two new > > APIs?* > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> - It’s possible to make > > this > > >>> > > change > > >>> > > > > > without > > >>> > > > > > > > > > > > >> introducing > > >>> > > > > > > > > > > > >> > new > > >>> > > > > > > > > > > > >> > > > > APIs > > >>> > > > > > > > > > > > >> > > > > > > but > > >>> > > > > > > > > > > > >> > > > > > > > >> new > > >>> > > > > > > > > > > > >> > > > > > > > >>> APIs are required for > > >>> > inspection. > > >>> > > > > > > > > > > > >> > > > > > > > >>> - For example: If I want > > to > > >>> > fetch > > >>> > > > all > > >>> > > > > > ACLs > > >>> > > > > > > > that > > >>> > > > > > > > > > > match > > >>> > > > > > > > > > > > >> > > > > ’topicA*’, > > >>> > > > > > > > > > > > >> > > > > > > it’s > > >>> > > > > > > > > > > > >> > > > > > > > >>> not possible without > > >>> introducing > > >>> > > new > > >>> > > > > > APIs > > >>> > > > > > > > AND > > >>> > > > > > > > > > > > >> maintaining > > >>> > > > > > > > > > > > >> > > > > backwards > > >>> > > > > > > > > > > > >> > > > > > > > >>> compatibility. > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> *Matching multiple hosts* > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> - Rajini is right that > > >>> wildcard > > >>> > > ACLs > > >>> > > > > > aren’t > > >>> > > > > > > > the > > >>> > > > > > > > > > > > >> correct > > >>> > > > > > > > > > > > >> > fit > > >>> > > > > > > > > > > > >> > > > for > > >>> > > > > > > > > > > > >> > > > > > > > >>> specifying range of > hosts. > > >>> > > > > > > > > > > > >> > > > > > > > >>> - We will rely on > KIP-252 > > >>> for > > >>> > the > > >>> > > > > proper > > >>> > > > > > > > > > > > >> functionality ( > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> https://cwiki.apache.org/ > > >>> > > > > > > > > > > confluence/display/KAFKA/KIP- > > >>> > > > > > > > > > > > >> > > > > > > > >> 252+-+Extend+ACLs+to+allow+ > > >>> > > > > > > > > > > filtering+based+on+ip+ranges+ > > >>> > > > > > > > > > > > >> > > > > and+subnets > > >>> > > > > > > > > > > > >> > > > > > > > >>> ) > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> *Implementation of > matching > > >>> > > algorithm > > >>> > > > > and > > >>> > > > > > > > > > > performance > > >>> > > > > > > > > > > > >> > concerns* > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> - Updated the KIP with > an > > >>> > > > > > implementation. > > >>> > > > > > > > > > > > >> > > > > > > > >>> - Andy, you’re right. > The > > >>> length > > >>> > > > > doesn’t > > >>> > > > > > > > play a > > >>> > > > > > > > > > > part. > > >>> > > > > > > > > > > > >> The > > >>> > > > > > > > > > > > >> > > > > request > > >>> > > > > > > > > > > > >> > > > > > > will > > >>> > > > > > > > > > > > >> > > > > > > > >>> be authorized *iff* > there > > >>> is at > > >>> > > > least > > >>> > > > > > one > > >>> > > > > > > > > > matching > > >>> > > > > > > > > > > > >> ALLOW > > >>> > > > > > > > > > > > >> > and > > >>> > > > > > > > > > > > >> > > > no > > >>> > > > > > > > > > > > >> > > > > > > > >> matching > > >>> > > > > > > > > > > > >> > > > > > > > >>> DENY irrespective of the > > >>> prefix > > >>> > > > > length. > > >>> > > > > > > > Included > > >>> > > > > > > > > > > this > > >>> > > > > > > > > > > > >> > detail > > >>> > > > > > > > > > > > >> > > > > in the > > >>> > > > > > > > > > > > >> > > > > > > > >> KIP. > > >>> > > > > > > > > > > > >> > > > > > > > >>> - Since everything is > > >>> stored in > > >>> > > > > memory, > > >>> > > > > > the > > >>> > > > > > > > > > > > >> performance > > >>> > > > > > > > > > > > >> > hit > > >>> > > > > > > > > > > > >> > > > > isn’t > > >>> > > > > > > > > > > > >> > > > > > > > >> really > > >>> > > > > > > > > > > > >> > > > > > > > >>> significantly worse than > > the > > >>> > > current > > >>> > > > > > > > behavior. > > >>> > > > > > > > > > > > >> > > > > > > > >>> - Stephane’s performance > > >>> > > improvement > > >>> > > > > > > > suggestion > > >>> > > > > > > > > > > is a > > >>> > > > > > > > > > > > >> > great > > >>> > > > > > > > > > > > >> > > > > idea but > > >>> > > > > > > > > > > > >> > > > > > > > >>> orthogonal. > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> *Why extend this for > > >>> principal?* > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> - Thanks for the amazing > > >>> points > > >>> > > > > Rajini. > > >>> > > > > > > > > > > > >> > > > > > > > >>> - There is a use case > > where > > >>> ALL > > >>> > > > > > principals > > >>> > > > > > > > from > > >>> > > > > > > > > > > an org > > >>> > > > > > > > > > > > >> > might > > >>> > > > > > > > > > > > >> > > > > want > > >>> > > > > > > > > > > > >> > > > > > > to > > >>> > > > > > > > > > > > >> > > > > > > > >>> access fix set of > topics. > > >>> > > > > > > > > > > > >> > > > > > > > >>> - User group > functionality > > >>> is > > >>> > > > > currently > > >>> > > > > > > > missing. > > >>> > > > > > > > > > > > >> > > > > > > > >>> - IIRC SASL doesn’t use > > >>> custom > > >>> > > > > principal > > >>> > > > > > > > > > builder. > > >>> > > > > > > > > > > > >> > > > > > > > >>> - However, prefixing is > > not > > >>> the > > >>> > > > right > > >>> > > > > > > > choice in > > >>> > > > > > > > > > > all > > >>> > > > > > > > > > > > >> > cases. > > >>> > > > > > > > > > > > >> > > > > Agreed. > > >>> > > > > > > > > > > > >> > > > > > > > >>> - Thoughts? > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> *Changes to AdminClient to > > >>> support > > >>> > > > > > wildcard > > >>> > > > > > > > ACLs* > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> - Thanks Colin for the > > >>> > > > implementation. > > >>> > > > > > It’s > > >>> > > > > > > > good > > >>> > > > > > > > > > > to > > >>> > > > > > > > > > > > >> have > > >>> > > > > > > > > > > > >> > you > > >>> > > > > > > > > > > > >> > > > > and > > >>> > > > > > > > > > > > >> > > > > > > > >>> others > > >>> > > > > > > > > > > > >> > > > > > > > >>> here for the expert > > >>> opinions. > > >>> > > > > > > > > > > > >> > > > > > > > >>> - The current > > implementation > > >>> > uses > > >>> > > > two > > >>> > > > > > > > classes: > > >>> > > > > > > > > > > > >> > AclBinding and > > >>> > > > > > > > > > > > >> > > > > > > > >>> AclBindingFilter. ( > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > https://github.com/apache/ > > >>> > > > > > > > > > > kafka/blob/trunk/clients/src/ > > >>> > > > > > > > > > > > >> > > > > > > > >> main/java/org/apache/kafka/ > > >>> > > > > > > > > > > common/acl/AclBinding.java > > >>> > > > > > > > > > > > >> > > > > > > > >>> and > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > https://github.com/apache/ > > >>> > > > > > > > > > > kafka/blob/trunk/clients/src/ > > >>> > > > > > > > > > > > >> > > > > > > > >> > > main/java/org/apache/kafka/com > > >>> > > > > > > > > > > > >> mon/acl/AclBindingFilter.java > > >>> > > > > > > > > > > > >> > > > > > > > >>> ) > > >>> > > > > > > > > > > > >> > > > > > > > >>> - AclBinding is > definition > > >>> of an > > >>> > > > Acl. > > >>> > > > > > It’s > > >>> > > > > > > > used > > >>> > > > > > > > > > to > > >>> > > > > > > > > > > > >> create > > >>> > > > > > > > > > > > >> > > > ACLs. > > >>> > > > > > > > > > > > >> > > > > > > > >>> - AclBindingFilter is > used > > >>> to > > >>> > > fetch > > >>> > > > or > > >>> > > > > > > > delete > > >>> > > > > > > > > > > > >> “matching’ > > >>> > > > > > > > > > > > >> > > > ACLs. > > >>> > > > > > > > > > > > >> > > > > > > > >>> - In the context of > > wildcard > > >>> > > > suffixed > > >>> > > > > > ACLs, > > >>> > > > > > > > a > > >>> > > > > > > > > > > stored > > >>> > > > > > > > > > > > >> ACL > > >>> > > > > > > > > > > > >> > may > > >>> > > > > > > > > > > > >> > > > > have > > >>> > > > > > > > > > > > >> > > > > > > ‘*’ > > >>> > > > > > > > > > > > >> > > > > > > > >>> in > > >>> > > > > > > > > > > > >> > > > > > > > >>> it. *It really removes > the > > >>> > > > distinction > > >>> > > > > > > > between > > >>> > > > > > > > > > > these > > >>> > > > > > > > > > > > >> two > > >>> > > > > > > > > > > > >> > > > > classes.* > > >>> > > > > > > > > > > > >> > > > > > > > >>> - The current > > implementation > > >>> > uses > > >>> > > > > > ‘null’ to > > >>> > > > > > > > > > define > > >>> > > > > > > > > > > > >> > wildcard > > >>> > > > > > > > > > > > >> > > > ACL > > >>> > > > > > > > > > > > >> > > > > > > > >>> (‘*’). I > > >>> > > > > > > > > > > > >> > > > > > > > >>> think it’s not a good > > >>> pattern > > >>> > and > > >>> > > we > > >>> > > > > > should > > >>> > > > > > > > use > > >>> > > > > > > > > > > ‘*’ > > >>> > > > > > > > > > > > >> for > > >>> > > > > > > > > > > > >> > the > > >>> > > > > > > > > > > > >> > > > > > > wildcard > > >>> > > > > > > > > > > > >> > > > > > > > >>> ACL ( > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > https://github.com/apache/ > > >>> > > > > > > > > > > kafka/blob/trunk/clients/src/ > > >>> > > > > > > > > > > > >> > > > > > > > >> main/java/org/apache/kafka/ > > >>> > > > > > > > > > > common/acl/AclBindingFilter. > > >>> > > > > > > > > > > > >> > java#L39 > > >>> > > > > > > > > > > > >> > > > > > > > >>> and > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > https://github.com/apache/ > > >>> > > > > > > > > > > kafka/blob/trunk/clients/src/ > > >>> > > > > > > > > > > > >> > > > > > > > >> main/java/org/apache/kafka/ > > >>> > > > > > common/resource/ > > >>> > > > > > > > > > > > >> > > > > ResourceFilter.java#L37 > > >>> > > > > > > > > > > > >> > > > > > > > >>> ). > > >>> > > > > > > > > > > > >> > > > > > > > >>> - However, the above two > > >>> changes > > >>> > > are > > >>> > > > > > > > breaking > > >>> > > > > > > > > > > change > > >>> > > > > > > > > > > > >> but > > >>> > > > > > > > > > > > >> > it > > >>> > > > > > > > > > > > >> > > > > should > > >>> > > > > > > > > > > > >> > > > > > > be > > >>> > > > > > > > > > > > >> > > > > > > > >>> acceptable because the > API > > >>> is > > >>> > > marked > > >>> > > > > > with > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > @InterfaceStability.Evolving. > > >>> > > > > > > > > > > > >> > > > > > > > >>> - If everyone agrees to > > the > > >>> > above > > >>> > > > two > > >>> > > > > > > > changes > > >>> > > > > > > > > > > (merging > > >>> > > > > > > > > > > > >> > the > > >>> > > > > > > > > > > > >> > > > two > > >>> > > > > > > > > > > > >> > > > > > > > >>> classes > > >>> > > > > > > > > > > > >> > > > > > > > >>> and using non-null > values > > >>> for > > >>> > > > blanket > > >>> > > > > > > > access), > > >>> > > > > > > > > > the > > >>> > > > > > > > > > > > >> only > > >>> > > > > > > > > > > > >> > other > > >>> > > > > > > > > > > > >> > > > > > > change > > >>> > > > > > > > > > > > >> > > > > > > > >>> is > > >>> > > > > > > > > > > > >> > > > > > > > >>> using the matching > > algorithm > > >>> > from > > >>> > > > the > > >>> > > > > > KIP to > > >>> > > > > > > > > > match > > >>> > > > > > > > > > > > >> ACLs. > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> Other comments: > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> - > It may be worth > > >>> excluding > > >>> > > > > delegation > > >>> > > > > > > > token > > >>> > > > > > > > > > > ACLs > > >>> > > > > > > > > > > > >> from > > >>> > > > > > > > > > > > >> > > > using > > >>> > > > > > > > > > > > >> > > > > > > > >> prefixed > > >>> > > > > > > > > > > > >> > > > > > > > >>> wildcards since it > doesn't > > >>> make > > >>> > > much > > >>> > > > > > sense. > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> I want to ask for > > >>> clarification on > > >>> > > > what > > >>> > > > > > > > delegation > > >>> > > > > > > > > > > token > > >>> > > > > > > > > > > > >> > ACLs > > >>> > > > > > > > > > > > >> > > > are > > >>> > > > > > > > > > > > >> > > > > > > before > > >>> > > > > > > > > > > > >> > > > > > > > >>> commenting. Wildcard > > suffixed > > >>> ACLs > > >>> > > are > > >>> > > > > > > > supported > > >>> > > > > > > > > > > only > > >>> > > > > > > > > > > > >> for > > >>> > > > > > > > > > > > >> > > > > resource > > >>> > > > > > > > > > > > >> > > > > > > and > > >>> > > > > > > > > > > > >> > > > > > > > >>> principal names. > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> > > >>> > > > > > > > > > > > >> > > > > > > > >>> - A quick read makes me > > >>> believe > > >>> > > that > > >>> > > > > > I’ve > > >>> > > > > > > > fixed > > >>> > > > > > > > > > > the > > >>> > > > > > > > > > > > >> > > > formatting > > >>> > > > > > > > > > > > >> > > > > > > issues > > >>> > > > > > > > > > > > >> > > > > > > > >>> reported by Ted. Let me > > >>> know if > > >>> > > > > > > >> > > >> > > > > > >