[ https://issues.apache.org/jira/browse/KAFKA-9560?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Kalpesh Patel updated KAFKA-9560: --------------------------------- Description: Requests to the {{PUT /connector-plugins/\{connectorType}/config/validate}} endpoint are [delegated to the herder|https://github.com/apache/kafka/blob/16ee326755e3f13914a0ed446c34c84e65fc0bc4/connect/runtime/src/main/java/org/apache/kafka/connect/runtime/rest/resources/ConnectorPluginsResource.java#L81], which [caches connector instances|https://github.com/apache/kafka/blob/16ee326755e3f13914a0ed446c34c84e65fc0bc4/connect/runtime/src/main/java/org/apache/kafka/connect/runtime/AbstractHerder.java#L536-L544] that are used [during config validation|https://github.com/apache/kafka/blob/16ee326755e3f13914a0ed446c34c84e65fc0bc4/connect/runtime/src/main/java/org/apache/kafka/connect/runtime/AbstractHerder.java#L310]. This has the effect that, should concurrent requests to that endpoint occur for the same connector type, the same connector instance may be responsible for [validating those configurations|https://github.com/apache/kafka/blob/16ee326755e3f13914a0ed446c34c84e65fc0bc4/connect/runtime/src/main/java/org/apache/kafka/connect/runtime/AbstractHerder.java#L334] concurrently _(may_ instead of _will_ because there is also a race condition in the {{AbstractHerder::getConnector}} method that potentially fails to detect that an instance of the connector has already been created and, as a result, creates a second instance KAFKA-12704). This is slightly problematic because the [Connector::validate|https://github.com/apache/kafka/blob/16ee326755e3f13914a0ed446c34c84e65fc0bc4/connect/api/src/main/java/org/apache/kafka/connect/connector/Connector.java#L122-L127] method is not marked as thread-safe. However, because a lot of connectors out there tend to use the default implementation for that method, it's probably not super urgent that we patch this immediately. A couple of options are: # Update the docs for that method to specify that it must be thread-safe # Rewrite the connector validation logic in the framework to avoid concurrently invoking {{Connector::validate}} on the same instance. was: Requests to the {{PUT /connector-plugins/\{connectorType}/config/validate}} endpoint are [delegated to the herder|https://github.com/apache/kafka/blob/16ee326755e3f13914a0ed446c34c84e65fc0bc4/connect/runtime/src/main/java/org/apache/kafka/connect/runtime/rest/resources/ConnectorPluginsResource.java#L81], which [caches connector instances|https://github.com/apache/kafka/blob/16ee326755e3f13914a0ed446c34c84e65fc0bc4/connect/runtime/src/main/java/org/apache/kafka/connect/runtime/AbstractHerder.java#L536-L544] that are used [during config validation|https://github.com/apache/kafka/blob/16ee326755e3f13914a0ed446c34c84e65fc0bc4/connect/runtime/src/main/java/org/apache/kafka/connect/runtime/AbstractHerder.java#L310]. This has the effect that, should concurrent requests to that endpoint occur for the same connector type, the same connector instance may be responsible for [validating those configurations|https://github.com/apache/kafka/blob/16ee326755e3f13914a0ed446c34c84e65fc0bc4/connect/runtime/src/main/java/org/apache/kafka/connect/runtime/AbstractHerder.java#L334] concurrently _(may_ instead of _will_ because there is also a race condition in the {{AbstractHerder::getConnector}} method that potentially fails to detect that an instance of the connector has already been created and, as a result, creates a second instance). This is slightly problematic because the [Connector::validate|https://github.com/apache/kafka/blob/16ee326755e3f13914a0ed446c34c84e65fc0bc4/connect/api/src/main/java/org/apache/kafka/connect/connector/Connector.java#L122-L127] method is not marked as thread-safe. However, because a lot of connectors out there tend to use the default implementation for that method, it's probably not super urgent that we patch this immediately. A couple of options are: # Update the docs for that method to specify that it must be thread-safe # Rewrite the connector validation logic in the framework to avoid concurrently invoking {{Connector::validate}} on the same instance. > Connector::validate is utilized concurrently by the framework, but not > documented as thread-safe > ------------------------------------------------------------------------------------------------ > > Key: KAFKA-9560 > URL: https://issues.apache.org/jira/browse/KAFKA-9560 > Project: Kafka > Issue Type: Bug > Components: KafkaConnect > Reporter: Chris Egerton > Priority: Minor > > Requests to the {{PUT /connector-plugins/\{connectorType}/config/validate}} > endpoint are [delegated to the > herder|https://github.com/apache/kafka/blob/16ee326755e3f13914a0ed446c34c84e65fc0bc4/connect/runtime/src/main/java/org/apache/kafka/connect/runtime/rest/resources/ConnectorPluginsResource.java#L81], > which [caches connector > instances|https://github.com/apache/kafka/blob/16ee326755e3f13914a0ed446c34c84e65fc0bc4/connect/runtime/src/main/java/org/apache/kafka/connect/runtime/AbstractHerder.java#L536-L544] > that are used [during config > validation|https://github.com/apache/kafka/blob/16ee326755e3f13914a0ed446c34c84e65fc0bc4/connect/runtime/src/main/java/org/apache/kafka/connect/runtime/AbstractHerder.java#L310]. > This has the effect that, should concurrent requests to that endpoint occur > for the same connector type, the same connector instance may be responsible > for [validating those > configurations|https://github.com/apache/kafka/blob/16ee326755e3f13914a0ed446c34c84e65fc0bc4/connect/runtime/src/main/java/org/apache/kafka/connect/runtime/AbstractHerder.java#L334] > concurrently _(may_ instead of _will_ because there is also a race condition > in the {{AbstractHerder::getConnector}} method that potentially fails to > detect that an instance of the connector has already been created and, as a > result, creates a second instance KAFKA-12704). > This is slightly problematic because the > [Connector::validate|https://github.com/apache/kafka/blob/16ee326755e3f13914a0ed446c34c84e65fc0bc4/connect/api/src/main/java/org/apache/kafka/connect/connector/Connector.java#L122-L127] > method is not marked as thread-safe. However, because a lot of connectors > out there tend to use the default implementation for that method, it's > probably not super urgent that we patch this immediately. > A couple of options are: > # Update the docs for that method to specify that it must be thread-safe > # Rewrite the connector validation logic in the framework to avoid > concurrently invoking {{Connector::validate}} on the same instance. -- This message was sent by Atlassian Jira (v8.3.4#803005)