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/04/13 23:17:18 UTC

[1/2] activemq-artemis git commit: This closes #1200

Repository: activemq-artemis
Updated Branches:
  refs/heads/master f60988418 -> b652c1b5a


This closes #1200


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

Branch: refs/heads/master
Commit: b652c1b5a9ba3bc7ae5463b832b720e9da9aff3e
Parents: f609884 aa9ac4a
Author: Clebert Suconic <cl...@apache.org>
Authored: Thu Apr 13 19:17:10 2017 -0400
Committer: Clebert Suconic <cl...@apache.org>
Committed: Thu Apr 13 19:17:10 2017 -0400

----------------------------------------------------------------------
 .../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(-)
----------------------------------------------------------------------



[2/2] activemq-artemis git commit: ARTEMIS-1084 Throw RunTime on bad Oracle table size

Posted by cl...@apache.org.
ARTEMIS-1084 Throw RunTime on bad Oracle table size


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

Branch: refs/heads/master
Commit: aa9ac4a914c18ef9421c769f8cb40e1a6b3b9972
Parents: f609884
Author: Francesco Nigro <ni...@gmail.com>
Authored: Tue Apr 11 16:14:54 2017 +0200
Committer: Clebert Suconic <cl...@apache.org>
Committed: Thu Apr 13 19:17:10 2017 -0400

----------------------------------------------------------------------
 .../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/aa9ac4a9/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 ac58bd3..c9f661d 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
@@ -29,8 +29,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/aa9ac4a9/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 31fc729..3177b6e 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
@@ -109,15 +109,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/aa9ac4a9/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/aa9ac4a9/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 48127d2..ddabf1b 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
@@ -55,6 +55,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;
@@ -151,6 +152,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();