activemq-artemis git commit: ARTEMIS-1084 Throw RunTime on bad Oracle table size

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

activemq-artemis git commit: ARTEMIS-1084 Throw RunTime on bad Oracle table size

martyntaylor
Repository: activemq-artemis
Updated Branches:
  refs/heads/1.x 65481ef46 -> c35960f6a


ARTEMIS-1084 Throw RunTime on bad Oracle table size

(cherry picked from commit aa9ac4a914c18ef9421c769f8cb40e1a6b3b9972)


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

Branch: refs/heads/1.x
Commit: c35960f6a4b08bc5df4e71a1e5b4ac0c765d68c3
Parents: 65481ef
Author: Francesco Nigro <[hidden email]>
Authored: Tue Apr 11 16:14:54 2017 +0200
Committer: Martyn Taylor <[hidden email]>
Committed: Mon Apr 17 11:04:46 2017 +0100

----------------------------------------------------------------------
 .../drivers/oracle/Oracle12CSQLProvider.java    |  4 ++--
 .../paging/impl/PagingStoreFactoryDatabase.java |  9 ++++++--
 .../impl/DatabaseStoreConfigurationTest.java    | 18 ++++++++-------
 .../tests/integration/paging/PagingTest.java    | 23 ++++++++++++++++++++
 4 files changed, 42 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/c35960f6/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/drivers/oracle/Oracle12CSQLProvider.java
