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