THIS IS A TEST INSTANCE. ALL YOUR CHANGES WILL BE LOST!!!!
...
- 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 updating userA's config with producer_byte_rate. Now in version 1 opposed to version 0 it will either add or update to the config set present in Zookeeper and keeps other existing configs.
- By default in the broker we parse an AlterConfigRequest version 0 with
Unknown
Set
operation and handle it with the currently existing behavior. Version 1 requests however must have the operation set to other thanUnknown
, otherwise anInvalidRequestException
will be thrown.Set
operation also doesAdd
if needed to be backward compatible with the existing ConfigCommand semantics.
AdminClient APIs
Code Block | ||||
---|---|---|---|---|
| ||||
public static class Quota { public QuotaType type(); public double value(); public QuotaSource source(); } public enum QuotaType { PRODUCER_BYTE_RATE((byte) 0, "producer_byte_rate"), CONSUMER_BYTE_RATE((byte) 1, "consumer_byte_rate"), REQUEST_PERCENTAGE((byte) 2, "request_percentage"); QuotaType(byte id, String name); public byte id(); public String quotaName(); } public enum AlterOperation { ADD((byte) 0), SET((byte) 1), DELETE((byte) 2); AlterOperation(byte id); public byte id(); } public enum QuotaSource { CLIENT_OF_USER((byte) 0, "Client of user"), DEFAULT_CLIENT_OF_USER((byte) 1, "Default client of user"), USER((byte) 2, "User"), CLIENT_OF_DEFAULT_USER((byte) 3, "Client of default user"), DEFAULT_CLIENT_OF_DEFAULT_USER((byte) 4, "Default client of default user"), DEFAULT_USER((byte) 5, "Default user"), CLIENT((byte) 6, "Client"), DEFAULT_CLIENT((byte) 7, "Default client"); QuotaSource(byte id, String description); public byte id(); public String description(); } /** * Makes sure that the list of resources that is used as key in a hashmap is immutable and has a fixed implementation for the hashCode. */ public class ConfigResourceList { public List<ConfigResource> getResourceList(); public class AdminClient { public DescribeQuotasResult describeQuotas(Map<ConfigResourceList, Collection<QuotaType>>, DescribeQuotasOptions options); public AlterQuotasResult alterQuotas(Map<ConfigResourceList, Collection<Quota>> configs, AlterQuotasOptions options); } public class DescribeQuotasOptions { public DescribeQuotasOptions timeoutMs(Integer timeout); } public class DescribeQuotasResult { public Map<List<Resource>, KafkaFuture<Collection<Quota>>> values(); } public class AlterQuotasOptions { public AlterQuotasOptions timeoutMs(Integer timeout); public AlterQuotasOptions validateOnly(boolean validateOnly); } public class AlterQuotasResult { public Map<List<Resource>, KafkaFuture<Void>> results(); } |
...