This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
commit b31af5de85260b5764565276ee801bb412e13337 Author: Claus Ibsen <[email protected]> AuthorDate: Fri Aug 14 15:55:15 2026 +0200 chore: Avoid DNS resolution in YAML DSL resolver URL deduplication URL.hashCode()/equals() trigger DNS lookups which caused a 30-second hang during test shutdown and 5-second slowdown per resolver discovery. Use URI for deduplication instead which does pure string comparison. Co-Authored-By: Claude Opus 4.6 (1M context) <[email protected]> Signed-off-by: Claus Ibsen <[email protected]> --- .../DefaultYamlDeserializerResolverProvider.java | 34 ++++++++++++++++------ 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/DefaultYamlDeserializerResolverProvider.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/DefaultYamlDeserializerResolverProvider.java index cf55c4bd6343..be237054cd3e 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/DefaultYamlDeserializerResolverProvider.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-common/src/main/java/org/apache/camel/dsl/yaml/common/DefaultYamlDeserializerResolverProvider.java @@ -19,6 +19,8 @@ package org.apache.camel.dsl.yaml.common; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; +import java.net.URI; +import java.net.URISyntaxException; import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.ArrayList; @@ -107,15 +109,17 @@ public class DefaultYamlDeserializerResolverProvider implements YamlDeserializer return uncommentedLine.trim(); } - private Set<URL> findResolverResources(CamelContext camelContext) { - Set<URL> resolverResources = new LinkedHashSet<>(); + private List<URL> findResolverResources(CamelContext camelContext) { + // Use URI for deduplication — URL.hashCode()/equals() trigger DNS resolution + Set<URI> seen = new LinkedHashSet<>(); + List<URL> resolverResources = new ArrayList<>(); try { - addResolverResources(resolverResources, + addResolverResources(seen, resolverResources, camelContext.getClassResolver().loadAllResourcesAsURL(YamlDeserializerResolver.RESOURCE_PATH)); - addResolverResources(resolverResources, camelContext.getApplicationContextClassLoader()); + addResolverResources(seen, resolverResources, camelContext.getApplicationContextClassLoader()); for (ClassLoader classLoader : camelContext.getClassResolver().getClassLoaders()) { - addResolverResources(resolverResources, classLoader); + addResolverResources(seen, resolverResources, classLoader); } } catch (IOException e) { throw new YamlDeserializationException( @@ -125,16 +129,28 @@ public class DefaultYamlDeserializerResolverProvider implements YamlDeserializer return resolverResources; } - private static void addResolverResources(Set<URL> resolverResources, ClassLoader classLoader) throws IOException { + private static void addResolverResources(Set<URI> seen, List<URL> resolverResources, ClassLoader classLoader) + throws IOException { if (classLoader != null) { - addResolverResources(resolverResources, classLoader.getResources(YamlDeserializerResolver.RESOURCE_PATH)); + addResolverResources(seen, resolverResources, + classLoader.getResources(YamlDeserializerResolver.RESOURCE_PATH)); } } - private static void addResolverResources(Set<URL> resolverResources, Enumeration<URL> resources) { + private static void addResolverResources(Set<URI> seen, List<URL> resolverResources, Enumeration<URL> resources) { if (resources != null) { while (resources.hasMoreElements()) { - resolverResources.add(resources.nextElement()); + URL url = resources.nextElement(); + try { + if (seen.add(url.toURI())) { + resolverResources.add(url); + } + } catch (URISyntaxException e) { + // URI conversion failed — fall back to string comparison + if (seen.add(URI.create(url.toExternalForm()))) { + resolverResources.add(url); + } + } } } }
