This is an automated email from the ASF dual-hosted git repository.

tombentley pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/kafka.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 5e45196  Add DirectoryConfigProvider to the service provider list 
(#11352)
5e45196 is described below

commit 5e45196fb078e5e211440c70e928a23aa45f9d48
Author: Jakub Scholz <w...@scholzj.com>
AuthorDate: Tue Sep 28 08:22:42 2021 +0200

    Add DirectoryConfigProvider to the service provider list (#11352)
    
    * Add DirectoryConfigProvider to the service provider list
    
    Reviewers: Chris Egerton <chr...@confluent.io>, Tom Bentley 
<tbent...@redhat.com>
---
 .../org/apache/kafka/common/config/provider/ConfigProvider.java   | 2 ++
 .../org.apache.kafka.common.config.provider.ConfigProvider        | 1 +
 .../kafka/common/config/provider/DirectoryConfigProviderTest.java | 8 ++++++++
 .../kafka/common/config/provider/FileConfigProviderTest.java      | 8 ++++++++
 4 files changed, 19 insertions(+)

diff --git 
a/clients/src/main/java/org/apache/kafka/common/config/provider/ConfigProvider.java
 
b/clients/src/main/java/org/apache/kafka/common/config/provider/ConfigProvider.java
index fe65ddf..035bcbc 100644
--- 
a/clients/src/main/java/org/apache/kafka/common/config/provider/ConfigProvider.java
+++ 
b/clients/src/main/java/org/apache/kafka/common/config/provider/ConfigProvider.java
@@ -26,6 +26,8 @@ import java.util.Set;
 /**
  * A provider of configuration data, which may optionally support 
subscriptions to configuration changes.
  * Implementations are required to safely support concurrent calls to any of 
the methods in this interface.
+ * Kafka Connect discovers configuration providers using Java's Service 
Provider mechanism (see {@code java.util.ServiceLoader}).
+ * To support this, implementations of this interface should also contain a 
service provider configuration file in {@code  
META-INF/service/org.apache.kafka.common.config.provider.ConfigProvider}.
  */
 public interface ConfigProvider extends Configurable, Closeable {
 
diff --git 
a/clients/src/main/resources/META-INF/services/org.apache.kafka.common.config.provider.ConfigProvider
 
b/clients/src/main/resources/META-INF/services/org.apache.kafka.common.config.provider.ConfigProvider
index 146de7a..409080f 100644
--- 
a/clients/src/main/resources/META-INF/services/org.apache.kafka.common.config.provider.ConfigProvider
+++ 
b/clients/src/main/resources/META-INF/services/org.apache.kafka.common.config.provider.ConfigProvider
@@ -14,3 +14,4 @@
  # limitations under the License.
 
 org.apache.kafka.common.config.provider.FileConfigProvider
+org.apache.kafka.common.config.provider.DirectoryConfigProvider
diff --git 
a/clients/src/test/java/org/apache/kafka/common/config/provider/DirectoryConfigProviderTest.java
 
b/clients/src/test/java/org/apache/kafka/common/config/provider/DirectoryConfigProviderTest.java
index 52ef3a0..7cf5422 100644
--- 
a/clients/src/test/java/org/apache/kafka/common/config/provider/DirectoryConfigProviderTest.java
+++ 
b/clients/src/test/java/org/apache/kafka/common/config/provider/DirectoryConfigProviderTest.java
@@ -29,7 +29,9 @@ import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.util.Collections;
 import java.util.Locale;
+import java.util.ServiceLoader;
 import java.util.Set;
+import java.util.stream.StreamSupport;
 
 import static java.util.Arrays.asList;
 import static org.apache.kafka.test.TestUtils.toSet;
@@ -145,5 +147,11 @@ public class DirectoryConfigProviderTest {
         assertTrue(configData.data().isEmpty());
         assertNull(configData.ttl());
     }
+
+    @Test
+    public void testServiceLoaderDiscovery() {
+        ServiceLoader<ConfigProvider> serviceLoader = 
ServiceLoader.load(ConfigProvider.class);
+        assertTrue(StreamSupport.stream(serviceLoader.spliterator(), 
false).anyMatch(configProvider -> configProvider instanceof 
DirectoryConfigProvider));
+    }
 }
 
diff --git 
a/clients/src/test/java/org/apache/kafka/common/config/provider/FileConfigProviderTest.java
 
b/clients/src/test/java/org/apache/kafka/common/config/provider/FileConfigProviderTest.java
index e56830a..431f382 100644
--- 
a/clients/src/test/java/org/apache/kafka/common/config/provider/FileConfigProviderTest.java
+++ 
b/clients/src/test/java/org/apache/kafka/common/config/provider/FileConfigProviderTest.java
@@ -26,6 +26,8 @@ import java.io.StringReader;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.ServiceLoader;
+import java.util.stream.StreamSupport;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
@@ -87,6 +89,12 @@ public class FileConfigProviderTest {
         assertNull(configData.ttl());
     }
 
+    @Test
+    public void testServiceLoaderDiscovery() {
+        ServiceLoader<ConfigProvider> serviceLoader = 
ServiceLoader.load(ConfigProvider.class);
+        assertTrue(StreamSupport.stream(serviceLoader.spliterator(), 
false).anyMatch(configProvider -> configProvider instanceof 
FileConfigProvider));
+    }
+
     public static class TestFileConfigProvider extends FileConfigProvider {
 
         @Override

Reply via email to