You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by bt...@apache.org on 2020/06/24 10:57:17 UTC
[james-project] 02/07: JAMES-3263 Optimize
RecipientRewriteTable::getMappingsForType
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 a6d4c7f443f6338e7697908c8102e3e34752ddc9
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Tue Jun 23 10:05:03 2020 +0700
JAMES-3263 Optimize RecipientRewriteTable::getMappingsForType
The heavy use of intermediate objects did lead to unoptimized execution.
This change-set unlocks a x100 performance improvement for memory micro benchmarks with 10.000 entries.
Here is the micro benchmark code snipset:
```
@Test
public void test() throws Exception {
AbstractRecipientRewriteTable recipientRewriteTable = getRecipientRewriteTable();
IntStream.range(0, 10000)
.forEach(Throwing.intConsumer(i -> recipientRewriteTable
.addMapping(
MappingSource.fromUser("bob" + i, SUPPORTED_DOMAIN),
Mapping.alias("bob-alias" + i + "@" + SUPPORTED_DOMAIN))));
for (int i = 0; i < 10; i++) {
System.out.println("Warmup " + i);
recipientRewriteTable.getMappingsForType(Mapping.Type.Alias).collect(Guavate.toImmutableList());
}
for (int i = 0; i < 10; i++) {
Stopwatch started = Stopwatch.createStarted();
recipientRewriteTable.getMappingsForType(Mapping.Type.Alias).collect(Guavate.toImmutableList());
System.out.println(started.elapsed(TimeUnit.MILLISECONDS));
}
}
```
---
.../java/org/apache/james/rrt/api/RecipientRewriteTable.java | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTable.java b/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTable.java
index be173e9..e7506b2 100644
--- a/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTable.java
+++ b/server/data/data-api/src/main/java/org/apache/james/rrt/api/RecipientRewriteTable.java
@@ -30,7 +30,6 @@ import org.apache.james.rrt.lib.Mappings;
import org.apache.james.rrt.lib.MappingsImpl;
import com.google.common.base.Preconditions;
-import com.google.common.collect.ImmutableSet;
/**
* Interface which should be implemented of classes which map recipients.
@@ -148,12 +147,13 @@ public interface RecipientRewriteTable {
}
default Stream<Mapping> getMappingsForType(Mapping.Type type) throws RecipientRewriteTableException {
- return ImmutableSet.copyOf(getAllMappings()
+ return getAllMappings()
.values().stream()
.map(mappings -> mappings.select(type))
- .reduce(Mappings::union)
- .orElse(MappingsImpl.empty()))
- .stream();
+ .reduce(MappingsImpl.builder(), MappingsImpl.Builder::addAll, (builder1, builder2) -> builder1.addAll(builder2.build()))
+ .build()
+ .asStream()
+ .distinct();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org