rhtyd closed pull request #2718: Update Apache DBCP version URL: https://github.com/apache/cloudstack/pull/2718
This is a PR merged from a forked repository. As GitHub hides the original diff on merge, it is displayed below for the sake of provenance: As this is a foreign pull request (from a fork), the diff is supplied below (as it won't show otherwise due to GitHub magic): diff --git a/developer/pom.xml b/developer/pom.xml index 3f6236fd690..97ec9ed1b0f 100644 --- a/developer/pom.xml +++ b/developer/pom.xml @@ -22,12 +22,12 @@ </parent> <dependencies> <dependency> - <groupId>commons-dbcp</groupId> - <artifactId>commons-dbcp</artifactId> + <groupId>org.apache.commons</groupId> + <artifactId>commons-dbcp2</artifactId> </dependency> <dependency> - <groupId>commons-pool</groupId> - <artifactId>commons-pool</artifactId> + <groupId>org.apache.commons</groupId> + <artifactId>commons-pool2</artifactId> </dependency> <dependency> <groupId>org.jasypt</groupId> diff --git a/engine/schema/src/main/java/com/cloud/upgrade/DatabaseCreator.java b/engine/schema/src/main/java/com/cloud/upgrade/DatabaseCreator.java index 2509d6972c3..2281e1d2399 100644 --- a/engine/schema/src/main/java/com/cloud/upgrade/DatabaseCreator.java +++ b/engine/schema/src/main/java/com/cloud/upgrade/DatabaseCreator.java @@ -230,5 +230,6 @@ public static void main(String[] args) { } finally { txn.close(); } + System.exit(0); } } diff --git a/framework/db/pom.xml b/framework/db/pom.xml index 6483f4f9b03..7bf184c6d38 100644 --- a/framework/db/pom.xml +++ b/framework/db/pom.xml @@ -28,8 +28,8 @@ <artifactId>javax.persistence</artifactId> </dependency> <dependency> - <groupId>commons-dbcp</groupId> - <artifactId>commons-dbcp</artifactId> + <groupId>org.apache.commons</groupId> + <artifactId>commons-dbcp2</artifactId> </dependency> <dependency> <groupId>commons-io</groupId> @@ -37,8 +37,8 @@ <version>${cs.commons-io.version}</version> </dependency> <dependency> - <groupId>commons-pool</groupId> - <artifactId>commons-pool</artifactId> + <groupId>org.apache.commons</groupId> + <artifactId>commons-pool2</artifactId> </dependency> <dependency> <groupId>org.apache.cloudstack</groupId> diff --git a/framework/db/src/main/java/com/cloud/utils/db/TransactionLegacy.java b/framework/db/src/main/java/com/cloud/utils/db/TransactionLegacy.java index 6a422d30fc3..6777077c3d1 100644 --- a/framework/db/src/main/java/com/cloud/utils/db/TransactionLegacy.java +++ b/framework/db/src/main/java/com/cloud/utils/db/TransactionLegacy.java @@ -33,13 +33,14 @@ import javax.sql.DataSource; -import org.apache.commons.dbcp.ConnectionFactory; -import org.apache.commons.dbcp.DriverManagerConnectionFactory; -import org.apache.commons.dbcp.PoolableConnectionFactory; -import org.apache.commons.dbcp.PoolingDataSource; -import org.apache.commons.pool.KeyedObjectPoolFactory; -import org.apache.commons.pool.impl.GenericObjectPool; -import org.apache.commons.pool.impl.StackKeyedObjectPoolFactory; +import org.apache.commons.dbcp2.ConnectionFactory; +import org.apache.commons.dbcp2.DriverManagerConnectionFactory; +import org.apache.commons.dbcp2.PoolableConnection; +import org.apache.commons.dbcp2.PoolableConnectionFactory; +import org.apache.commons.dbcp2.PoolingDataSource; +import org.apache.commons.pool2.ObjectPool; +import org.apache.commons.pool2.impl.GenericObjectPool; +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import org.apache.log4j.Logger; import com.cloud.utils.Pair; @@ -1079,24 +1080,15 @@ public static void initDataSource(Properties dbProps) { System.setProperty("javax.net.ssl.trustStorePassword", dbProps.getProperty("db.cloud.trustStorePassword")); } - final GenericObjectPool cloudConnectionPool = - new GenericObjectPool(null, cloudMaxActive, GenericObjectPool.DEFAULT_WHEN_EXHAUSTED_ACTION, cloudMaxWait, cloudMaxIdle, cloudTestOnBorrow, false, - cloudTimeBtwEvictionRunsMillis, 1, cloudMinEvcitableIdleTimeMillis, cloudTestWhileIdle); - final String cloudConnectionUri = cloudDriver + "://" + cloudHost + (s_dbHAEnabled ? "," + cloudSlaves : "") + ":" + cloudPort + "/" + cloudDbName + "?autoReconnect=" + cloudAutoReconnect + (url != null ? "&" + url : "") + (useSSL ? "&useSSL=true" : "") + (s_dbHAEnabled ? "&" + cloudDbHAParams : "") + (s_dbHAEnabled ? "&loadBalanceStrategy=" + loadBalanceStrategy : ""); DriverLoader.loadDriver(cloudDriver); - final ConnectionFactory cloudConnectionFactory = new DriverManagerConnectionFactory(cloudConnectionUri, cloudUsername, cloudPassword); - - final KeyedObjectPoolFactory poolableObjFactory = (cloudPoolPreparedStatements ? new StackKeyedObjectPoolFactory() : null); - - final PoolableConnectionFactory cloudPoolableConnectionFactory = - new PoolableConnectionFactory(cloudConnectionFactory, cloudConnectionPool, poolableObjFactory, cloudValidationQuery, false, false, isolationLevel); - // Default Data Source for CloudStack - s_ds = new PoolingDataSource(cloudPoolableConnectionFactory.getPool()); + s_ds = createDataSource(cloudConnectionUri, cloudUsername, cloudPassword, cloudMaxActive, cloudMaxIdle, cloudMaxWait, + cloudTimeBtwEvictionRunsMillis, cloudMinEvcitableIdleTimeMillis, cloudTestWhileIdle, cloudTestOnBorrow, + cloudValidationQuery, isolationLevel); // Configure the usage db final int usageMaxActive = Integer.parseInt(dbProps.getProperty("db.usage.maxActive")); @@ -1111,21 +1103,15 @@ public static void initDataSource(Properties dbProps) { final boolean usageAutoReconnect = Boolean.parseBoolean(dbProps.getProperty("db.usage.autoReconnect")); final String usageUrl = dbProps.getProperty("db.usage.url.params"); - final GenericObjectPool usageConnectionPool = - new GenericObjectPool(null, usageMaxActive, GenericObjectPool.DEFAULT_WHEN_EXHAUSTED_ACTION, usageMaxWait, usageMaxIdle); - final String usageConnectionUri = usageDriver + "://" + usageHost + (s_dbHAEnabled ? "," + dbProps.getProperty("db.cloud.slaves") : "") + ":" + usagePort + "/" + usageDbName + "?autoReconnect=" + usageAutoReconnect + (usageUrl != null ? "&" + usageUrl : "") + (s_dbHAEnabled ? "&" + getDBHAParams("usage", dbProps) : "") + (s_dbHAEnabled ? "&loadBalanceStrategy=" + loadBalanceStrategy : ""); DriverLoader.loadDriver(usageDriver); - final ConnectionFactory usageConnectionFactory = new DriverManagerConnectionFactory(usageConnectionUri, usageUsername, usagePassword); - - final PoolableConnectionFactory usagePoolableConnectionFactory = - new PoolableConnectionFactory(usageConnectionFactory, usageConnectionPool, new StackKeyedObjectPoolFactory(), null, false, false); - // Data Source for usage server - s_usageDS = new PoolingDataSource(usagePoolableConnectionFactory.getPool()); + s_usageDS = createDataSource(usageConnectionUri, usageUsername, usagePassword, + usageMaxActive, usageMaxIdle, usageMaxWait, null, null, null, null, + null, isolationLevel); try { // Configure the simulator db @@ -1140,18 +1126,12 @@ public static void initDataSource(Properties dbProps) { final String simulatorDbName = dbProps.getProperty("db.simulator.name"); final boolean simulatorAutoReconnect = Boolean.parseBoolean(dbProps.getProperty("db.simulator.autoReconnect")); - final GenericObjectPool simulatorConnectionPool = - new GenericObjectPool(null, simulatorMaxActive, GenericObjectPool.DEFAULT_WHEN_EXHAUSTED_ACTION, simulatorMaxWait, simulatorMaxIdle); - final String simulatorConnectionUri = simulatorDriver + "://" + simulatorHost + ":" + simulatorPort + "/" + simulatorDbName + "?autoReconnect=" + simulatorAutoReconnect; DriverLoader.loadDriver(simulatorDriver); - final ConnectionFactory simulatorConnectionFactory = new DriverManagerConnectionFactory(simulatorConnectionUri, simulatorUsername, simulatorPassword); - - final PoolableConnectionFactory simulatorPoolableConnectionFactory = - new PoolableConnectionFactory(simulatorConnectionFactory, simulatorConnectionPool, new StackKeyedObjectPoolFactory(), null, false, false); - s_simulatorDS = new PoolingDataSource(simulatorPoolableConnectionFactory.getPool()); + s_simulatorDS = createDataSource(simulatorConnectionUri, simulatorUsername, simulatorPassword, + simulatorMaxActive, simulatorMaxIdle, simulatorMaxWait, null, null, null, null, cloudValidationQuery, isolationLevel); } catch (Exception e) { s_logger.debug("Simulator DB properties are not available. Not initializing simulator DS"); } @@ -1165,6 +1145,54 @@ public static void initDataSource(Properties dbProps) { } } + /** + * Creates a data source + */ + private static DataSource createDataSource(String uri, String username, String password, + Integer maxActive, Integer maxIdle, Long maxWait, + Long timeBtwnEvictionRuns, Long minEvictableIdleTime, + Boolean testWhileIdle, Boolean testOnBorrow, + String validationQuery, Integer isolationLevel) { + ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(uri, username, password); + PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory, null); + GenericObjectPoolConfig config = createPoolConfig(maxActive, maxIdle, maxWait, timeBtwnEvictionRuns, minEvictableIdleTime, testWhileIdle, testOnBorrow); + ObjectPool<PoolableConnection> connectionPool = new GenericObjectPool<>(poolableConnectionFactory, config); + poolableConnectionFactory.setPool(connectionPool); + if (validationQuery != null) { + poolableConnectionFactory.setValidationQuery(validationQuery); + } + if (isolationLevel != null) { + poolableConnectionFactory.setDefaultTransactionIsolation(isolationLevel); + } + return new PoolingDataSource<>(connectionPool); + } + + /** + * Return a GenericObjectPoolConfig configuration usable on connection pool creation + */ + private static GenericObjectPoolConfig createPoolConfig(Integer maxActive, Integer maxIdle, Long maxWait, + Long timeBtwnEvictionRuns, Long minEvictableIdleTime, + Boolean testWhileIdle, Boolean testOnBorrow) { + GenericObjectPoolConfig config = new GenericObjectPoolConfig(); + config.setMaxTotal(maxActive); + config.setMaxIdle(maxIdle); + config.setMaxWaitMillis(maxWait); + + if (timeBtwnEvictionRuns != null) { + config.setTimeBetweenEvictionRunsMillis(timeBtwnEvictionRuns); + } + if (minEvictableIdleTime != null) { + config.setMinEvictableIdleTimeMillis(minEvictableIdleTime); + } + if (testWhileIdle != null) { + config.setTestWhileIdle(testWhileIdle); + } + if (testOnBorrow != null) { + config.setTestOnBorrow(testOnBorrow); + } + return config; + } + private static String getDBHAParams(String dbName, Properties dbProps) { StringBuilder sb = new StringBuilder(); sb.append("failOverReadOnly=" + dbProps.getProperty("db." + dbName + ".failOverReadOnly")); @@ -1178,11 +1206,10 @@ private static String getDBHAParams(String dbName, Properties dbProps) { @SuppressWarnings({"unchecked", "rawtypes"}) private static DataSource getDefaultDataSource(final String database) { - final GenericObjectPool connectionPool = new GenericObjectPool(null, 5); final ConnectionFactory connectionFactory = new DriverManagerConnectionFactory("jdbc:mysql://localhost:3306/" + database, "cloud", "cloud"); - final PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory, connectionPool, null, null, false, true); - return new PoolingDataSource( - /* connectionPool */poolableConnectionFactory.getPool()); + final PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory, null); + final GenericObjectPool connectionPool = new GenericObjectPool(poolableConnectionFactory); + return new PoolingDataSource(connectionPool); } /** diff --git a/pom.xml b/pom.xml index 2e61773623e..fcae2bede7e 100644 --- a/pom.xml +++ b/pom.xml @@ -50,8 +50,8 @@ <cs.log4j.version>1.2.17</cs.log4j.version> <cs.log4j.extras.version>1.2.17</cs.log4j.extras.version> <cs.cglib.version>3.2.5</cs.cglib.version> - <cs.dbcp.version>1.4</cs.dbcp.version> - <cs.pool.version>1.6</cs.pool.version> + <cs.dbcp.version>2.2.0</cs.dbcp.version> + <cs.pool.version>2.4.3</cs.pool.version> <cs.codec.version>1.11</cs.codec.version> <cs.configuration.version>1.10</cs.configuration.version> <cs.logging.version>1.1.1</cs.logging.version> @@ -271,13 +271,13 @@ <version>${cs.cglib.version}</version> </dependency> <dependency> - <groupId>commons-dbcp</groupId> - <artifactId>commons-dbcp</artifactId> + <groupId>org.apache.commons</groupId> + <artifactId>commons-dbcp2</artifactId> <version>${cs.dbcp.version}</version> <exclusions> <exclusion> - <artifactId>commons-pool</artifactId> - <groupId>commons-pool</groupId> + <artifactId>org.apache.commons</artifactId> + <groupId>commons-pool2</groupId> </exclusion> </exclusions> </dependency> @@ -297,8 +297,8 @@ <version>${cs.commons-fileupload.version}</version> </dependency> <dependency> - <groupId>commons-pool</groupId> - <artifactId>commons-pool</artifactId> + <groupId>org.apache.commons</groupId> + <artifactId>commons-pool2</artifactId> <version>${cs.pool.version}</version> </dependency> <dependency> ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org With regards, Apache Git Services