Hi Colin,

> Doing get-merge-set is buggy, though.  If someone else does get-merge-set at 
> the same time as you, you might overwrite that person's changes, or vice 
> versa.  So I really don't think we should try to do this.  Also, having both 
> an incremental and a full API is useful, and it's just a single boolean at 
> the protocol and API level.

Overwriting somebody's change is currently possible with the
ConfigCommand, as it will do this get-merge-set behavior on the client
side, in the command. From this perspective I think it's not much
different to do this with the admin client. Also I think admins don't
modify the quotas/configs of a client/user/topic/broker often (and
multiple admins would do it even more rarely), so I don't think it is
a big issue. What I think would be useful here but may be out of scope
is to version the changes similarly to leader epochs. So when an admin
updates the configs, it will increment a version number and won't let
other admins to push changes in with lower than that. Instead it would
return an error.

I would be also interested what others think about this?

Cheers,
Viktor


On Sat, May 12, 2018 at 2:29 AM, Colin McCabe <cmcc...@apache.org> wrote:
> On Wed, May 9, 2018, at 05:41, Viktor Somogyi wrote:
>> Hi Colin,
>>
>> > We are going to need to create a new version of AlterConfigsRequest to add 
>> > the "incremental" boolean.  So while we're doing that, maybe we can change 
>> > the type to NULLABLE_STRING.
>>
>> I was just talking to a colleague yesterday and we came to the
>> conclusion that we should keep the boolean flag only on the client
>> side (as you may have suggested earlier?) and not make part of the
>> protocol as it might lead to a very complicated API on the long term.
>> Also we would keep the server side API simpler. Instead of the
>> protocol change we could just simply have the boolean flag in
>> AlterConfigOptions and the AdminClient should do the get-merge-set
>> logic which corresponds to the behavior of the current ConfigCommand.
>> That way we won't need to change the protocol for now but still have
>> both functionality. What do you think?
>
>  Hi Viktor,
>
> Doing get-merge-set is buggy, though.  If someone else does get-merge-set at 
> the same time as you, you might overwrite that person's changes, or vice 
> versa.  So I really don't think we should try to do this.  Also, having both 
> an incremental and a full API is useful, and it's just a single boolean at 
> the protocol and API level.
>
>>
>> > Hmm.  Not sure I follow.  KIP-133 doesn't use the empty string or 
>> > "<default>" to indicate defaults, does it?
>>
>> No it doesn't. It was just my early idea to indicate "delete" on the
>> protocol level. (We are using <default> for denoting the default
>> client id or user in zookeeper.) Rajini was referring that we
>> shouldn't expose this to the protocol level but instead denote delete
>> with an empty string.
>>
>> > This comes from DescribeConfigsResponse.
>> > Unless I'm missing something, I think your suggestion to not expose 
>> > "<default>" is already implemented?
>>
>> In some way, yes. Although this one is used in describe and not in
>> alter. For alter I don't think we'd need my early "<default>" idea.
>
> OK.  Thanks for the explanation.  Using an empty string to indicate delete, 
> as Rajini suggested, seems pretty reasonable to me.  null would work as well.
>
>>
>> >> And we use STRING rather than NULLABLE_STRING in describe configs etc. So 
>> >> we
>> >> should probably do the same for quotas."
>> >
>> > I think nearly all responses treat ERROR_MESSAGE as a nullable string.  
>> > CommonFields#ERROR_MESSAGE, which is used by most of them, is a nullable 
>> > string.  It's DescribeConfigsResponse that is the black sheep here.
>> >
>> >  >     public static final Field.NullableStr ERROR_MESSAGE = new 
>> > Field.NullableStr("error_message", "Response error message");
>>
>> Looking at DescribeConfigsResponse (and AlterConfigsResponse) they use
>> nullable_string in the code. KIP-133 states otherwise though. So in
>> this case it's not a problem luckily.
>
> Thanks for finding this inconsistency.  I'll change the KIP to reflect what 
> was actually implemented (nullable string for error).
>
> cheers,
> Colin
>
>>
>> > What about writing a small script that just handles setting up SCRAM 
>> > credentials?  It would probably be easier to maintain than the old config 
>> > command.  Otherwise we have to explain when each tool should be used, 
>> > which will be confusing to users.
>>
>> I'd like that, yes :).
>>
>> Cheers,
>> Viktor
>>
>> On Mon, May 7, 2018 at 6:52 PM, Colin McCabe <cmcc...@apache.org> wrote:
>> > On Fri, May 4, 2018, at 05:49, Viktor Somogyi wrote:
>> >> Hi Colin,
>> >>
>> >> > Rather than breaking compatibility, we should simply add a new 
>> >> > "incremental" boolean to AlterConfigsOptions.  Callers can set this 
>> >> > boolean to true when they want the update to be incremental.  It should 
>> >> > default to false so that old code continues to work.
>> >>
>> >> Agreed, let's do it this way.
>> >>
>> >> > Hmm.  I don't think AlterOperation is necessary.  If the user wants to 
>> >> > delete a configuration key named "foo", they can create a ConfigEntry 
>> >> > with name = "foo", value = null.
>> >>
>> >> AlterConfig's config type currently is string, so the only possibility
>> >> is to use an empty string as changing the type to nullable_string
>> >> could be breaking if the client code doesn't expect -1 as the string
>> >> size. In the discussion thread earlier we had a conversation about
>> >> this with Rajini, let me paste it here (so it gives some context). At
>> >> that point I had the text "<default>" for this functionality:
>> >
>> > Hi Viktor,
>> >
>> > We are going to need to create a new version of AlterConfigsRequest to add 
>> > the "incremental" boolean.  So while we're doing that, maybe we can change 
>> > the type to NULLABLE_STRING.
>> >
>> >> "4. We use "<default>" internally to store default quotas and other
>> >> defaults. But I don't think we should externalise that string. We use 
>> >> empty
>> >> string elsewhere for indicating default, we can do the same here.
>> >
>> > Hmm.  Not sure I follow.  KIP-133 doesn't use the empty string or 
>> > "<default>" to indicate defaults, does it?
>> >
>> > There is a ConfigEntry class:
>> >
>> >  > @InterfaceStability.Evolving
>> >  > public class ConfigEntry {
>> >  >
>> >  >     private final String name;
>> >  >     private final String value;
>> >  >     private final ConfigSource source;
>> >  >     private final boolean isSensitive;
>> >  >     private final boolean isReadOnly;
>> >  >     private final List<ConfigSynonym> synonyms;
>> >
>> > and the ConfigSource enum indicates where the config came from:
>> >
>> >  >     /**
>> >  >      * Source of configuration entries.
>> >  >      */
>> >  >     public enum ConfigSource {
>> >  >         DYNAMIC_TOPIC_CONFIG,           // dynamic topic config that is 
>> > configured for a specific topic
>> >  >         DYNAMIC_BROKER_CONFIG,          // dynamic broker config that 
>> > is configured for a specific broker
>> >  >         DYNAMIC_DEFAULT_BROKER_CONFIG,  // dynamic broker config that 
>> > is configured as default for all brokers in the cluster
>> >  >         STATIC_BROKER_CONFIG,           // static broker config 
>> > provided as broker properties at start up (e.g. server.properties file)
>> >  >         DEFAULT_CONFIG,                 // built-in default 
>> > configuration for configs that have a default value
>> >  >         UNKNOWN                         // source unknown e.g. in the 
>> > ConfigEntry used for alter requests where source is not set
>> >  >     }
>> >
>> > This comes from DescribeConfigsResponse.
>> > Unless I'm missing something, I think your suggestion to not expose 
>> > "<default>" is already implemented?
>> >
>> >> And we use STRING rather than NULLABLE_STRING in describe configs etc. So 
>> >> we
>> >> should probably do the same for quotas."
>> >
>> > I think nearly all responses treat ERROR_MESSAGE as a nullable string.  
>> > CommonFields#ERROR_MESSAGE, which is used by most of them, is a nullable 
>> > string.  It's DescribeConfigsResponse that is the black sheep here.
>> >
>> >  >     public static final Field.NullableStr ERROR_MESSAGE = new 
>> > Field.NullableStr("error_message", "Response error message");
>> >
>> >>
>> >> > Yeah, this might be an excessive maintenance burden.  Maybe we should 
>> >> > get rid of the old zookeeper-based code, and just move towards having 
>> >> > only a KIP-248-based tool.  It's a breaking change, but it's clear to 
>> >> > users that it's occurring, and what the fix is (specifying 
>> >> > --bootstrap-server instead of --zookeeper).
>> >>
>> >> Earlier Rajini raised a concern that direct zookeeper interaction is
>> >> required to add the SCRAM credentials which will be used for
>> >> validation if inter-broker communication uses this auth method. This
>> >> is currently done by the ConfigCommand. Therefore we can't completely
>> >> get rid of it yet either.
>> >>
>> >> In my opinion though on a longer term (and this is now a bit
>> >> off-topic) Kafka shouldn't use Zookeeper as a credentials store, just
>> >> provide an interface, so 3rd party authentication stores could be
>> >> implemented. Then similarly to the authorizer we could have Zookeeper
>> >> as a default though and a client that manages SCRAM credentials in ZK.
>> >> From this perspective I'd leave the the command there but put a
>> >> warning that the tool is deprecated and should only be used for
>> >> setting up SCRAM credentials.
>> >> What do you think?
>> >
>> > What about writing a small script that just handles setting up SCRAM 
>> > credentials?  It would probably be easier to maintain than the old config 
>> > command.  Otherwise we have to explain when each tool should be used, 
>> > which will be confusing to users.
>> >
>> > best,
>> > Colin
>> >
>> >>
>> >> Cheers,
>> >> Viktor
>> >>
>> >>
>> >> On Thu, May 3, 2018 at 7:47 PM, Colin McCabe <cmcc...@apache.org> wrote:
>> >> > On Thu, May 3, 2018, at 05:11, Viktor Somogyi wrote:
>> >> >> @Magnus, yes that is correct. Thanks for your feedback. Updated it with
>> >> >> this (which might be subject to change based on the conversation with
>> >> >> Colin): "The changes done will be incremental in version 1, opposed to 
>> >> >> the
>> >> >> atomic behavior in version 0. For instance in version 0 sending an 
>> >> >> update
>> >> >> for producer_byte_rate for userA would result in removing all previous 
>> >> >> data
>> >> >> and setting userA's config with producer_byte_rate. Now in version 1
>> >> >> opposed to version 0 it will add an extra config and keeps other 
>> >> >> existing
>> >> >> configs."
>> >> >
>> >> > Hi Viktor,
>> >> >
>> >> > AdminClient#alterConfigs is a public API which users have already 
>> >> > written code against.  If we silently change what it does to be 
>> >> > incremental addition rather than complete replacement of the existing 
>> >> > configuration, we will break all of that existing code.  If we do that, 
>> >> > there is not even any way that users can write code to support both 
>> >> > broker versions.  AdminClient does not expose any API that users can 
>> >> > use to check broker version.  I think that would be really bad for 
>> >> > users.
>> >> >
>> >> > Rather than breaking compatibility, we should simply add a new 
>> >> > "incremental" boolean to AlterConfigsOptions.  Callers can set this 
>> >> > boolean to true when they want the update to be incremental.  It should 
>> >> > default to false so that old code continues to work.
>> >> >
>> >> >>
>> >> >> @Colin,
>> >> >> yes, I have/had a hard time finding a place for this operation. I 
>> >> >> think ADD
>> >> >> and DELETE should be on config level to allow complex use cases (if 
>> >> >> someone
>> >> >> builds their own tool based on the AdminClient), so users can add and
>> >> >> delete multiple configs in one request.
>> >> >
>> >> > Hmm.  I don't think AlterOperation is necessary.  If the user wants to 
>> >> > delete a configuration key named "foo", they can create a ConfigEntry 
>> >> > with name = "foo", value = null.
>> >> >
>> >> >> But also at the same time, SET is as you're suggesting really seems 
>> >> >> like a
>> >> >> flag that tells the AdminClient/AdminManager how they should behave.
>> >> >> However since the AdminClient matches protocol version with the broker 
>> >> >> via
>> >> >> the API_VERSIONS request, I think it would be enough to modify the
>> >> >> AdminManager that it should behave differently in case of an increased
>> >> >> protocol versions, if there is this extra flag set through
>> >> >> AlterConfigOptions (AdminClient sets the flag on the protocol, which 
>> >> >> will
>> >> >> be reflected after parsing in AdminManager). Also if we target this 
>> >> >> change
>> >> >> to 2.0 (June?), then we might not need the extra flag but make the 
>> >> >> behavior
>> >> >> break. What do you think?
>> >> >
>> >> > Right.  I think a flag in AlterConfigsRequest makes sense.  AdminClient 
>> >> > can set it based on a boolean field in AlterConfigsOptions.
>> >> >
>> >> >>
>> >> >> Keeping the --zookeeper option working is not infeasible of course - 
>> >> >> and as
>> >> >> per the community's feedback it may be the better option. Although one 
>> >> >> of
>> >> >> the goals is to put this new ConfigCommand to the tools module, which
>> >> >> doesn't have the dependency on the server code, it would be a bit 
>> >> >> harder.
>> >> >> Most likely I'd need to call into the Scala code with reflection, which
>> >> >> could be quite complicated.
>> >> >
>> >> > Yeah, this might be an excessive maintenance burden.  Maybe we should 
>> >> > get rid of the old zookeeper-based code, and just move towards having 
>> >> > only a KIP-248-based tool.  It's a breaking change, but it's clear to 
>> >> > users that it's occurring, and what the fix is (specifying 
>> >> > --bootstrap-server instead of --zookeeper).
>> >> >
>> >> > best,
>> >> > Colin
>> >> >
>> >> >>
>> >> >> Also rewrote the request semantics, hopefully it's more clear now.
>> >> >>
>> >> >> Let me know what do you think about this and thank you for your 
>> >> >> feedback.
>> >> >>
>> >> >> Cheers,
>> >> >> Viktor
>> >> >>
>> >> >> On Thu, Apr 26, 2018 at 7:06 PM, Colin McCabe <cmcc...@apache.org> 
>> >> >> wrote:
>> >> >>
>> >> >> > Hi Viktor,
>> >> >> >
>> >> >> > If I'm reading the KIP right, it looks like the new proposed verison 
>> >> >> > of
>> >> >> > AlterConfigs sets an OperationType on a per-config basis:
>> >> >> >
>> >> >> >  > AlterConfigs Request (Version: 1) => [resources] validate_only
>> >> >> >  >   validate_only => BOOLEAN
>> >> >> >  >   resources => resource_type resource_name [configs]
>> >> >> >  >     resource_type => INT8
>> >> >> >  >     resource_name => STRING
>> >> >> >  >     configs => config_name config_value config_operation
>> >> >> >  >       config_name => STRING
>> >> >> >  >       config_value => STRING
>> >> >> >  >       config_operation => INT8 [NEW ADDITION]
>> >> >> >  >
>> >> >> >  > Request Semantics:
>> >> >> >  >
>> >> >> >  >      By default in the broker we parse an AlterConfigRequest 
>> >> >> > version 0
>> >> >> >  > with Unknown operation and handle it with the currently existing
>> >> >> > behavior.
>> >> >> >  > Version 1 requests however must have the operation set to other 
>> >> >> > than
>> >> >> >  > Unknown, otherwise an InvalidRequestException will be thrown.
>> >> >> >  >          Set operation also does Add if needed to be backward
>> >> >> > compatible
>> >> >> >  > with the existing ConfigCommand semantics.
>> >> >> >
>> >> >> > However, this seems like a configuration that should be global to the
>> >> >> > whole AlterConfigs request, right?  It doesn't make sense to have one
>> >> >> > configuration key use AlterOperation.Set and the other use
>> >> >> > AlterOperation.Add -- the Set one specifies that we should overwrite 
>> >> >> > the
>> >> >> > whole node in ZK.
>> >> >> >
>> >> >> > Another consideration here is that we should do this in a compatible
>> >> >> > fashion in AdminClient.  Existing code that relies on the "set 
>> >> >> > everything"
>> >> >> > behavior should not break.  The best way to do this is to add a 
>> >> >> > boolean to
>> >> >> > ./clients/src/main/java/org/apache/kafka/clients/admin/AlterConfigsOptions.java
>> >> >> > , specifying whether we want to clear everything that hasn't been
>> >> >> > specified, or not.  This should default to true so that existing 
>> >> >> > code can
>> >> >> > continue to work.... Unless we believe that the existing AlterConfigs
>> >> >> > behavior is so broken that it should be changed, even in a
>> >> >> > compatibility-breaking way.
>> >> >> >
>> >> >> > Similarly, for other tools, we managed to support both the 
>> >> >> > zookeeper-based
>> >> >> > way and the new way in the same tool for a while.  This seems like
>> >> >> > something users would really want-- is it truly infeasible to do 
>> >> >> > here?  The
>> >> >> > Java code could call into the Scala code as necessary when the zk 
>> >> >> > flag was
>> >> >> > specified, right?
>> >> >> >
>> >> >> > best,
>> >> >> > Colin
>> >> >> >
>> >> >> >
>> >> >> > On Thu, Apr 26, 2018, at 01:47, Magnus Edenhill wrote:
>> >> >> > > Hi Viktor,
>> >> >> > >
>> >> >> > > after speaking to Rajini it seems like this KIP will allow clients 
>> >> >> > > to
>> >> >> > > perform incremental configuration updates with AlterConfigs, only
>> >> >> > providing
>> >> >> > > the settings
>> >> >> > > that it wants to change, as opposed to the current atomic 
>> >> >> > > behaviour where
>> >> >> > > all settings
>> >> >> > > need to be provided to avoid having them revert to their default 
>> >> >> > > values.
>> >> >> > >
>> >> >> > > If this is indeed the case, could you update the KIP to make this 
>> >> >> > > more
>> >> >> > > clear?
>> >> >> > > I.e., that using Version 1 of AlterConfigs has the incremental 
>> >> >> > > behaviour,
>> >> >> > > while
>> >> >> > > version 0 is atomic.
>> >> >> > >
>> >> >> > > Thanks,
>> >> >> > > Magnus
>> >> >> > >
>> >> >> > >
>> >> >> > >
>> >> >> > >
>> >> >> > > 2018-04-16 13:27 GMT+02:00 Viktor Somogyi 
>> >> >> > > <viktorsomo...@gmail.com>:
>> >> >> > >
>> >> >> > > > Hi Rajini,
>> >> >> > > >
>> >> >> > > > The current ConfigCommand would still be possible to use, 
>> >> >> > > > therefore
>> >> >> > those
>> >> >> > > > who wish to set up SCRAM or initial quotas would be able to 
>> >> >> > > > continue
>> >> >> > doing
>> >> >> > > > it through kafka-run-class.sh.
>> >> >> > > > In an ideal world I'd keep it in the current ConfigCommand 
>> >> >> > > > command so
>> >> >> > we
>> >> >> > > > wouldn't mix the zookeeper and admin client configs. Perhaps I 
>> >> >> > > > could
>> >> >> > create
>> >> >> > > > a kafka-configs-zookeeper.sh shell script for shortening the
>> >> >> > > > kafka-run-class command.
>> >> >> > > > What do you and others think?
>> >> >> > > >
>> >> >> > > > Thanks,
>> >> >> > > > Viktor
>> >> >> > > >
>> >> >> > > >
>> >> >> > > >
>> >> >> > > > On Mon, Apr 16, 2018 at 10:15 AM, Rajini Sivaram <
>> >> >> > rajinisiva...@gmail.com>
>> >> >> > > > wrote:
>> >> >> > > >
>> >> >> > > > > Hi Viktor,
>> >> >> > > > >
>> >> >> > > > > The KIP proposes to remove the ability to configure using 
>> >> >> > > > > ZooKeeper.
>> >> >> > This
>> >> >> > > > > means we will no longer have the ability to start up a cluster 
>> >> >> > > > > with
>> >> >> > SCRAM
>> >> >> > > > > credentials since we first need to create SCRAM credentials 
>> >> >> > > > > before
>> >> >> > > > brokers
>> >> >> > > > > can start if the broker uses SCRAM for inter-broker 
>> >> >> > > > > communication
>> >> >> > and we
>> >> >> > > > > need SCRAM credentials for the AdminClient before we can 
>> >> >> > > > > create new
>> >> >> > ones.
>> >> >> > > > > For quotas as well, we will no longer be able to configure 
>> >> >> > > > > quotas
>> >> >> > until
>> >> >> > > > at
>> >> >> > > > > least one broker has been started. Perhaps, we ought to retain 
>> >> >> > > > > the
>> >> >> > > > ability
>> >> >> > > > > to configure using ZooKeeper for these initialization 
>> >> >> > > > > scenarios and
>> >> >> > > > support
>> >> >> > > > > only AdminClient for dynamic updates?
>> >> >> > > > >
>> >> >> > > > > What do others think?
>> >> >> > > > >
>> >> >> > > > > Regards,
>> >> >> > > > >
>> >> >> > > > > Rajini
>> >> >> > > > >
>> >> >> > > > > On Sun, Apr 15, 2018 at 10:28 AM, Ted Yu <yuzhih...@gmail.com>
>> >> >> > wrote:
>> >> >> > > > >
>> >> >> > > > > > +1
>> >> >> > > > > > -------- Original message --------From: zhenya Sun <
>> >> >> > toke...@126.com>
>> >> >> > > > > > Date: 4/15/18  12:42 AM  (GMT-08:00) To: dev 
>> >> >> > > > > > <dev@kafka.apache.org
>> >> >> > >
>> >> >> > > > Cc:
>> >> >> > > > > > dev <dev@kafka.apache.org> Subject: Re: [VOTE] #2 KIP-248: 
>> >> >> > > > > > Create
>> >> >> > New
>> >> >> > > > > > ConfigCommand That Uses The New AdminClient
>> >> >> > > > > > non-binding +1
>> >> >> > > > > >
>> >> >> > > > > >
>> >> >> > > > > >
>> >> >> > > > > >
>> >> >> > > > > >
>> >> >> > > > > > from my iphone!
>> >> >> > > > > > On 04/15/2018 15:41, Attila Sasvári wrote:
>> >> >> > > > > > Thanks for updating the KIP.
>> >> >> > > > > >
>> >> >> > > > > > +1 (non-binding)
>> >> >> > > > > >
>> >> >> > > > > > Viktor Somogyi <viktorsomo...@gmail.com> ezt írta (időpont: 
>> >> >> > > > > > 2018.
>> >> >> > ápr.
>> >> >> > > > > 9.,
>> >> >> > > > > > H 16:49):
>> >> >> > > > > >
>> >> >> > > > > > > Hi Magnus,
>> >> >> > > > > > >
>> >> >> > > > > > > Thanks for the heads up, added the endianness to the KIP. 
>> >> >> > > > > > > Here
>> >> >> > is the
>> >> >> > > > > > > current text:
>> >> >> > > > > > >
>> >> >> > > > > > > "Double
>> >> >> > > > > > > A new type needs to be added to transfer quota values. 
>> >> >> > > > > > > Since the
>> >> >> > > > > protocol
>> >> >> > > > > > > classes in Kafka already uses ByteBuffers it is logical to 
>> >> >> > > > > > > use
>> >> >> > their
>> >> >> > > > > > > functionality for serializing doubles. The serialization is
>> >> >> > > > basically a
>> >> >> > > > > > > representation of the specified floating-point value 
>> >> >> > > > > > > according
>> >> >> > to the
>> >> >> > > > > > IEEE
>> >> >> > > > > > > 754 floating-point "double format" bit layout. The 
>> >> >> > > > > > > ByteBuffer
>> >> >> > > > > serializer
>> >> >> > > > > > > writes eight bytes containing the given double value, in 
>> >> >> > > > > > > Big
>> >> >> > Endian
>> >> >> > > > > byte
>> >> >> > > > > > > order, into this buffer at the current position, and then
>> >> >> > increments
>> >> >> > > > > the
>> >> >> > > > > > > position by eight.
>> >> >> > > > > > >
>> >> >> > > > > > > The implementation will be defined in
>> >> >> > > > > > > org.apache.kafka.common.protocol.types with the other 
>> >> >> > > > > > > protocol
>> >> >> > types
>> >> >> > > > > > and it
>> >> >> > > > > > > will have no default value much like the other types 
>> >> >> > > > > > > available
>> >> >> > in the
>> >> >> > > > > > > protocol."
>> >> >> > > > > > >
>> >> >> > > > > > > Also, I haven't changed the protocol docs yet but will do 
>> >> >> > > > > > > so in
>> >> >> > my PR
>> >> >> > > > > for
>> >> >> > > > > > > this feature.
>> >> >> > > > > > >
>> >> >> > > > > > > Let me know if you'd still add something.
>> >> >> > > > > > >
>> >> >> > > > > > > Regards,
>> >> >> > > > > > > Viktor
>> >> >> > > > > > >
>> >> >> > > > > > >
>> >> >> > > > > > > On Mon, Apr 9, 2018 at 3:32 PM, Magnus Edenhill <
>> >> >> > mag...@edenhill.se>
>> >> >> > > > > > > wrote:
>> >> >> > > > > > >
>> >> >> > > > > > > > Hi Viktor,
>> >> >> > > > > > > >
>> >> >> > > > > > > > since serialization of floats isn't as straight forward 
>> >> >> > > > > > > > as
>> >> >> > > > integers,
>> >> >> > > > > > > please
>> >> >> > > > > > > > specify the exact serialization format of DOUBLE in the
>> >> >> > protocol
>> >> >> > > > docs
>> >> >> > > > > > > > (e.g., IEEE 754),
>> >> >> > > > > > > > including endianness (big-endian please).
>> >> >> > > > > > > >
>> >> >> > > > > > > > This will help the non-java client ecosystem.
>> >> >> > > > > > > >
>> >> >> > > > > > > > Thanks,
>> >> >> > > > > > > > Magnus
>> >> >> > > > > > > >
>> >> >> > > > > > > >
>> >> >> > > > > > > > 2018-04-09 15:16 GMT+02:00 Viktor Somogyi <
>> >> >> > viktorsomo...@gmail.com
>> >> >> > > > >:
>> >> >> > > > > > > >
>> >> >> > > > > > > > > Hi Attila,
>> >> >> > > > > > > > >
>> >> >> > > > > > > > > 1. It uses ByteBuffers, which in turn will use
>> >> >> > > > > > Double.doubleToLongBits
>> >> >> > > > > > > to
>> >> >> > > > > > > > > convert the double value to a long and that long will 
>> >> >> > > > > > > > > be
>> >> >> > written
>> >> >> > > > in
>> >> >> > > > > > the
>> >> >> > > > > > > > > buffer. I'v updated the KIP with this.
>> >> >> > > > > > > > > 2. Good idea, modified it.
>> >> >> > > > > > > > > 3. During the discussion I remember we didn't really 
>> >> >> > > > > > > > > decide
>> >> >> > which
>> >> >> > > > > one
>> >> >> > > > > > > > would
>> >> >> > > > > > > > > be the better one but I agree that a wrapper class 
>> >> >> > > > > > > > > that makes
>> >> >> > > > sure
>> >> >> > > > > > the
>> >> >> > > > > > > > list
>> >> >> > > > > > > > > that is used as a key is immutable is a good idea and 
>> >> >> > > > > > > > > would
>> >> >> > ease
>> >> >> > > > > the
>> >> >> > > > > > > life
>> >> >> > > > > > > > > of people using the interface. Also more importantly 
>> >> >> > > > > > > > > would
>> >> >> > make
>> >> >> > > > > sure
>> >> >> > > > > > > that
>> >> >> > > > > > > > > we always use the same hashCode. I have created wrapper
>> >> >> > classes
>> >> >> > > > for
>> >> >> > > > > > the
>> >> >> > > > > > > > map
>> >> >> > > > > > > > > value as well but that was reverted to keep things
>> >> >> > consistent.
>> >> >> > > > > > Although
>> >> >> > > > > > > > for
>> >> >> > > > > > > > > the key I think we wouldn't break consistency. I 
>> >> >> > > > > > > > > updated the
>> >> >> > KIP.
>> >> >> > > > > > > > >
>> >> >> > > > > > > > > Thanks,
>> >> >> > > > > > > > > Viktor
>> >> >> > > > > > > > >
>> >> >> > > > > > > > >
>> >> >> > > > > > > > > On Tue, Apr 3, 2018 at 1:27 PM, Attila Sasvári <
>> >> >> > > > > asasv...@apache.org>
>> >> >> > > > > > > > > wrote:
>> >> >> > > > > > > > >
>> >> >> > > > > > > > > > Thanks for working on it Viktor.
>> >> >> > > > > > > > > >
>> >> >> > > > > > > > > > It looks good to me, but I have some questions:
>> >> >> > > > > > > > > > - I see a new type DOUBLE is used for quota_value , 
>> >> >> > > > > > > > > > and it
>> >> >> > is
>> >> >> > > > not
>> >> >> > > > > > > > listed
>> >> >> > > > > > > > > > among the primitive types on the Kafka protocol 
>> >> >> > > > > > > > > > guide. Can
>> >> >> > you
>> >> >> > > > > add
>> >> >> > > > > > > some
>> >> >> > > > > > > > > > more details?
>> >> >> > > > > > > > > > - I am not sure that using an environment (i.e.
>> >> >> > > > > > > > USE_OLD_COMMAND)variable
>> >> >> > > > > > > > > is
>> >> >> > > > > > > > > > the best way to control behaviour of kafka-config.sh 
>> >> >> > > > > > > > > > . In
>> >> >> > other
>> >> >> > > > > > > scripts
>> >> >> > > > > > > > > > (e.g. console-consumer) an argument is passed (e.g.
>> >> >> > > > > > --new-consumer).
>> >> >> > > > > > > If
>> >> >> > > > > > > > > we
>> >> >> > > > > > > > > > still want to use it, then I would suggest something 
>> >> >> > > > > > > > > > like
>> >> >> > > > > > > > > > USE_OLD_KAFKA_CONFIG_COMMAND. What do you think?
>> >> >> > > > > > > > > > - I have seen maps like Map<List<ConfigResource>,
>> >> >> > > > > > > > Collection<QuotaType>>.
>> >> >> > > > > > > > > > If List<ConfigResource> is the key type, you should 
>> >> >> > > > > > > > > > make
>> >> >> > sure
>> >> >> > > > > that
>> >> >> > > > > > > this
>> >> >> > > > > > > > > > List is immutable. Have you considered to introduce 
>> >> >> > > > > > > > > > a new
>> >> >> > > > wrapper
>> >> >> > > > > > > > class?
>> >> >> > > > > > > > > >
>> >> >> > > > > > > > > > Regards,
>> >> >> > > > > > > > > > - Attila
>> >> >> > > > > > > > > >
>> >> >> > > > > > > > > > On Thu, Mar 29, 2018 at 1:46 PM, zhenya Sun <
>> >> >> > toke...@126.com>
>> >> >> > > > > > wrote:
>> >> >> > > > > > > > > > >
>> >> >> > > > > > > > > > >
>> >> >> > > > > > > > > > >
>> >> >> > > > > > > > > > > +1 (non-binding)
>> >> >> > > > > > > > > > >
>> >> >> > > > > > > > > > >
>> >> >> > > > > > > > > > > | |
>> >> >> > > > > > > > > > > zhenya Sun
>> >> >> > > > > > > > > > > 邮箱:toke...@126.com
>> >> >> > > > > > > > > > > |
>> >> >> > > > > > > > > > >
>> >> >> > > > > > > > > > > 签名由 网易邮箱大师 定制
>> >> >> > > > > > > > > > >
>> >> >> > > > > > > > > > > On 03/29/2018 19:40, Sandor Murakozi wrote:
>> >> >> > > > > > > > > > > +1 (non-binding)
>> >> >> > > > > > > > > > >
>> >> >> > > > > > > > > > > Thanks for the KIP, Viktor
>> >> >> > > > > > > > > > >
>> >> >> > > > > > > > > > > On Wed, Mar 21, 2018 at 5:41 PM, Viktor Somogyi <
>> >> >> > > > > > > > > viktorsomo...@gmail.com
>> >> >> > > > > > > > > > >
>> >> >> > > > > > > > > > > wrote:
>> >> >> > > > > > > > > > >
>> >> >> > > > > > > > > > > > Hi Everyone,
>> >> >> > > > > > > > > > > >
>> >> >> > > > > > > > > > > > I've started a vote on KIP-248
>> >> >> > > > > > > > > > > > <https://cwiki.apache.org/conf
>> >> >> > luence/display/KAFKA/KIP-
>> >> >> > > > > > > > > > 248+-+Create+New+
>> >> >> > > > > > > > > > > > ConfigCommand+That+Uses+The+New+AdminClient#KIP-248-
>> >> >> > > > > > > > > > > > CreateNewConfigCommandThatUsesTheNewAdminClient-
>> >> >> > > > > > DescribeQuotas>
>> >> >> > > > > > > > > > > > a few weeks ago but at the time I got a couple 
>> >> >> > > > > > > > > > > > more
>> >> >> > > > comments
>> >> >> > > > > > and
>> >> >> > > > > > > it
>> >> >> > > > > > > > > was
>> >> >> > > > > > > > > > > > very close to 1.1 feature freeze, people were 
>> >> >> > > > > > > > > > > > occupied
>> >> >> > with
>> >> >> > > > > > that,
>> >> >> > > > > > > > so
>> >> >> > > > > > > > > I
>> >> >> > > > > > > > > > > > wanted to restart the vote on this.
>> >> >> > > > > > > > > > > >
>> >> >> > > > > > > > > > > >
>> >> >> > > > > > > > > > > > *Summary of the KIP*
>> >> >> > > > > > > > > > > > For those who don't have context I thought I'd
>> >> >> > summarize it
>> >> >> > > > > in
>> >> >> > > > > > a
>> >> >> > > > > > > > few
>> >> >> > > > > > > > > > > > sentence.
>> >> >> > > > > > > > > > > > *Problem & Motivation: *The basic problem that 
>> >> >> > > > > > > > > > > > the KIP
>> >> >> > > > tries
>> >> >> > > > > to
>> >> >> > > > > > > > solve
>> >> >> > > > > > > > > > is
>> >> >> > > > > > > > > > > > that kafka-configs.sh (which in turn uses the
>> >> >> > ConfigCommand
>> >> >> > > > > > > class)
>> >> >> > > > > > > > > uses
>> >> >> > > > > > > > > > a
>> >> >> > > > > > > > > > > > direct zookeeper connection. This is not 
>> >> >> > > > > > > > > > > > desirable as
>> >> >> > > > getting
>> >> >> > > > > > > > around
>> >> >> > > > > > > > > > the
>> >> >> > > > > > > > > > > > broker opens up security issues and prevents the 
>> >> >> > > > > > > > > > > > tool
>> >> >> > from
>> >> >> > > > > > being
>> >> >> > > > > > > > used
>> >> >> > > > > > > > > > in
>> >> >> > > > > > > > > > > > deployments where only the brokers are exposed to
>> >> >> > clients.
>> >> >> > > > > > Also a
>> >> >> > > > > > > > > > somewhat
>> >> >> > > > > > > > > > > > smaller motivation is to rewrite the tool in 
>> >> >> > > > > > > > > > > > java as
>> >> >> > part
>> >> >> > > > of
>> >> >> > > > > > the
>> >> >> > > > > > > > > tools
>> >> >> > > > > > > > > > > > component so we can get rid of requiring the core
>> >> >> > module on
>> >> >> > > > > the
>> >> >> > > > > > > > > > classpath
>> >> >> > > > > > > > > > > > for the kafka-configs tool.
>> >> >> > > > > > > > > > > > *Solution:*
>> >> >> > > > > > > > > > > > - I've designed new 2 protocols: DescribeQuotas 
>> >> >> > > > > > > > > > > > and
>> >> >> > > > > > AlterQuotas.
>> >> >> > > > > > > > > > > > - Also redesigned the output format of the 
>> >> >> > > > > > > > > > > > command line
>> >> >> > > > tool
>> >> >> > > > > so
>> >> >> > > > > > > it
>> >> >> > > > > > > > > > provides
>> >> >> > > > > > > > > > > > a nicer result.
>> >> >> > > > > > > > > > > > - kafka-configs.[sh/bat] will use a new java 
>> >> >> > > > > > > > > > > > based
>> >> >> > > > > > ConfigCommand
>> >> >> > > > > > > > that
>> >> >> > > > > > > > > > is
>> >> >> > > > > > > > > > > > placed in tools.
>> >> >> > > > > > > > > > > >
>> >> >> > > > > > > > > > > >
>> >> >> > > > > > > > > > > > I'd be happy to receive any votes or feedback on 
>> >> >> > > > > > > > > > > > this.
>> >> >> > > > > > > > > > > >
>> >> >> > > > > > > > > > > > Regards,
>> >> >> > > > > > > > > > > > Viktor
>> >> >> > > > > > > > > > > >
>> >> >> > > > > > > > > >
>> >> >> > > > > > > > >
>> >> >> > > > > > > >
>> >> >> > > > > > >
>> >> >> > > > > >
>> >> >> > > > >
>> >> >> > > >
>> >> >> >

Reply via email to