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

Reply via email to