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 2018/01/26 01:13:54 UTC

[10/10] james-project git commit: JAMES-2317 Simplify code by using a multimap and copy the result of get to handle concurrency

JAMES-2317 Simplify code by using a multimap and copy the result of get to handle concurrency


Project: http://git-wip-us.apache.org/repos/asf/james-project/repo
Commit: http://git-wip-us.apache.org/repos/asf/james-project/commit/866d09e2
Tree: http://git-wip-us.apache.org/repos/asf/james-project/tree/866d09e2
Diff: http://git-wip-us.apache.org/repos/asf/james-project/diff/866d09e2

Branch: refs/heads/master
Commit: 866d09e2424c813cb7f6b643556d2ef45762f1fc
Parents: f9df417
Author: Raphael Ouazana <ra...@linagora.com>
Authored: Thu Jan 25 17:32:00 2018 +0100
Committer: benwa <bt...@linagora.com>
Committed: Fri Jan 26 08:12:21 2018 +0700

----------------------------------------------------------------------
 .../user/InMemorySubscriptionMapper.java        | 36 ++++++--------------
 1 file changed, 10 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/james-project/blob/866d09e2/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java
----------------------------------------------------------------------
diff --git a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java
index 7ef4d62..48679ea 100644
--- a/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java
+++ b/mailbox/memory/src/main/java/org/apache/james/mailbox/inmemory/user/InMemorySubscriptionMapper.java
@@ -18,36 +18,31 @@
  ****************************************************************/
 package org.apache.james.mailbox.inmemory.user;
 
-import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.james.mailbox.store.transaction.NonTransactionalMapper;
 import org.apache.james.mailbox.store.user.SubscriptionMapper;
 import org.apache.james.mailbox.store.user.model.Subscription;
 
+import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ListMultimap;
+import com.google.common.collect.Multimaps;
 
 public class InMemorySubscriptionMapper extends NonTransactionalMapper implements SubscriptionMapper {
     
-    private static final int INITIAL_SIZE = 64;
-    private final Map<String, List<Subscription>> subscriptionsByUser;
+    private final ListMultimap<String, Subscription> subscriptionsByUser;
     
     public InMemorySubscriptionMapper() {
-        subscriptionsByUser = new ConcurrentHashMap<>(INITIAL_SIZE);
+        subscriptionsByUser = Multimaps.synchronizedListMultimap(ArrayListMultimap.create());
     }
 
     public synchronized void delete(Subscription subscription) {
-        final String user = subscription.getUser();
-        final List<Subscription> subscriptions = subscriptionsByUser.get(user);
-        if (subscriptions != null) {
-            subscriptions.remove(subscription);
-        }
+        subscriptionsByUser.remove(subscription.getUser(), subscription);
     }
 
     public Subscription findMailboxSubscriptionForUser(String user, String mailbox) {
-        final List<Subscription> subscriptions = subscriptionsByUser.get(user);
+        final List<Subscription> subscriptions = ImmutableList.copyOf(subscriptionsByUser.get(user));
         if (subscriptions != null) {
             return subscriptions.stream()
                 .filter(subscription -> subscription.getMailbox().equals(mailbox))
@@ -59,25 +54,14 @@ public class InMemorySubscriptionMapper extends NonTransactionalMapper implement
 
     public List<Subscription> findSubscriptionsForUser(String user) {
         final List<Subscription> subcriptions = subscriptionsByUser.get(user);
-        final List<Subscription> results;
         if (subcriptions == null) {
-            results = ImmutableList.of();
-        } else {
-            results = ImmutableList.copyOf(subcriptions);
+            return ImmutableList.of();
         }
-        return results;
+        return ImmutableList.copyOf(subcriptions);
     }
 
     public synchronized void save(Subscription subscription) {
-        final String user = subscription.getUser();
-        final List<Subscription> subscriptions = subscriptionsByUser.get(user);
-        if (subscriptions == null) {
-            final List<Subscription> newSubscriptions  = new ArrayList<>();
-            newSubscriptions.add(subscription);
-            subscriptionsByUser.put(user, newSubscriptions);
-        } else {
-            subscriptions.add(subscription);
-        }
+        subscriptionsByUser.put(subscription.getUser(), subscription);
     }
     
     public void deleteAll() {


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