You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2019/04/10 12:15:47 UTC

[qpid-broker-j] branch 7.1.x updated: QPID-8297: [Broker-J][Oracle Message Store] QPID_MESSAGE_CONTENT reserved space keeps growing

This is an automated email from the ASF dual-hosted git repository.

orudyy pushed a commit to branch 7.1.x
in repository https://gitbox.apache.org/repos/asf/qpid-broker-j.git


The following commit(s) were added to refs/heads/7.1.x by this push:
     new 3df0648  QPID-8297: [Broker-J][Oracle Message Store] QPID_MESSAGE_CONTENT reserved space keeps growing
3df0648 is described below

commit 3df0648436ec30e53444c08368828acd2da5b0df
Author: overmeulen <ov...@murex.com>
AuthorDate: Fri Apr 5 22:12:56 2019 +0200

    QPID-8297: [Broker-J][Oracle Message Store] QPID_MESSAGE_CONTENT reserved space keeps growing
    
    This closes #24
    
    (cherry picked from commit 9eb98551eb923430405e409b239cc52563b32f99)
---
 .../store/derby/AbstractDerbyMessageStore.java     |  6 ++++
 .../store/derby/DerbyConfigurationStore.java       |  6 ++++
 .../store/jdbc/AbstractJDBCConfigurationStore.java |  2 ++
 .../store/jdbc/AbstractJDBCMessageStore.java       |  8 +++--
 .../store/jdbc/GenericJDBCConfigurationStore.java  | 14 ++++++++
 .../server/store/jdbc/GenericJDBCMessageStore.java |  8 +++++
 .../apache/qpid/server/store/jdbc/JDBCDetails.java | 41 +++++++++++++++++-----
 .../qpid/server/store/jdbc/JDBCDetailsTest.java    | 32 ++++++++++++++---
 8 files changed, 102 insertions(+), 15 deletions(-)

diff --git a/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/AbstractDerbyMessageStore.java b/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/AbstractDerbyMessageStore.java
index d5a4de6..17b031c 100644
--- a/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/AbstractDerbyMessageStore.java
+++ b/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/AbstractDerbyMessageStore.java
@@ -126,6 +126,12 @@ public abstract class AbstractDerbyMessageStore extends AbstractJDBCMessageStore
     }
 
     @Override
+    protected String getSqlBlobStorage(String columnName)
+    {
+        return "";
+    }
+
+    @Override
     protected String getSqlVarBinaryType(int size)
     {
         return "varchar("+size+") for bit data";
diff --git a/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyConfigurationStore.java b/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyConfigurationStore.java
index 222306a..856ee2a 100644
--- a/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyConfigurationStore.java
+++ b/broker-plugins/derby-store/src/main/java/org/apache/qpid/server/store/derby/DerbyConfigurationStore.java
@@ -130,6 +130,12 @@ public class DerbyConfigurationStore extends AbstractJDBCConfigurationStore
     }
 
     @Override
+    protected String getSqlBlobStorage(String columnName)
+    {
+        return "";
+    }
+
+    @Override
     protected String getSqlVarBinaryType(int size)
     {
         return "varchar("+size+") for bit data";
diff --git a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCConfigurationStore.java b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCConfigurationStore.java
index 1b57755..93b94e1 100644
--- a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCConfigurationStore.java
+++ b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCConfigurationStore.java
@@ -588,6 +588,8 @@ public abstract class AbstractJDBCConfigurationStore implements MessageStoreProv
 
     protected abstract String getSqlBlobType();
 
+    protected abstract String getSqlBlobStorage(String columnName);
+
     protected abstract String getSqlVarBinaryType(int size);
 
     protected abstract String getSqlBigIntType();
diff --git a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCMessageStore.java b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCMessageStore.java
index 171a2f9..d7a391b 100644
--- a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCMessageStore.java
+++ b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/AbstractJDBCMessageStore.java
@@ -252,6 +252,8 @@ public abstract class AbstractJDBCMessageStore implements MessageStore
 
     protected abstract String getSqlBlobType();
 
+    protected abstract String getSqlBlobStorage(String columnName);
+
     protected abstract String getSqlVarBinaryType(int size);
 
     protected abstract String getSqlBigIntType();
@@ -317,7 +319,8 @@ public abstract class AbstractJDBCMessageStore implements MessageStore
                              + getSqlBigIntType()
                              + " not null, meta_data "
                              + getSqlBlobType()
-                             + ", PRIMARY KEY ( message_id ) )");
+                             + ", PRIMARY KEY ( message_id ) ) "
+                             + getSqlBlobStorage("meta_data"));
             }
         }
 
