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]

Reply via email to