update mysql dependency version (#394)

* update mysql dependency version

* Enable scrollTolerantForwardOnly property in the DB connection, to preserve the legacy behavior of Connector - tolerating backward and absolute cursor movements on result sets of type ResultSet.TYPE_FORWARD_ONLY

References:
https://dev.mysql.com/doc/relnotes/connector-j/en/news-8-0-24.html
https://dev.mysql.com/doc/connector-j/en/connector-j-connp-props-result-sets.html#cj-conn-prop_scrollTolerantForwardOnly

---------

Co-authored-by: Marcus Sorensen <mls@apple.com>
Co-authored-by: Suresh Kumar Anaparti <suresh.anaparti@shapeblue.com>
This commit is contained in:
Marcus Sorensen 2024-03-21 05:38:53 -07:00 committed by GitHub
parent a1122d175e
commit 6a28cb33ff
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 11 additions and 8 deletions

View File

@ -74,7 +74,7 @@ public class DatabaseCreator {
private static void runQuery(String host, String port, String rootPassword, String query, boolean dryRun) {
System.out.println("============> Running query: " + query);
try (Connection conn = DriverManager.getConnection(String.format("jdbc:mysql://%s:%s/", host, port), "root", rootPassword);
try (Connection conn = DriverManager.getConnection(String.format("jdbc:mysql://%s:%s/?" + TransactionLegacy.CONNECTION_PARAMS, host, port), "root", rootPassword);
Statement stmt = conn.createStatement();){
if (!dryRun)
stmt.executeUpdate(query);

View File

@ -82,6 +82,8 @@ public class TransactionLegacy implements Closeable {
public static final short CONNECTED_DB = -1;
public static final String CONNECTION_PARAMS = "scrollTolerantForwardOnly=true";
private static AtomicLong s_id = new AtomicLong();
private static final TransactionMBeanImpl s_mbean = new TransactionMBeanImpl();
static {
@ -1079,7 +1081,7 @@ public class TransactionLegacy implements Closeable {
}
final String cloudConnectionUri = cloudDriver + "://" + cloudHost + (s_dbHAEnabled ? "," + cloudReplicas : "") + ":" + cloudPort + "/" + cloudDbName +
"?autoReconnect=" + cloudAutoReconnect + (url != null ? "&" + url : "") + (useSSL ? "&useSSL=true" : "") +
"?" + CONNECTION_PARAMS + "&autoReconnect=" + cloudAutoReconnect + (url != null ? "&" + url : "") + (useSSL ? "&useSSL=true" : "") +
(s_dbHAEnabled ? "&" + cloudDbHAParams : "") + (s_dbHAEnabled ? "&loadBalanceStrategy=" + loadBalanceStrategy : "");
DriverLoader.loadDriver(cloudDriver);
@ -1102,7 +1104,7 @@ public class TransactionLegacy implements Closeable {
final String usageUrl = dbProps.getProperty("db.usage.url.params");
final String usageConnectionUri = usageDriver + "://" + usageHost + (s_dbHAEnabled ? "," + dbProps.getProperty("db.cloud.replicas") : "") + ":" + usagePort +
"/" + usageDbName + "?autoReconnect=" + usageAutoReconnect + (usageUrl != null ? "&" + usageUrl : "") +
"/" + usageDbName + "?" + CONNECTION_PARAMS + "&autoReconnect=" + usageAutoReconnect + (usageUrl != null ? "&" + usageUrl : "") +
(s_dbHAEnabled ? "&" + getDBHAParams("usage", dbProps) : "") + (s_dbHAEnabled ? "&loadBalanceStrategy=" + loadBalanceStrategy : "");
DriverLoader.loadDriver(usageDriver);
@ -1124,7 +1126,7 @@ public class TransactionLegacy implements Closeable {
final String simulatorDbName = dbProps.getProperty("db.simulator.name");
final boolean simulatorAutoReconnect = Boolean.parseBoolean(dbProps.getProperty("db.simulator.autoReconnect"));
final String simulatorConnectionUri = simulatorDriver + "://" + simulatorHost + ":" + simulatorPort + "/" + simulatorDbName + "?autoReconnect=" +
final String simulatorConnectionUri = simulatorDriver + "://" + simulatorHost + ":" + simulatorPort + "/" + simulatorDbName + "?" + CONNECTION_PARAMS + "&autoReconnect=" +
simulatorAutoReconnect;
DriverLoader.loadDriver(simulatorDriver);
@ -1204,7 +1206,7 @@ public class TransactionLegacy implements Closeable {
@SuppressWarnings({"unchecked", "rawtypes"})
private static DataSource getDefaultDataSource(final String database) {
final ConnectionFactory connectionFactory = new DriverManagerConnectionFactory("jdbc:mysql://localhost:3306/" + database, "cloud", "cloud");
final ConnectionFactory connectionFactory = new DriverManagerConnectionFactory("jdbc:mysql://localhost:3306/" + database + "?" + CONNECTION_PARAMS, "cloud", "cloud");
final PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory, null);
final GenericObjectPool connectionPool = new GenericObjectPool(poolableConnectionFactory);
return new PoolingDataSource(connectionPool);

View File

@ -164,7 +164,7 @@
<cs.kafka-clients.version>2.7.0</cs.kafka-clients.version>
<cs.libvirt-java.version>0.5.3</cs.libvirt-java.version>
<cs.mail.version>1.5.0-b01</cs.mail.version>
<cs.mysql.version>8.0.19</cs.mysql.version>
<cs.mysql.version>8.0.33</cs.mysql.version>
<cs.neethi.version>2.0.4</cs.neethi.version>
<cs.nitro.version>10.1</cs.nitro.version>
<cs.opensaml.version>2.6.6</cs.opensaml.version>

View File

@ -85,7 +85,7 @@ public abstract class TestCase {
this.conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
this.conn = DriverManager.getConnection("jdbc:mysql://" + param.get("db") + "/cloud", "root", dbPassword);
this.conn = DriverManager.getConnection("jdbc:mysql://" + param.get("db") + "/cloud?" + TransactionLegacy.CONNECTION_PARAMS, "root", dbPassword);
if (!this.conn.isValid(0)) {
s_logger.error("Connection to DB failed to establish");
}

View File

@ -41,6 +41,7 @@ import org.junit.runners.Parameterized.Parameters;
import org.mockito.Mockito;
import com.cloud.utils.PropertiesUtil;
import com.cloud.utils.db.TransactionLegacy;
@RunWith(Parameterized.class)
public class UsageSanityCheckerIT{
@ -106,7 +107,7 @@ public class UsageSanityCheckerIT{
protected Connection createConnection(String dbSchema) throws SQLException {
String cloudDbUrl = "jdbc:mysql://"+properties.getProperty("db."+dbSchema+".host") +
":" + properties.getProperty("db."+dbSchema+".port") + "/" +
properties.getProperty("db."+dbSchema+".name");
properties.getProperty("db."+dbSchema+".name") + "?" + TransactionLegacy.CONNECTION_PARAMS;
return DriverManager.getConnection(cloudDbUrl, properties.getProperty("db."+dbSchema+".username"),
properties.getProperty("db."+dbSchema+".password"));
}