activemq-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From clebertsuco...@apache.org
Subject [1/2] activemq-artemis git commit: ARTEMIS-1204 Fix getSize() on a closed JDBC File
Date Fri, 02 Jun 2017 15:28:13 GMT
Repository: activemq-artemis
Updated Branches:
  refs/heads/master 6314b1766 -> 2aeb79710


ARTEMIS-1204 Fix getSize() on a closed JDBC File


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

Branch: refs/heads/master
Commit: e7c426c5e112600254252d3565c87ab8d97320bb
Parents: 6314b17
Author: Martyn Taylor <mtaylor@redhat.com>
Authored: Fri Jun 2 14:50:37 2017 +0100
Committer: Martyn Taylor <mtaylor@redhat.com>
Committed: Fri Jun 2 14:59:53 2017 +0100

----------------------------------------------------------------------
 .../jdbc/store/file/JDBCSequentialFile.java     | 24 +++++++++-------
 .../file/JDBCSequentialFileFactoryTest.java     | 30 ++++++++++++++++++++
 2 files changed, 44 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/e7c426c5/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 b8ed3f0..018000d 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
@@ -45,7 +45,7 @@ public class JDBCSequentialFile implements SequentialFile {
 
    private boolean isOpen = false;
 
-   private boolean isCreated = false;
+   private boolean isLoaded = false;
 
    private long id = -1;
 
@@ -88,7 +88,7 @@ public class JDBCSequentialFile implements SequentialFile {
 
    @Override
    public boolean exists() {
-      if (isCreated) return true;
+      if (isLoaded) return true;
       try {
          return fileFactory.listFiles(extension).contains(filename);
       } catch (Exception e) {
@@ -100,12 +100,16 @@ public class JDBCSequentialFile implements SequentialFile {
 
    @Override
    public void open() throws Exception {
+      load();
+      isOpen = true;
+   }
+
+   private void load() {
       try {
-         if (!isOpen) {
-            synchronized (writeLock) {
+         synchronized (writeLock) {
+            if (!isLoaded) {
                dbDriver.openFile(this);
-               isCreated = true;
-               isOpen = true;
+               isLoaded = true;
             }
          }
       } catch (SQLException e) {
@@ -141,10 +145,9 @@ public class JDBCSequentialFile implements SequentialFile {
    @Override
    public void delete() throws IOException, InterruptedException, ActiveMQException {
       try {
-         if (isCreated) {
-            synchronized (writeLock) {
-               dbDriver.deleteFile(this);
-            }
+         synchronized (writeLock) {
+            load();
+            dbDriver.deleteFile(this);
          }
       } catch (SQLException e) {
          fileFactory.onIOError(e, "Error deleting JDBC file.", this);
@@ -298,6 +301,7 @@ public class JDBCSequentialFile implements SequentialFile {
 
    @Override
    public long size() throws Exception {
+      load();
       return writePosition;
    }
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/e7c426c5/artemis-jdbc-store/src/test/java/org/apache/activemq/artemis/jdbc/file/JDBCSequentialFileFactoryTest.java
----------------------------------------------------------------------
diff --git a/artemis-jdbc-store/src/test/java/org/apache/activemq/artemis/jdbc/file/JDBCSequentialFileFactoryTest.java
b/artemis-jdbc-store/src/test/java/org/apache/activemq/artemis/jdbc/file/JDBCSequentialFileFactoryTest.java
index 0800870..d763709 100644
--- a/artemis-jdbc-store/src/test/java/org/apache/activemq/artemis/jdbc/file/JDBCSequentialFileFactoryTest.java
+++ b/artemis-jdbc-store/src/test/java/org/apache/activemq/artemis/jdbc/file/JDBCSequentialFileFactoryTest.java
@@ -186,6 +186,36 @@ public class JDBCSequentialFileFactoryTest {
       assertEquals(bufferSize, file.size());
    }
 
+   /**
+    * Using a real file system users are not required to call file.open() in order to read
the file size.  The file
+    * descriptor has enough information.  However, with JDBC we do require that some information
is loaded in order to
+    * get the underlying BLOB.  This tests ensures that file.size() returns the correct value,
without the user calling
+    * file.open() with JDBCSequentialFile.
+    *
+    * @throws Exception
+    */
+   @Test
+   public void testGetFileSizeWorksWhenNotOpen() throws Exception {
+      // Create test file with some data.
+      int testFileSize = 1024;
+      String fileName = "testFile.txt";
+      SequentialFile file = factory.createSequentialFile(fileName);
+      file.open();
+
+      // Write some data to the file
+      ActiveMQBuffer buffer = ActiveMQBuffers.wrappedBuffer(new byte[1024]);
+      file.write(buffer, true);
+      file.close();
+
+      try {
+         // Create a new pointer to the test file and ensure file.size() returns the correct
value.
+         SequentialFile file2 = factory.createSequentialFile(fileName);
+         assertEquals(testFileSize, file2.size());
+      } catch (Throwable t) {
+         t.printStackTrace();
+      }
+   }
+
    private void checkData(JDBCSequentialFile file, ActiveMQBuffer expectedData) throws SQLException
{
       expectedData.resetReaderIndex();
 


Mime
View raw message