This is an automated email from the ASF dual-hosted git repository. rcordier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit f9f3b2232da0d4bcaabbc5df43ad59d4d8bc2f4d Author: Benoit Tellier <[email protected]> AuthorDate: Mon Apr 26 22:38:11 2021 +0700 JAMES-3467 Avoid loading all domains for auto-detection when auto-detection is off AbstractDomainList::getDomainsWithType provides DomainType.Internal covered by the containsDomainInternal method, DomainType.DefaultDomain whih is always added internally upon configure, DomainType.Detected only added if autoDetect is true and DomainType.DetectedIp if autoDetectIp is true. Given that default domain is added internally upon configure and only autoDetection is mutale (as it depends on DNS context), when there is no auto-detection, we can only rely on internal domain list, and dont need to perform a full listing upon contains. --- .../org/apache/james/domainlist/lib/AbstractDomainList.java | 11 +++++++++-- .../james/mailetcontainer/impl/JamesMailetContextTest.java | 4 ++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/server/data/data-library/src/main/java/org/apache/james/domainlist/lib/AbstractDomainList.java b/server/data/data-library/src/main/java/org/apache/james/domainlist/lib/AbstractDomainList.java index 4053a73..2a19598 100644 --- a/server/data/data-library/src/main/java/org/apache/james/domainlist/lib/AbstractDomainList.java +++ b/server/data/data-library/src/main/java/org/apache/james/domainlist/lib/AbstractDomainList.java @@ -170,7 +170,7 @@ public abstract class AbstractDomainList implements DomainList, Configurable { if (configuration.isCacheEnabled()) { try { boolean internalAnswer = cache.get(domain); - return internalAnswer || getDomains().contains(domain); + return internalAnswer || detectedDomainsContains(domain); } catch (ExecutionException e) { if (e.getCause() instanceof DomainListException) { throw (DomainListException) e.getCause(); @@ -179,10 +179,17 @@ public abstract class AbstractDomainList implements DomainList, Configurable { } } else { boolean internalAnswer = containsDomainInternal(domain); - return internalAnswer || getDomains().contains(domain); + return internalAnswer || detectedDomainsContains(domain); } } + private boolean detectedDomainsContains(Domain domain) throws DomainListException { + if (configuration.isAutoDetect() || configuration.isAutoDetectIp()) { + return getDomains().contains(domain); + } + return false; + } + @Override public ImmutableList<Domain> getDomains() throws DomainListException { Multimap<DomainType, Domain> domainsWithType = getDomainsWithType(); diff --git a/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java b/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java index de64fc2..92d7bfa 100644 --- a/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java +++ b/server/mailet/mailetcontainer-camel/src/test/java/org/apache/james/mailetcontainer/impl/JamesMailetContextTest.java @@ -108,7 +108,7 @@ class JamesMailetContextTest { @Test void isLocalServerShouldPropagateDomainExceptions() throws Exception { - when(domainList.getDomains()).thenThrow(new DomainListException("fail!")); + when(domainList.containsDomain(any())).thenThrow(new DomainListException("fail!")); assertThatThrownBy(() -> testee.isLocalServer(DOMAIN_COM)) .isInstanceOf(RuntimeException.class); @@ -249,7 +249,7 @@ class JamesMailetContextTest { @Test void isLocalEmailShouldPropagateDomainExceptions() throws Exception { - when(domainList.getDomains()).thenThrow(new DomainListException("fail!")); + when(domainList.containsDomain(any())).thenThrow(new DomainListException("fail!")); assertThatThrownBy(() -> testee.isLocalEmail(mailAddress)) .isInstanceOf(RuntimeException.class); --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
