You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2017/07/25 16:20:11 UTC
activemq-artemis git commit: ARTEMIS-1271 FileSystemMonitor locking
improvement
Repository: activemq-artemis
Updated Branches:
refs/heads/1.x 004c86804 -> c3eeea491
ARTEMIS-1271 FileSystemMonitor locking improvement
(cherry picked from commit ce756d46f9c90e4d7d0eb0e0090384d6d646af3e)
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/c3eeea49
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/c3eeea49
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/c3eeea49
Branch: refs/heads/1.x
Commit: c3eeea491053eff396ed4d5b55b1fdb3c8568639
Parents: 004c868
Author: Martyn Taylor <mt...@redhat.com>
Authored: Tue Jul 4 14:50:59 2017 +0100
Committer: Clebert Suconic <cl...@apache.org>
Committed: Tue Jul 25 12:19:59 2017 -0400
----------------------------------------------------------------------
.../core/server/files/FileStoreMonitor.java | 75 +++++++++++---------
1 file changed, 42 insertions(+), 33 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/c3eeea49/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/files/FileStoreMonitor.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/files/FileStoreMonitor.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/files/FileStoreMonitor.java
index 0f2c1ae..0600687 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/files/FileStoreMonitor.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/server/files/FileStoreMonitor.java
@@ -44,6 +44,7 @@ public class FileStoreMonitor extends ActiveMQScheduledComponent {
private final Set<Callback> callbackList = new HashSet<>();
private final Set<FileStore> stores = new HashSet<>();
private double maxUsage;
+ private final Object monitorLock = new Object();
public FileStoreMonitor(ScheduledExecutorService scheduledExecutorService,
Executor executor,
@@ -54,22 +55,28 @@ public class FileStoreMonitor extends ActiveMQScheduledComponent {
this.maxUsage = maxUsage;
}
- public synchronized FileStoreMonitor addCallback(Callback callback) {
- callbackList.add(callback);
- return this;
+ public FileStoreMonitor addCallback(Callback callback) {
+ synchronized (monitorLock) {
+ callbackList.add(callback);
+ return this;
+ }
}
- public synchronized FileStoreMonitor addStore(File file) throws IOException {
- // JDBC storage may return this as null, and we may need to ignore it
- if (file != null && file.exists()) {
- addStore(Files.getFileStore(file.toPath()));
+ public FileStoreMonitor addStore(File file) throws IOException {
+ synchronized (monitorLock) {
+ // JDBC storage may return this as null, and we may need to ignore it
+ if (file != null && file.exists()) {
+ addStore(Files.getFileStore(file.toPath()));
+ }
+ return this;
}
- return this;
}
- public synchronized FileStoreMonitor addStore(FileStore store) {
- stores.add(store);
- return this;
+ public FileStoreMonitor addStore(FileStore store) {
+ synchronized (monitorLock) {
+ stores.add(store);
+ return this;
+ }
}
@Override
@@ -77,32 +84,34 @@ public class FileStoreMonitor extends ActiveMQScheduledComponent {
tick();
}
- public synchronized void tick() {
- boolean over = false;
-
- FileStore lastStore = null;
- double usage = 0;
-
- for (FileStore store : stores) {
- try {
- lastStore = store;
- usage = calculateUsage(store);
- over = usage > maxUsage;
- if (over) {
- break;
+ public void tick() {
+ synchronized (monitorLock) {
+ boolean over = false;
+
+ FileStore lastStore = null;
+ double usage = 0;
+
+ for (FileStore store : stores) {
+ try {
+ lastStore = store;
+ usage = calculateUsage(store);
+ over = usage > maxUsage;
+ if (over) {
+ break;
+ }
+ } catch (Exception e) {
+ logger.warn(e.getMessage(), e);
}
- } catch (Exception e) {
- logger.warn(e.getMessage(), e);
}
- }
- for (Callback callback : callbackList) {
- callback.tick(lastStore, usage);
+ for (Callback callback : callbackList) {
+ callback.tick(lastStore, usage);
- if (over) {
- callback.over(lastStore, usage);
- } else {
- callback.under(lastStore, usage);
+ if (over) {
+ callback.over(lastStore, usage);
+ } else {
+ callback.under(lastStore, usage);
+ }
}
}
}