Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. Bump up the valid versions range
  2. New fields - IncludeSynoyms IncludeType and IncludeDocumentation - with default value of false

...

  1. Bump valid versions range
  2. Add new Fields -  ConfigValueType , and Documentation

Code Block
{
  "apiKey": 32,
  "type": "response",
  "name": "DescribeConfigsResponse",
  "validVersions": "0-3", <--- Updated Field
  "flexibleVersions": "none",
  "fields": [
    { "name": "ThrottleTimeMs", "type": "int32", "versions": "0+",
      "about": "The duration in milliseconds for which the request was throttled due to a quota violation, or zero if the request did not violate any quota." },
    { "name": "Results", "type": "[]DescribeConfigsResult", "versions": "0+",
      "about": "The results for each resource.", "fields": [
      { "name": "ErrorCode", "type": "int16", "versions": "0+",
        "about": "The error code, or 0 if we were able to successfully describe the configurations." },
      { "name": "ErrorMessage", "type": "string", "versions": "0+", "nullableVersions": "0+",
        "about": "The error message, or null if we were able to successfully describe the configurations." },
      { "name": "ResourceType", "type": "int8", "versions": "0+",
        "about": "The resource type." },
      { "name": "ResourceName", "type": "string", "versions": "0+",
        "about": "The resource name." },
      { "name": "Configs", "type": "[]DescribeConfigsResourceResult", "versions": "0+",
        "about": "Each listed configuration.", "fields": [
        { "name": "Name", "type": "string", "versions": "0+",
          "about": "The configuration name." },
        { "name": "Value", "type": "string", "versions": "0+", "nullableVersions": "0+",
          "about": "The configuration value." },
        { "name": "ReadOnly", "type": "bool", "versions": "0+",
          "about": "True if the configuration is read-only." },
        { "name": "IsDefault", "type": "bool", "versions": "0",
          "about": "True if the configuration is not set." },
        // Note: the v0 default for this field that should be exposed to callers is
        // context-dependent. For example, if the resource is a broker, this should default to 4.
        // -1 is just a placeholder value.
        { "name": "ConfigSource", "type": "int8", "versions": "1+", "default": "-1", "ignorable": true,
          "about": "The configuration source." },
        { "name": "IsSensitive", "type": "bool", "versions": "0+",
          "about": "True if this configuration is sensitive." },
        { "name": "Synonyms", "type": "[]DescribeConfigsSynonym", "versions": "1+", "ignorable": true,
          "about": "The synonyms for this configuration key.", "fields": [
          { "name": "Name", "type": "string", "versions": "1+",
            "about": "The synonym name." },
          { "name": "Value", "type": "string", "versions": "1+", "nullableVersions": "0+",
            "about": "The synonym value." },
          { "name": "Source", "type": "int8", "versions": "1+",
            "about": "The synonym source." }
        ]},
<--- Start of new Fields
        { "name": "ConfigValueType", "type": "int8", "versions": "3+", default": "0",     <--- New Field
          "about": "The configuration data type."},
        { "name": "Documentation", "type": "string", "versions": "3+", "nullableVersions": "0+",    <--- New Field
          "about": "The configuration documentation." },
<---- End of new Fields
      ]}
    ]}
  ]
}

AdminClient Class

...

Under the proposed change, response for AdminClient.describeConfigs would include following new properties. These new properties , which would be part of DescribeConfigsResponse.ConfigEntry class.

  1.  Type: ConfigType - This is an Enum of all the supported data type.

    Code Block
    /**
     * Data type of configuration entry.
    */
    public enum ConfigType {
       UNKNOWN,  
       BOOLEAN,
       STRING,
       INT,
       SHORT,
       LONG,
       DOUBLE,
       LIST,
       CLASS,
       PASSWORD
    }


    ConfigType.Unknown is for ensuring backward compatibility (explained is Compatibility section below)/

    The values in above Enum are is derived from existing Type Enum defined in ConfigDef.java below

    Code Block
     /**
     * The config types
     */
     public enum Type {
       BOOLEAN, STRING, INT, SHORT, LONG, DOUBLE, LIST, CLASS, PASSWORD
     }


...

By default, the new fields would not be included in the response to describeConfigs. This is to avoid the response from boating up as the value for documentation field can be quite large.

Below example shows how client can include the new fields in the response

Code Block
titleExample
KafkaAdminClient.describeConfigs(
  resources,
  new DescribeConfigsOptions()
       .includeSynonyms(true)
       .includeType(true)
       .includeDocumentation(true)
)


Compatibility, Deprecation, and Migration Plan

For backward compatibility we rely on existing schema versioning technique. Under this, client sends its version information in the request header. This in turn is used on the server to select the schema for that version.


Server versionClient versionExpected Behavior
1XXBoth Type and Documentation is visible to the client.
2XX-1

Type and Documentation are not visible to the client.

Not serialized as part of the response.

3X-1XIllegalArgumentException: Invalid version for API key...
4X+1X

Both Type and Documentation is visible to the client.

If version X+1 has new value in enum ConfigType, client would get ConfigType.Unknown instead for that new value.


Rejected Alternatives

NA