activemq-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jbert...@apache.org
Subject [1/3] activemq-artemis git commit: ARTEMIS-1204 Replace open sync with AtomicBoolean
Date Mon, 26 Jun 2017 18:09:01 GMT
Repository: activemq-artemis
Updated Branches:
  refs/heads/master b50ae5a91 -> 583abcefb


ARTEMIS-1204 Replace open sync with AtomicBoolean

The JDBCSequentialFile blocks on the writeLock when opening.  There is
no need to block here, in fact it may cause issues when opening and
syncing concurrently.  Instead an AtomicBoolean is enough to prevent the
file from being reloaded.


Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/604db9ee
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/604db9ee
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/604db9ee

Branch: refs/heads/master
Commit: 604db9ee7e01a91ec41d95f67a37a2d21afaa74c
Parents: b50ae5a
Author: Martyn Taylor <mtaylor@redhat.com>
Authored: Tue Jun 13 15:02:31 2017 +0100
Committer: Martyn Taylor <mtaylor@redhat.com>
Committed: Mon Jun 26 18:41:21 2017 +0100

----------------------------------------------------------------------
 .../jdbc/store/file/JDBCSequentialFile.java     | 32 +++++++++++---------
 .../file/JDBCSequentialFileFactoryDriver.java   |  2 +-
 2 files changed, 18 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/604db9ee/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/file/JDBCSequentialFile.java
----------------------------------------------------------------------
diff --git a/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/file/JDBCSequentialFile.java
b/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/file/JDBCSequentialFile.java
index 018000d..9d1be1f 100644
--- a/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/file/JDBCSequentialFile.java
+++ b/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/file/JDBCSequentialFile.java
@@ -23,6 +23,7 @@ import java.sql.SQLException;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.Executor;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.activemq.artemis.api.core.ActiveMQBuffer;
 import org.apache.activemq.artemis.api.core.ActiveMQBuffers;
@@ -43,9 +44,9 @@ public class JDBCSequentialFile implements SequentialFile {
 
    private final String extension;
 
-   private boolean isOpen = false;
+   private AtomicBoolean isOpen = new AtomicBoolean(false);
 
-   private boolean isLoaded = false;
+   private AtomicBoolean isLoaded = new AtomicBoolean(false);
 
    private long id = -1;
 
@@ -83,12 +84,12 @@ public class JDBCSequentialFile implements SequentialFile {
 
    @Override
    public boolean isOpen() {
-      return isOpen;
+      return isOpen.get();
    }
 
    @Override
    public boolean exists() {
-      if (isLoaded) return true;
+      if (isLoaded.get()) return true;
       try {
          return fileFactory.listFiles(extension).contains(filename);
       } catch (Exception e) {
@@ -100,21 +101,20 @@ public class JDBCSequentialFile implements SequentialFile {
 
    @Override
    public void open() throws Exception {
-      load();
-      isOpen = true;
+      isOpen.compareAndSet(false, load());
    }
 
-   private void load() {
+   private boolean load() {
       try {
-         synchronized (writeLock) {
-            if (!isLoaded) {
-               dbDriver.openFile(this);
-               isLoaded = true;
-            }
+         if (isLoaded.compareAndSet(false, true)) {
+            dbDriver.openFile(this);
          }
+         return true;
       } catch (SQLException e) {
+         isLoaded.set(false);
          fileFactory.onIOError(e, "Error attempting to open JDBC file.", this);
       }
+      return false;
    }
 
    @Override
@@ -146,8 +146,9 @@ public class JDBCSequentialFile implements SequentialFile {
    public void delete() throws IOException, InterruptedException, ActiveMQException {
       try {
          synchronized (writeLock) {
-            load();
-            dbDriver.deleteFile(this);
+            if (load()) {
+               dbDriver.deleteFile(this);
+            }
          }
       } catch (SQLException e) {
          fileFactory.onIOError(e, "Error deleting JDBC file.", this);
@@ -156,6 +157,7 @@ public class JDBCSequentialFile implements SequentialFile {
 
    private synchronized int internalWrite(byte[] data, IOCallback callback) {
       try {
+         open();
          synchronized (writeLock) {
             int noBytes = dbDriver.writeToFile(this, data);
             seek(noBytes);
@@ -281,7 +283,7 @@ public class JDBCSequentialFile implements SequentialFile {
 
    @Override
    public void close() throws Exception {
-      isOpen = false;
+      isOpen.set(false);
       sync();
       fileFactory.sequentialFileClosed(this);
    }

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/604db9ee/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/file/JDBCSequentialFileFactoryDriver.java
----------------------------------------------------------------------
diff --git a/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/file/JDBCSequentialFileFactoryDriver.java
b/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/file/JDBCSequentialFileFactoryDriver.java
index 6cf54ff..fdd7c76 100644
--- a/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/file/JDBCSequentialFileFactoryDriver.java
+++ b/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/file/JDBCSequentialFileFactoryDriver.java
@@ -165,7 +165,7 @@ public class JDBCSequentialFileFactoryDriver extends AbstractJDBCDriver
{
                if (blob != null) {
                   file.setWritePosition(blob.length());
                } else {
-                  logger.warn("ERROR NO BLOB FOR FILE" + "File: " + file.getFileName() +
" " + file.getId());
+                  logger.trace("No Blob found for file: " + file.getFileName() + " " + file.getId());
                }
             }
             connection.commit();


Mime
View raw message