Awesome last minute effort Piyush.

Really appreciate your time and input,

Andy

Sent from my iPhone

> On 19 May 2018, at 03:43, Piyush Vijay <piyushvij...@gmail.com> wrote:
> 
> Updated the KIP.
> 
> 1. New enum field 'ResourceNameType' in Resource and ResourceFilter classes.
> 2. modify getAcls() and rely on ResourceNameType' field in Resource to
> return either exact matches or all matches based on wildcard-suffix.
> 3. CLI changes to identify if resource name is literal or wildcard-suffix
> 4. Escaping doesn't work and isn't required if we're keeping a separate
> path on ZK (kafka-wildcard-acl) to store wildcard-suffix ACLs.
> 5. New API keys for Create / Delete / Describe Acls request with a new
> field in schemas for 'ResourceNameType'.
> 
> Looks ready to me for the vote, will start voting thread now. Thanks
> everyone for the valuable feedback.
> 
> 
> 
> 
> Piyush Vijay
> 
> 
> Piyush Vijay
> 
>> On Fri, May 18, 2018 at 6:07 PM, Andy Coates <a...@confluent.io> wrote:
>> 
>> Hi Piyush,
>> 
>> We're fast approaching the KIP deadline. Are you actively working on this?
>> If you're not I can take over.
>> 
>> Thanks,
>> 
>> Andy
>> 
>>> On 18 May 2018 at 14:25, Andy Coates <a...@confluent.io> wrote:
>>> 
>>> OK I've read it now.
>>> 
>>> 1. I see you have an example:
>>>> For example: If I want to fetch all ACLs that match ’topicA*’, it’s not
>>> possible without introducing new API AND maintaining backwards
>>> compatibility.
>>> getAcls takes a Resource, right, which would be either a full resource
>>> name or 'ALL', i.e. '*', right?  The point of the call is to get all ACLs
>>> relating to a specific resource, not a partial resource like 'topicA*'.
>>> Currently, I'm guessing / half-remembering that if you ask it for ACLs
>> for
>>> topic 'foo' it doesn't include global 'ALL' ACLs in the list - that would
>>> be a different call.  With the introduction of partial wildcards I think
>>> the _most_ backwards compatible change would be to have
>>> getAcls("topic:foo") to return all the ACLs, including that affect this
>>> topic. This could include any '*'/ALL Acls, (which would be a small
>>> backwards compatible change), or exclude them as it current does.
>>> Excluding any matching partial wildcard acl, e.g. 'f*' would break
>>> compatibility IMHO.
>>> 
>>> 2. Example command lines, showing how to add ACLs to specific resources
>>> that *end* with an asterisk char and adding wildcard-suffixed ACLs, would
>>> really help clarify the KIP. e.g.
>>> 
>>> bin/kafka-acls.sh --authorizer-properties zookeeper.connect=localhost:
>> 2181
>>> --add --allow-principal User:Bob --allow-principal User:Alice
>> --allow-host
>>> 198.51.100.0 --allow-host 198.51.100.1 --operation Read --group my-app-*
>>> 
>>> With the above command I can't see how the code can know if the user
>> means
>>> a literal group called 'my-app-*', or a wildcard suffix for any group
>>> starting with 'my-app-'. Escaping isn't enough as the escape char can
>> clash
>>> too, e.g. escaping a literal to 'my-app-\*' can still clash with someone
>>> wanting a wildcard sufiix matching any group starting with 'my-app-\'.
>>> 
>>> So there needs to be a syntax change here, I think.  Maybe some new
>>> command line switch to either explicitly enable or disable
>>> 'wildcard-suffix' support?  Probably defaulting to wildcard-suffix being
>>> on, (better experience going forward), though off is more backwards
>>> compatible.
>>> 
>>> 
>>> 3. Again, examples of how to store ACLs for specific resources that
>> *end* with
>>> an asterisk and wildcard-suffix ACLs, with any escaping would really
>> help.
>>> 
>>> 
>>> 
>>>> On 18 May 2018 at 13:55, 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.
>>>> 
>>>> 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'?
>>>> 
>>>> 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=GR
>>>>> OUP,
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 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
>>>>>>>>>>>>>>>>>>>> 
>>>>> 
>>>> ...
>>> 
>>> [Message clipped]
>> 

Reply via email to