You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2022/03/16 01:18:36 UTC

[james-project] 06/11: [PERF] MDCBuilder: optimize when 'flat'

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

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit 6eba4337a6ba6e44366ce0648c9349a23fa54e8d
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Fri Mar 11 09:16:58 2022 +0700

    [PERF] MDCBuilder: optimize when 'flat'
    
    Most of our MDCs are 'flat', without nesting other MDC builders, yet
    in MDC builder we keep an additional ImmutableMap builder to handle
    nested elements even when it is 'flat'.
    
    When flat building directly this MDC internals result in a 50% gain.
    
    The memory James server spend 20% of its time building MDCs...
---
 .../util/src/main/java/org/apache/james/util/MDCBuilder.java   | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/server/container/util/src/main/java/org/apache/james/util/MDCBuilder.java b/server/container/util/src/main/java/org/apache/james/util/MDCBuilder.java
index 4e86ecc..bff52f2 100644
--- a/server/container/util/src/main/java/org/apache/james/util/MDCBuilder.java
+++ b/server/container/util/src/main/java/org/apache/james/util/MDCBuilder.java
@@ -146,11 +146,13 @@ public class MDCBuilder {
 
     @VisibleForTesting
     Map<String, String> buildContextMap() {
-        ImmutableMap.Builder<String, String> result = ImmutableMap.builder();
-
-        nestedBuilder.build()
-            .forEach(mdcBuilder -> result.putAll(mdcBuilder.buildContextMap()));
+        ImmutableList<MDCBuilder> nested = nestedBuilder.build();
+        if (nested.isEmpty()) {
+            return contextMap.build();
+        }
 
+        ImmutableMap.Builder<String, String> result = ImmutableMap.builder();
+        nested.forEach(mdcBuilder -> result.putAll(mdcBuilder.buildContextMap()));
         return result
             .putAll(contextMap.build())
             .build();

---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org