Thanks for the feedback Colin. Comments inline.

On Sun, May 7, 2017 at 9:29 PM, Colin McCabe <cmcc...@apache.org> wrote:
>
> Hmm.  What's the behavior if I try to list the configuration for a topic
> that doesn't exist?  It seems like in this case, the whole request has
> to return an error, and nothing gets listed.  Shouldn't the protocol
> should return an error code and message per element in the batch,
> similar to how the other batch protocols work (CreateTopics,
> DeleteTopics, etc. etc.)
>

CreateTopics and DeleteTopics are more like AlterConfigs and that has an
error code per batch. For requests that mutate, this is essential because
the operations are not transactional. I followed the same pattern as
ListGroups, but that doesn't take filters, so MetadataRequest is a better
example. For consistency with that, I added an error code per batch.

We also should think about the case where someone requests
> configurations from multiple brokers.  Since there are multiple requests
> sent over the wire in this case, there is the chance for some of them to
> fail when others have succeeded.  So the API needs a way of returning an
> error per batch element.
>

Yeah, that's true. For the AdminClient side, I followed the same pattern as
ListTopicsResponse, but it seems like DescribeTopicsResults is a better
example. I named this request ListConfigs for consistency with ListAcls,
but it looks like they really should be DescribeConfigs and DescribeAcls.

On the other hand, with configurations, each topic will have a single
> configuration, never more and never less.  Each cluster will have a
> single configuration-- never more and never less.  So having separate
> Configuration resources doesn't seem to add any value, since they will
> always map 1:1 to existing resources.
>

Good point. I thought about your proposal in more depth and I agree that it
solves the issue in a nice way. I updated the KIP.

I guess my question is more conceptual-- if these things are all
> resources, shouldn't we have a single type to model all of them?  We
> might want to add configurations to other resources later on as well.
>

I've been thinking about how we could satisfy the 2 requirements of having
a general resource type while making it clear which values are allowed for
a given operation. I updated the KIP to use a shared resource type in the
wire, renamed entity to resource, but kept a separate class and enum for
ConfigResource and ConfigResource.Type. They map trivially to Resource and
ResourceType.

Also, I realised that I was a bit hasty when I changed Config to
Collection<ConfigEntry> in the signature of a few methods. I think Config
is the right type. It's a container for a Collection of ConfigEntry
instances so that we can provide useful methods to work with the configs
(e.g. exclude items with defaults, etc.).

Here's the full diff of the changes:

https://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=68719318&selectedPageVersions=14&selectedPageVersions=11

Given that we don't have much time until the KIP freeze and this is an
important KIP to make the AdminClient truly useful, I will start the vote
thread. That said, don't hesitate to provide additional feedback.

Thanks.
Ismael

Reply via email to