@@ -335,7 +338,8 @@ public abstract class AbstractJDBCMessageStore implements MessageStore
                              + getSqlBigIntType()
                              + " not null, content "
                              + getSqlBlobType()
-                             + ", PRIMARY KEY (message_id) )");
+                             + ", PRIMARY KEY (message_id) ) "
+                             + getSqlBlobStorage("content"));
             }
         }
 
diff --git a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCConfigurationStore.java b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCConfigurationStore.java
index e2a67be..1b86631 100644
--- a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCConfigurationStore.java
+++ b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCConfigurationStore.java
@@ -56,6 +56,7 @@ public class GenericJDBCConfigurationStore extends AbstractJDBCConfigurationStor
     private ConnectionProvider _connectionProvider;
 
     private String _blobType;
+    private String _blobStorage;
     private String _varBinaryType;
     private String _bigIntType;
     private boolean _useBytesMethodsForBlob;
@@ -95,6 +96,7 @@ public class GenericJDBCConfigurationStore extends AbstractJDBCConfigurationStor
 
         _connectionProvider = JdbcUtils.createConnectionProvider(parent, LOGGER);
         _blobType = details.getBlobType();
+        _blobStorage = details.getBlobStorage();
         _varBinaryType = details.getVarBinaryType();
         _useBytesMethodsForBlob = details.isUseBytesMethodsForBlob();
         _bigIntType = details.getBigintType();
@@ -166,6 +168,12 @@ public class GenericJDBCConfigurationStore extends AbstractJDBCConfigurationStor
     }
 
     @Override
+    protected String getSqlBlobStorage(String columnName)
+    {
+        return String.format(_blobStorage, columnName);
+    }
+
+    @Override
     protected String getSqlVarBinaryType(int size)
     {
         return String.format(_varBinaryType, size);
@@ -298,6 +306,12 @@ public class GenericJDBCConfigurationStore extends AbstractJDBCConfigurationStor
         }
 
         @Override
+        protected String getSqlBlobStorage(String columnName)
+        {
+            return GenericJDBCConfigurationStore.this.getSqlBlobStorage(columnName);
+        }
+
+        @Override
         protected String getSqlVarBinaryType(int size)
         {
             return GenericJDBCConfigurationStore.this.getSqlVarBinaryType(size);
diff --git a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCMessageStore.java b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCMessageStore.java
index 9b13da3..694ae5b 100644
--- a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCMessageStore.java
+++ b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/GenericJDBCMessageStore.java
@@ -49,6 +49,7 @@ public class GenericJDBCMessageStore extends GenericAbstractJDBCMessageStore
     private ConnectionProvider _connectionProvider;
 
     private String _blobType;
+    private String _blobStorage;
     private String _varBinaryType;
     private String _bigIntType;
     private boolean _useBytesMethodsForBlob;
@@ -73,6 +74,7 @@ public class GenericJDBCMessageStore extends GenericAbstractJDBCMessageStore
         }
 
         _blobType = details.getBlobType();
+        _blobStorage = details.getBlobStorage();
         _varBinaryType = details.getVarBinaryType();
         _useBytesMethodsForBlob = details.isUseBytesMethodsForBlob();
         _bigIntType = details.getBigintType();
@@ -119,6 +121,12 @@ public class GenericJDBCMessageStore extends GenericAbstractJDBCMessageStore
     }
 
     @Override
