[ 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)