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 2019/11/21 02:00:41 UTC

[james-project] 06/13: [Refactoring] Get rid of AbstractMailboxPathLocker

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

View the commit online:
https://github.com/apache/james-project/commit/33d2a5be942868862268c567b53661a467d68dd3

commit 33d2a5be942868862268c567b53661a467d68dd3
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Nov 18 17:49:35 2019 +0700

    [Refactoring] Get rid of AbstractMailboxPathLocker
---
 .../mailbox/store/AbstractMailboxPathLocker.java   | 54 ----------------------
 .../james/mailbox/store/JVMMailboxPathLocker.java  | 28 +++++++----
 .../james/mailbox/store/NoMailboxPathLocker.java   | 14 +++---
 3 files changed, 24 insertions(+), 72 deletions(-)

diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/AbstractMailboxPathLocker.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/AbstractMailboxPathLocker.java
deleted file mode 100644
index 13a61a8..0000000
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/AbstractMailboxPathLocker.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/****************************************************************
- * Licensed to the Apache Software Foundation (ASF) under one   *
- * or more contributor license agreements.  See the NOTICE file *
- * distributed with this work for additional information        *
- * regarding copyright ownership.  The ASF licenses this file   *
- * to you under the Apache License, Version 2.0 (the            *
- * "License"); you may not use this file except in compliance   *
- * with the License.  You may obtain a copy of the License at   *
- *                                                              *
- *   http://www.apache.org/licenses/LICENSE-2.0                 *
- *                                                              *
- * Unless required by applicable law or agreed to in writing,   *
- * software distributed under the License is distributed on an  *
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
- * KIND, either express or implied.  See the License for the    *
- * specific language governing permissions and limitations      *
- * under the License.                                           *
- ****************************************************************/
-package org.apache.james.mailbox.store;
-
-import org.apache.james.mailbox.MailboxPathLocker;
-import org.apache.james.mailbox.MailboxSession;
-import org.apache.james.mailbox.exception.MailboxException;
-import org.apache.james.mailbox.model.MailboxPath;
-
-
-public abstract class AbstractMailboxPathLocker implements MailboxPathLocker {
-
-    @Override
-    public <T> T executeWithLock(MailboxSession session, MailboxPath path, LockAwareExecution<T> execution) throws MailboxException {
-        return executeWithLock(session, path, execution, true);
-    }
-    
-    @Override
-    public <T> T executeWithLock(MailboxSession session, MailboxPath path, LockAwareExecution<T> execution, boolean writeLock) throws MailboxException {
-        try {
-            lock(session, path, writeLock);
-            return execution.execute();
-        } finally {
-            unlock(session, path, writeLock);
-        }
-    }
-
-    /**
-     * Perform lock
-     */
-    protected abstract void lock(MailboxSession session, MailboxPath path, boolean writeLock) throws MailboxException;
-
-    /**
-     * Release lock
-     */
-    protected abstract void unlock(MailboxSession session, MailboxPath path, boolean writeLock) throws MailboxException;
-
-}
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/JVMMailboxPathLocker.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/JVMMailboxPathLocker.java
index eadf5f9..b1de0a6 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/JVMMailboxPathLocker.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/JVMMailboxPathLocker.java
@@ -34,13 +34,25 @@ import org.apache.james.mailbox.model.MailboxPath;
  * same MailboxPath. This is done using one {@link ReentrantReadWriteLock}
  * per {@link MailboxPath} so its only usable in a single JVM.
  */
-public final class JVMMailboxPathLocker extends AbstractMailboxPathLocker {
-
+public final class JVMMailboxPathLocker implements MailboxPathLocker {
     private final ConcurrentHashMap<MailboxPath, ReadWriteLock> paths = new ConcurrentHashMap<>();
 
+    @Override
+    public <T> T executeWithLock(MailboxSession session, MailboxPath path, LockAwareExecution<T> execution) throws MailboxException {
+        return executeWithLock(session, path, execution, true);
+    }
 
     @Override
-    protected void lock(MailboxSession session, MailboxPath path, boolean writeLock) throws MailboxException {
+    public <T> T executeWithLock(MailboxSession session, MailboxPath path, LockAwareExecution<T> execution, boolean writeLock) throws MailboxException {
+        try {
+            lock(path, writeLock);
+            return execution.execute();
+        } finally {
+            unlock(path, writeLock);
+        }
+    }
+
+    private void lock(MailboxPath path, boolean writeLock) {
         ReadWriteLock lock = paths.get(path);
         if (lock == null) {
             lock = new ReentrantReadWriteLock();
@@ -52,9 +64,7 @@ public final class JVMMailboxPathLocker extends AbstractMailboxPathLocker {
         getLock(lock, writeLock).lock();
     }
 
-
-    @Override
-    protected void unlock(MailboxSession session, MailboxPath path, boolean writeLock) throws MailboxException {
+    private void unlock(MailboxPath path, boolean writeLock) {
         ReadWriteLock lock = paths.get(path);
 
         if (lock != null) {
@@ -63,12 +73,10 @@ public final class JVMMailboxPathLocker extends AbstractMailboxPathLocker {
     }
 
     private Lock getLock(ReadWriteLock lock, boolean writeLock) {
-        Lock l;
         if (writeLock) {
-            l = lock.writeLock();
+            return lock.writeLock();
         } else {
-            l = lock.readLock();
+            return lock.readLock();
         }
-        return l;
     }
 }
diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/NoMailboxPathLocker.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/NoMailboxPathLocker.java
index 7ba29aa..2ef2fe6 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/NoMailboxPathLocker.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/NoMailboxPathLocker.java
@@ -19,6 +19,7 @@
 
 package org.apache.james.mailbox.store;
 
+import org.apache.james.mailbox.MailboxPathLocker;
 import org.apache.james.mailbox.MailboxSession;
 import org.apache.james.mailbox.exception.MailboxException;
 import org.apache.james.mailbox.model.MailboxPath;
@@ -28,17 +29,14 @@ import org.apache.james.mailbox.model.MailboxPath;
  *
  * This PathLocker avoid useless locking when these mailboxes are used
  */
-public class NoMailboxPathLocker extends AbstractMailboxPathLocker {
-
+public class NoMailboxPathLocker implements MailboxPathLocker {
     @Override
-    protected void lock(MailboxSession session, MailboxPath path, boolean writeLock) throws MailboxException {
-
+    public <T> T executeWithLock(MailboxSession session, MailboxPath path, LockAwareExecution<T> execution) throws MailboxException {
+        return execution.execute();
     }
 
-
     @Override
-    protected void unlock(MailboxSession session, MailboxPath path, boolean writeLock) throws MailboxException {
-
+    public <T> T executeWithLock(MailboxSession session, MailboxPath path, LockAwareExecution<T> execution, boolean writeLock) throws MailboxException {
+        return execution.execute();
     }
-
 }
\ No newline at end of file


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