+    protected String getSqlBlobStorage(String columnName)
+    {
+        return String.format(_blobStorage, columnName);
+    }
+
+    @Override
     protected String getSqlVarBinaryType(int size)
     {
         return String.format(_varBinaryType, size);
diff --git a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCDetails.java b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCDetails.java
index b97269f..31c9dd0 100644
--- a/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCDetails.java
+++ b/broker-plugins/jdbc-store/src/main/java/org/apache/qpid/server/store/jdbc/JDBCDetails.java
@@ -34,6 +34,7 @@ public abstract class JDBCDetails
     public static final String CONTEXT_JDBCSTORE_BIGINTTYPE = "qpid.jdbcstore.bigIntType";
     public static final String CONTEXT_JDBCSTORE_VARBINARYTYPE = "qpid.jdbcstore.varBinaryType";
     public static final String CONTEXT_JDBCSTORE_BLOBTYPE = "qpid.jdbcstore.blobType";
+    public static final String CONTEXT_JDBCSTORE_BLOBSTORAGE = "qpid.jdbcstore.blobStorage";
     public static final String CONTEXT_JDBCSTORE_TIMESTAMPTYPE = "qpid.jdbcstore.timestampType";
     public static final String CONTEXT_JDBCSTORE_USEBYTESFORBLOB = "qpid.jdbcstore.useBytesForBlob";
 
@@ -41,6 +42,8 @@ public abstract class JDBCDetails
 
     public abstract String getBlobType();
 
+    public abstract String getBlobStorage();
+
     public abstract String getVarBinaryType();
 
     public abstract String getBigintType();
@@ -55,19 +58,19 @@ public abstract class JDBCDetails
 
     static class KnownJDBCDetails extends JDBCDetails
     {
-        private static final JDBCDetails FALLBACK = new KnownJDBCDetails("fallback", "blob", "varchar(%d) for bit data", "bigint", "timestamp",
+        private static final JDBCDetails FALLBACK = new KnownJDBCDetails("fallback", "blob", "", "varchar(%d) for bit data", "bigint", "timestamp",
                 false, false);
-        private static final JDBCDetails ORACLE = new KnownJDBCDetails("oracle", "blob", "raw(%d)", "number", "timestamp",
+        private static final JDBCDetails ORACLE = new KnownJDBCDetails("oracle", "blob", "LOB (%s) STORE AS SECUREFILE (RETENTION NONE)", "raw(%d)", "number", "timestamp",
                 false, true);
-        private static final JDBCDetails SYBASE = new KnownJDBCDetails("sybase", "image null", "varbinary(%d)", "bigint", "datetime",
+        private static final JDBCDetails SYBASE = new KnownJDBCDetails("sybase", "image null", "", "varbinary(%d)", "bigint", "datetime",
                 false, true);
-        private static final JDBCDetails POSTGRES = new KnownJDBCDetails("postgresql", "bytea", "bytea", "bigint", "timestamp",
+        private static final JDBCDetails POSTGRES = new KnownJDBCDetails("postgresql", "bytea", "", "bytea", "bigint", "timestamp",
                 true, true);
-        private static final JDBCDetails DERBY = new KnownJDBCDetails("derby", "blob", "varchar(%d) for bit data", "bigint", "timestamp",
+        private static final JDBCDetails DERBY = new KnownJDBCDetails("derby", "blob", "", "varchar(%d) for bit data", "bigint", "timestamp",
                 false, true);
-        private static final JDBCDetails MYSQL = new KnownJDBCDetails("mysql", "longblob", "varbinary(%d)", "bigint", "timestamp",
+        private static final JDBCDetails MYSQL = new KnownJDBCDetails("mysql", "longblob", "", "varbinary(%d)", "bigint", "timestamp",
                 false, true);
-        private static final JDBCDetails MARIA_DB = new KnownJDBCDetails("mariadb", "longblob", "varbinary(%d)", "bigint", "timestamp",
+        private static final JDBCDetails MARIA_DB = new KnownJDBCDetails("mariadb", "longblob", "", "varbinary(%d)", "bigint", "timestamp",
                 false, true);
 
         static
@@ -94,6 +97,7 @@ public abstract class JDBCDetails
 
         private final String _vendor;
         private final String _blobType;
+        private final String _blobStorage;
         private final String _varBinaryType;
         private final String _bigintType;
         private final String _timestampType;
@@ -102,6 +106,7 @@ public abstract class JDBCDetails
 
         KnownJDBCDetails(String vendor,
                          String blobType,
+                         String blobStorage,
                          String varBinaryType,
                          String bigIntType,
                          String timestampType,
@@ -110,6 +115,7 @@ public abstract class JDBCDetails
         {
             _vendor = vendor;
             _blobType = blobType;
+            _blobStorage = blobStorage;
             _varBinaryType = varBinaryType;
             _bigintType = bigIntType;
             _timestampType = timestampType;
@@ -130,6 +136,12 @@ public abstract class JDBCDetails
         }
 
         @Override
+        public String getBlobStorage()
+        {
+            return _blobStorage;
+        }
+
+        @Override
         public String getVarBinaryType()
         {
             return _varBinaryType;
@@ -173,6 +185,7 @@ public abstract class JDBCDetails
         return "JDBCDetails{" +
                "vendor='" + getVendor() + '\'' +
                ", blobType='" + getBlobType() + '\'' +
+               ", blobStorage='" + getBlobStorage() + '\'' +
                ", varBinaryType='" + getVarBinaryType() + '\'' +
                ", bigIntType='" + getBigintType() + '\'' +
                ", timestampType='" + getTimestampType() + '\'' +
@@ -216,6 +229,10 @@ public abstract class JDBCDetails
         {
             return false;
         }
+        if (getBlobStorage() != null ? !getBlobStorage().equals(that.getBlobStorage()) : that.getBlobStorage() != null)
+        {
+            return false;
+        }
         if (getVarBinaryType() != null ? !getVarBinaryType().equals(that.getVarBinaryType()) : that.getVarBinaryType() != null)
         {
             return false;
@@ -237,6 +254,7 @@ public abstract class JDBCDetails
     {
         int result = getVendor() != null ? getVendor().hashCode() : 0;
         result = 31 * result + (getBlobType() != null ? getBlobType().hashCode() : 0);
+        result = 31 * result + (getBlobStorage() != null ? getBlobStorage().hashCode() : 0);
         result = 31 * result + (getVarBinaryType() != null ? getVarBinaryType().hashCode() : 0);
         result = 31 * result + (getBigintType() != null ? getBigintType().hashCode() : 0);
         result = 31 * result + (getTimestampType() != null ? getTimestampType().hashCode() : 0);
@@ -249,7 +267,6 @@ public abstract class JDBCDetails
     public static JDBCDetails getDetailsForJdbcUrl(String jdbcUrl, final ConfiguredObject<?> object)
     {
         String[] components = jdbcUrl.split(":", 3);
-        final JDBCDetails details;
         String vendor = null;
         if(components.length >= 2)
         {
@@ -364,6 +381,13 @@ public abstract class JDBCDetails
             }
 
             @Override
+            public String getBlobStorage()
+            {
+                return contextMap.containsKey(CONTEXT_JDBCSTORE_BLOBSTORAGE)
+                        ? String.valueOf(contextMap.get(CONTEXT_JDBCSTORE_BLOBSTORAGE)) : details.getBlobStorage();
+            }
+
+            @Override
             public String getVarBinaryType()
             {
                 return contextMap.containsKey(CONTEXT_JDBCSTORE_VARBINARYTYPE)
@@ -404,6 +428,7 @@ public abstract class JDBCDetails
                         || contextMap.containsKey(CONTEXT_JDBCSTORE_BIGINTTYPE)
                         || contextMap.containsKey(CONTEXT_JDBCSTORE_VARBINARYTYPE)
                         || contextMap.containsKey(CONTEXT_JDBCSTORE_BLOBTYPE)
+                        || contextMap.containsKey(CONTEXT_JDBCSTORE_BLOBSTORAGE)
                         || contextMap.containsKey(CONTEXT_JDBCSTORE_TIMESTAMPTYPE);
             }
         };
diff --git a/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCDetailsTest.java b/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCDetailsTest.java
index 4c65a0f..4ae3d6e 100644
--- a/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCDetailsTest.java
+++ b/broker-plugins/jdbc-store/src/test/java/org/apache/qpid/server/store/jdbc/JDBCDetailsTest.java
@@ -33,6 +33,7 @@ import org.apache.qpid.test.utils.UnitTestBase;
 
 
 public class JDBCDetailsTest extends UnitTestBase{
+
     @Test
     public void testDerby()
     {
@@ -41,6 +42,8 @@ public class JDBCDetailsTest extends UnitTestBase{
         assertEquals("varchar(%d) for bit data", derbyDetails.getVarBinaryType());
         assertEquals("bigint", derbyDetails.getBigintType());
         assertEquals("blob", derbyDetails.getBlobType());
+        assertEquals("", derbyDetails.getBlobStorage());
+        assertEquals("timestamp", derbyDetails.getTimestampType());
         assertFalse(derbyDetails.isUseBytesMethodsForBlob());
 
         assertTrue(derbyDetails.isKnownVendor());
@@ -55,7 +58,10 @@ public class JDBCDetailsTest extends UnitTestBase{
         assertEquals("varchar(%d) for bit data", details.getVarBinaryType());
         assertEquals("bigint", details.getBigintType());
         assertEquals("blob", details.getBlobType());
-        assertEquals(false, details.isUseBytesMethodsForBlob());
+        assertEquals("", details.getBlobStorage());
+        assertEquals("timestamp", details.getTimestampType());
+        assertFalse(details.isUseBytesMethodsForBlob());
+
         assertFalse(details.isOverridden());
         assertFalse(details.isKnownVendor());
     }
@@ -63,7 +69,6 @@ public class JDBCDetailsTest extends UnitTestBase{
     @Test
     public void testDerbyWithOverride()
     {
-
         Map<String, String> contextMap = new HashMap<>();
         contextMap.put(JDBCDetails.CONTEXT_JDBCSTORE_VARBINARYTYPE, "myvarbin");
 
@@ -72,15 +77,14 @@ public class JDBCDetailsTest extends UnitTestBase{
         assertEquals("myvarbin", derbyDetails.getVarBinaryType());
         assertEquals("bigint", derbyDetails.getBigintType());
         assertEquals("blob", derbyDetails.getBlobType());
+        assertEquals("", derbyDetails.getBlobStorage());
+        assertEquals("timestamp", derbyDetails.getTimestampType());
         assertFalse(derbyDetails.isUseBytesMethodsForBlob());
 
         assertTrue(derbyDetails.isKnownVendor());
         assertTrue(derbyDetails.isOverridden());
     }
 
-
-
-
     @Test
     public void testRecognisedDriver_AllDetailsProvidedByContext()
     {
@@ -88,6 +92,7 @@ public class JDBCDetailsTest extends UnitTestBase{
         contextMap.put(JDBCDetails.CONTEXT_JDBCSTORE_VARBINARYTYPE, "myvarbin");
         contextMap.put(JDBCDetails.CONTEXT_JDBCSTORE_BIGINTTYPE, "mybigint");
         contextMap.put(JDBCDetails.CONTEXT_JDBCSTORE_BLOBTYPE, "myblob");
+        contextMap.put(JDBCDetails.CONTEXT_JDBCSTORE_BLOBSTORAGE, "myblobstorage");
         contextMap.put(JDBCDetails.CONTEXT_JDBCSTORE_TIMESTAMPTYPE, "mytimestamp");
         contextMap.put(JDBCDetails.CONTEXT_JDBCSTORE_USEBYTESFORBLOB, "true");
 
@@ -96,10 +101,27 @@ public class JDBCDetailsTest extends UnitTestBase{
         assertEquals("myvarbin", details.getVarBinaryType());
         assertEquals("mybigint", details.getBigintType());
         assertEquals("myblob", details.getBlobType());
+        assertEquals("myblobstorage", details.getBlobStorage());
         assertEquals("mytimestamp", details.getTimestampType());
         assertEquals(true, details.isUseBytesMethodsForBlob());
+
         assertTrue(details.isKnownVendor());
         assertTrue(details.isOverridden());
     }
 
+    @Test
+    public void testOracle()
+    {
+        JDBCDetails oracleDetails = JDBCDetails.getJdbcDetails("oracle", Collections.emptyMap());
+        assertEquals("oracle", oracleDetails.getVendor());
+        assertEquals("raw(%d)", oracleDetails.getVarBinaryType());
+        assertEquals("number", oracleDetails.getBigintType());
+        assertEquals("blob", oracleDetails.getBlobType());
+        assertEquals("LOB (%s) STORE AS SECUREFILE (RETENTION NONE)", oracleDetails.getBlobStorage());
+        assertEquals("timestamp", oracleDetails.getTimestampType());
+        assertFalse(oracleDetails.isUseBytesMethodsForBlob());
+
+        assertTrue(oracleDetails.isKnownVendor());
+        assertFalse(oracleDetails.isOverridden());
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org