----------------------------------------------------------------------
diff --git a/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/drivers/oracle/Oracle12CSQLProvider.java b/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/drivers/oracle/Oracle12CSQLProvider.java
index 1e5cf2a..e650e94 100644
--- a/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/drivers/oracle/Oracle12CSQLProvider.java
+++ b/artemis-jdbc-store/src/main/java/org/apache/activemq/artemis/jdbc/store/drivers/oracle/Oracle12CSQLProvider.java
@@ -34,8 +34,8 @@ public class Oracle12CSQLProvider extends GenericSQLProvider {
 
    protected Oracle12CSQLProvider(String tableName, DatabaseStoreType databaseStoreType) {
       super(tableName.toUpperCase(), databaseStoreType);
-      if (tableName.length() > 10 && databaseStoreType == DatabaseStoreType.PAGE) {
-         throw new RuntimeException("The maximum name size for the paging store table, when using Oracle12C is 10 characters.");
+      if (tableName.length() > 30) {
+         throw new RuntimeException("The maximum name size for the " + databaseStoreType.name().toLowerCase() + " store table, when using Oracle12C is 30 characters.");
       }
    }
 

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/c35960f6/artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/impl/PagingStoreFactoryDatabase.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/impl/PagingStoreFactoryDatabase.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/impl/PagingStoreFactoryDatabase.java
index 5fd262e..4591c8b 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/impl/PagingStoreFactoryDatabase.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/paging/impl/PagingStoreFactoryDatabase.java
@@ -99,15 +99,20 @@ public class PagingStoreFactoryDatabase implements PagingStoreFactory {
 
    public synchronized void start() throws Exception {
       if (!started) {
+         //fix to prevent page table names to be longer than 30 chars (upper limit for Oracle12c identifiers length)
+         final String pageStoreTableNamePrefix = dbConf.getPageStoreTableName();
+         if (pageStoreTableNamePrefix.length() > 10) {
+            throw new IllegalStateException("The maximum name size for the page store table prefix is 10 characters: THE PAGING STORE CAN'T START");
+         }
          if (dbConf.getDataSource() != null) {
             SQLProvider.Factory sqlProviderFactory = dbConf.getSqlProviderFactory();
             if (sqlProviderFactory == null) {
                sqlProviderFactory = new GenericSQLProvider.Factory();
             }
-            pagingFactoryFileFactory = new JDBCSequentialFileFactory(dbConf.getDataSource(), sqlProviderFactory.create(dbConf.getPageStoreTableName(), SQLProvider.DatabaseStoreType.PAGE), executorFactory.getExecutor());
+            pagingFactoryFileFactory = new JDBCSequentialFileFactory(dbConf.getDataSource(), sqlProviderFactory.create(pageStoreTableNamePrefix, SQLProvider.DatabaseStoreType.PAGE), executorFactory.getExecutor());
          } else {
             String driverClassName = dbConf.getJdbcDriverClassName();
-            pagingFactoryFileFactory = new JDBCSequentialFileFactory(dbConf.getJdbcConnectionUrl(), driverClassName, JDBCUtils.getSQLProvider(driverClassName, dbConf.getPageStoreTableName(), SQLProvider.DatabaseStoreType.PAGE), executorFactory.getExecutor());
+            pagingFactoryFileFactory = new JDBCSequentialFileFactory(dbConf.getJdbcConnectionUrl(), driverClassName, JDBCUtils.getSQLProvider(driverClassName, pageStoreTableNamePrefix, SQLProvider.DatabaseStoreType.PAGE), executorFactory.getExecutor());
          }
          pagingFactoryFileFactory.start();
          started = true;

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/c35960f6/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/DatabaseStoreConfigurationTest.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/DatabaseStoreConfigurationTest.java b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/DatabaseStoreConfigurationTest.java
index 27e3593..58745a2 100644
--- a/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/DatabaseStoreConfigurationTest.java
+++ b/artemis-server/src/test/java/org/apache/activemq/artemis/core/config/impl/DatabaseStoreConfigurationTest.java
@@ -36,15 +36,17 @@ public class DatabaseStoreConfigurationTest extends ActiveMQTestBase {
 
    @Test
    public void testOracle12TableSize() {
-      Throwable rte = null;
-      try {
-         new Oracle12CSQLProvider.Factory().create("A_TABLE_NAME_THAT_IS_TOO_LONG", SQLProvider.DatabaseStoreType.PAGE);
-      } catch (Throwable t) {
-         rte = t;
-      }
+      for (SQLProvider.DatabaseStoreType storeType : SQLProvider.DatabaseStoreType.values()) {
+         Throwable rte = null;
+         try {
+            new Oracle12CSQLProvider.Factory().create("_A_TABLE_NAME_THAT_IS_TOO_LONG_", storeType);
+         } catch (Throwable t) {
+            rte = t;
+         }
 
-      assertNotNull(rte);
-      assertTrue(rte.getMessage().contains("The maximum name size for the paging store table, when using Oracle12C is 10 characters."));
+         assertNotNull(rte);
+         assertTrue(rte.getMessage().contains("The maximum name size for the " + storeType.name().toLowerCase() + " store table, when using Oracle12C is 30 characters."));
+      }
    }
 
    protected Configuration createConfiguration(String fileName) throws Exception {

http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/c35960f6/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/paging/PagingTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/paging/PagingTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/paging/PagingTest.java
index 832b1aa..b493a22 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/paging/PagingTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/paging/PagingTest.java
@@ -54,6 +54,7 @@ import org.apache.activemq.artemis.core.client.impl.ClientConsumerInternal;
 import org.apache.activemq.artemis.core.config.Configuration;
 import org.apache.activemq.artemis.core.config.DivertConfiguration;
 import org.apache.activemq.artemis.core.config.StoreConfiguration;
+import org.apache.activemq.artemis.core.config.storage.DatabaseStorageConfiguration;
 import org.apache.activemq.artemis.core.filter.Filter;
 import org.apache.activemq.artemis.core.io.IOCallback;
 import org.apache.activemq.artemis.core.journal.Journal;
@@ -145,6 +146,28 @@ public class PagingTest extends ActiveMQTestBase {
    }
 
    @Test
+   public void testTooLongPageStoreTableNamePrefix() throws Exception {
+      if (storeType == StoreConfiguration.StoreType.DATABASE) {
+         final Configuration config = createDefaultInVMConfig();
+         final DatabaseStorageConfiguration storageConfiguration = (DatabaseStorageConfiguration) config.getStoreConfiguration();
+         //set the page store table to be longer than 10 chars -> the paging manager initialization will fail
+         storageConfiguration.setPageStoreTableName("PAGE_STORE_");
+
+         final int PAGE_MAX = 20 * 1024;
+
+         final int PAGE_SIZE = 10 * 1024;
+
+         final ActiveMQServer server = createServer(true, config, PAGE_SIZE, PAGE_MAX);
+         server.start();
+
+         //due to a failed initialisation of the paging manager, it must be null
+         Assert.assertNull(server.getPagingManager());
+
+         server.stop();
+      }
+   }
+
+   @Test
    public void testPageOnLargeMessageMultipleQueues() throws Exception {
       Configuration config = createDefaultInVMConfig();
 

Loading...