[ 
https://issues.apache.org/jira/browse/KAFKA-5498?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Gwen Shapira resolved KAFKA-5498.
---------------------------------
       Resolution: Fixed
    Fix Version/s: 0.11.1.0

Issue resolved by pull request 3412
[https://github.com/apache/kafka/pull/3412]

> Connect validation API stops returning recommendations for some fields after 
> the right sequence of requests
> -----------------------------------------------------------------------------------------------------------
>
>                 Key: KAFKA-5498
>                 URL: https://issues.apache.org/jira/browse/KAFKA-5498
>             Project: Kafka
>          Issue Type: Bug
>          Components: KafkaConnect
>            Reporter: Ewen Cheslack-Postava
>            Assignee: Ewen Cheslack-Postava
>             Fix For: 0.11.0.0, 0.11.1.0
>
>   Original Estimate: 24h
>  Remaining Estimate: 24h
>
> If you issue the right sequence of requests against this API, it starts 
> behaving differently, omitting  certain fields (at a minimum recommended 
> values, which is how I noticed this). If you start with
> {code}
> $ curl -X PUT -H "Content-Type: application/json" --data '{"connector.class": 
> "org.apache.kafka.connect.file.FileStreamSourceConnector", "name": "file", 
> "transforms": "foo"}' 
> http://localhost:8083/connector-plugins/org.apache.kafka.connect.file.FileStreamSourceConnector/config/validate
>   | jq
>   % Total    % Received % Xferd  Average Speed   Time    Time     Time  
> Current
>                                  Dload  Upload   Total   Spent    Left  Speed
> 100  5845  100  5730  100   115  36642    735 --:--:-- --:--:-- --:--:-- 36496
> {
>   "name": "org.apache.kafka.connect.file.FileStreamSourceConnector",
>   "error_count": 4,
>   "groups": [
>     "Common",
>     "Transforms",
>     "Transforms: foo"
>   ],
>   "configs": [
>     {
>       "definition": {
>         "name": "name",
>         "type": "STRING",
>         "required": true,
>         "default_value": null,
>         "importance": "HIGH",
>         "documentation": "Globally unique name to use for this connector.",
>         "group": "Common",
>         "width": "MEDIUM",
>         "display_name": "Connector name",
>         "dependents": [],
>         "order": 1
>       },
>       "value": {
>         "name": "name",
>         "value": "file",
>         "recommended_values": [],
>         "errors": [],
>         "visible": true
>       }
>     },
>     {
>       "definition": {
>         "name": "connector.class",
>         "type": "STRING",
>         "required": true,
>         "default_value": null,
>         "importance": "HIGH",
>         "documentation": "Name or alias of the class for this connector. Must 
> be a subclass of org.apache.kafka.connect.connector.Connector. If the 
> connector is org.apache.kafka.connect.file.FileStreamSinkConnector, you can 
> either specify this full name,  or use \"FileStreamSink\" or 
> \"FileStreamSinkConnector\" to make the configuration a bit shorter",
>         "group": "Common",
>         "width": "LONG",
>         "display_name": "Connector class",
>         "dependents": [],
>         "order": 2
>       },
>       "value": {
>         "name": "connector.class",
>         "value": "org.apache.kafka.connect.file.FileStreamSourceConnector",
>         "recommended_values": [],
>         "errors": [],
>         "visible": true
>       }
>     },
>     {
>       "definition": {
>         "name": "tasks.max",
>         "type": "INT",
>         "required": false,
>         "default_value": "1",
>         "importance": "HIGH",
>         "documentation": "Maximum number of tasks to use for this connector.",
>         "group": "Common",
>         "width": "SHORT",
>         "display_name": "Tasks max",
>         "dependents": [],
>         "order": 3
>       },
>       "value": {
>         "name": "tasks.max",
>         "value": "1",
>         "recommended_values": [],
>         "errors": [],
>         "visible": true
>       }
>     },
>     {
>       "definition": {
>         "name": "key.converter",
>         "type": "CLASS",
>         "required": false,
>         "default_value": null,
>         "importance": "LOW",
>         "documentation": "Converter class used to convert between Kafka 
> Connect format and the serialized form that is written to Kafka. This 
> controls the format of the keys in messages written to or read from Kafka, 
> and since this is independent of connectors it allows any connector to work 
> with any serialization format. Examples of common formats include JSON and 
> Avro.",
>         "group": "Common",
>         "width": "SHORT",
>         "display_name": "Key converter class",
>         "dependents": [],
>         "order": 4
>       },
>       "value": {
>         "name": "key.converter",
>         "value": null,
>         "recommended_values": [],
>         "errors": [],
>         "visible": true
>       }
>     },
>     {
>       "definition": {
>         "name": "value.converter",
>         "type": "CLASS",
>         "required": false,
>         "default_value": null,
>         "importance": "LOW",
>         "documentation": "Converter class used to convert between Kafka 
> Connect format and the serialized form that is written to Kafka. This 
> controls the format of the values in messages written to or read from Kafka, 
> and since this is independent of connectors it allows any connector to work 
> with any serialization format. Examples of common formats include JSON and 
> Avro.",
>         "group": "Common",
>         "width": "SHORT",
>         "display_name": "Value converter class",
>         "dependents": [],
>         "order": 5
>       },
>       "value": {
>         "name": "value.converter",
>         "value": null,
>         "recommended_values": [],
>         "errors": [],
>         "visible": true
>       }
>     },
>     {
>       "definition": {
>         "name": "transforms",
>         "type": "LIST",
>         "required": false,
>         "default_value": null,
>         "importance": "LOW",
>         "documentation": "Aliases for the transformations to be applied to 
> records.",
>         "group": "Transforms",
>         "width": "LONG",
>         "display_name": "Transforms",
>         "dependents": [],
>         "order": 6
>       },
>       "value": {
>         "name": "transforms",
>         "value": "foo",
>         "recommended_values": [],
>         "errors": [],
>         "visible": true
>       }
>     },
>     {
>       "definition": {
>         "name": "transforms.foo.type",
>         "type": "CLASS",
>         "required": true,
>         "default_value": null,
>         "importance": "HIGH",
>         "documentation": "Class for the 'foo' transformation.",
>         "group": "Transforms: foo",
>         "width": "LONG",
>         "display_name": "Transformation type for foo",
>         "dependents": [],
>         "order": 0
>       },
>       "value": {
>         "name": "transforms.foo.type",
>         "value": null,
>         "recommended_values": [
>           "org.apache.kafka.connect.transforms.Cast$Key",
>           "org.apache.kafka.connect.transforms.Cast$Value",
>           "org.apache.kafka.connect.transforms.ExtractField$Key",
>           "org.apache.kafka.connect.transforms.ExtractField$Value",
>           "org.apache.kafka.connect.transforms.Flatten$Key",
>           "org.apache.kafka.connect.transforms.Flatten$Value",
>           "org.apache.kafka.connect.transforms.HoistField$Key",
>           "org.apache.kafka.connect.transforms.HoistField$Value",
>           "org.apache.kafka.connect.transforms.InsertField$Key",
>           "org.apache.kafka.connect.transforms.InsertField$Value",
>           "org.apache.kafka.connect.transforms.MaskField$Key",
>           "org.apache.kafka.connect.transforms.MaskField$Value",
>           "org.apache.kafka.connect.transforms.RegexRouter",
>           "org.apache.kafka.connect.transforms.ReplaceField$Key",
>           "org.apache.kafka.connect.transforms.ReplaceField$Value",
>           "org.apache.kafka.connect.transforms.SetSchemaMetadata$Key",
>           "org.apache.kafka.connect.transforms.SetSchemaMetadata$Value",
>           "org.apache.kafka.connect.transforms.TimestampConverter$Key",
>           "org.apache.kafka.connect.transforms.TimestampConverter$Value",
>           "org.apache.kafka.connect.transforms.TimestampRouter",
>           "org.apache.kafka.connect.transforms.ValueToKey"
>         ],
>         "errors": [
>           "Missing required configuration \"transforms.foo.type\" which has 
> no default value.",
>           "Invalid value null for configuration transforms.foo.type: Not a 
> Transformation"
>         ],
>         "visible": true
>       }
>     },
>     {
>       "definition": {
>         "name": "file",
>         "type": "STRING",
>         "required": true,
>         "default_value": null,
>         "importance": "HIGH",
>         "documentation": "Source filename.",
>         "group": null,
>         "width": "NONE",
>         "display_name": "file",
>         "dependents": [],
>         "order": -1
>       },
>       "value": {
>         "name": "file",
>         "value": null,
>         "recommended_values": [],
>         "errors": [
>           "Missing required configuration \"file\" which has no default 
> value."
>         ],
>         "visible": true
>       }
>     },
>     {
>       "definition": {
>         "name": "topic",
>         "type": "STRING",
>         "required": true,
>         "default_value": null,
>         "importance": "HIGH",
>         "documentation": "The topic to publish data to",
>         "group": null,
>         "width": "NONE",
>         "display_name": "topic",
>         "dependents": [],
>         "order": -1
>       },
>       "value": {
>         "name": "topic",
>         "value": null,
>         "recommended_values": [],
>         "errors": [
>           "Missing required configuration \"topic\" which has no default 
> value."
>         ],
>         "visible": true
>       }
>     }
>   ]
> }
> {code}
> You can see that the recommended values for transformations are there. 
> However, if you do
> {code}
> curl -X PUT -H "Content-Type: application/json" --data '{"connector.class": 
> "org.apache.kafka.connect.file.FileStreamSourceConnector", "name": "file"}' 
> http://localhost:8083/connector-plugins/org.apache.kafka.connect.file.FileStreamSourceConnector/config/validate
>   | jq
> {code}
> before that command, the recommended values will not appear.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to