You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by sw...@apache.org on 2016/12/01 08:13:55 UTC
[12/50] ambari git commit: AMBARI-18951. Force InnoDB usage for
MySQL. (mpapirkovskyy)
AMBARI-18951. Force InnoDB usage for MySQL. (mpapirkovskyy)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/98e41c67
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/98e41c67
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/98e41c67
Branch: refs/heads/branch-feature-AMBARI-18901
Commit: 98e41c677b2e22e694eda27ee6217d560ac4dbe2
Parents: 911b917
Author: Myroslav Papirkovskyi <mp...@hortonworks.com>
Authored: Mon Nov 28 18:25:07 2016 +0200
Committer: Myroslav Papirkovskyi <mp...@hortonworks.com>
Committed: Mon Nov 28 18:44:23 2016 +0200
----------------------------------------------------------------------
.../server/orm/helpers/dbms/MySqlHelper.java | 18 ++++++++++
.../server/upgrade/SchemaUpgradeHelper.java | 35 +++++++++++++++++++-
.../main/resources/Ambari-DDL-MySQL-CREATE.sql | 1 +
3 files changed, 53 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/98e41c67/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/MySqlHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/MySqlHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/MySqlHelper.java
index 38fe062..8a83c90 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/MySqlHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/MySqlHelper.java
@@ -19,8 +19,13 @@
package org.apache.ambari.server.orm.helpers.dbms;
import org.apache.ambari.server.orm.DBAccessor;
+import org.eclipse.persistence.exceptions.ValidationException;
import org.eclipse.persistence.platform.database.DatabasePlatform;
+import java.io.IOException;
+import java.io.Writer;
+import java.util.List;
+
public class MySqlHelper extends GenericDbmsHelper {
public MySqlHelper(DatabasePlatform databasePlatform) {
super(databasePlatform);
@@ -75,4 +80,17 @@ public class MySqlHelper extends GenericDbmsHelper {
.append("AND constraints.TABLE_NAME = \"").append(tableName).append("\"");
return statement.toString();
}
+
+ @Override
+ public Writer writeCreateTableStatement(Writer writer, String tableName,
+ List<DBAccessor.DBColumnInfo> columns,
+ List<String> primaryKeyColumns) {
+ Writer defaultWriter = super.writeCreateTableStatement(writer, tableName, columns, primaryKeyColumns);
+ try {
+ defaultWriter.write(" ENGINE=INNODB");
+ } catch (IOException e) {
+ throw ValidationException.fileError(e);
+ }
+ return defaultWriter;
+ }
}
http://git-wip-us.apache.org/repos/asf/ambari/blob/98e41c67/ambari-server/src/main/java/org/apache/ambari/server/upgrade/SchemaUpgradeHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/SchemaUpgradeHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/SchemaUpgradeHelper.java
index f772024..1b5503e 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/SchemaUpgradeHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/SchemaUpgradeHelper.java
@@ -45,6 +45,7 @@ import com.google.inject.Inject;
import com.google.inject.Injector;
import com.google.inject.multibindings.Multibinder;
import com.google.inject.persist.PersistService;
+import org.springframework.jdbc.support.JdbcUtils;
public class SchemaUpgradeHelper {
private static final Logger LOG = LoggerFactory.getLogger
@@ -330,7 +331,7 @@ public class SchemaUpgradeHelper {
/**
* Checks if source version meets minimal requirements for upgrade
*
- * @param minUpgradeVersion min allowed version for the upgrade, could be obtained via {@link SchemaUpgradeHelper.getMinimalUpgradeCatalogVersion}
+ * @param minUpgradeVersion min allowed version for the upgrade, could be obtained via {@link #getMinimalUpgradeCatalogVersion()}
* @param sourceVersion current version of the Database, which need to be upgraded
*
* @return true if upgrade is allowed or false if not
@@ -343,6 +344,29 @@ public class SchemaUpgradeHelper {
return VersionUtils.compareVersions(sourceVersion, minUpgradeVersion) >= 0;
}
+ private List<String> getMyISAMTables() throws SQLException {
+ if (!configuration.getDatabaseType().equals(Configuration.DatabaseType.MYSQL)) {
+ return Collections.emptyList();
+ }
+ List<String> myISAMTables = new ArrayList<>();
+ String query = String.format("SELECT table_name FROM information_schema.tables WHERE table_schema = '%s' " +
+ "AND engine = 'MyISAM' AND table_type = 'BASE TABLE'", configuration.getServerDBName());
+ Statement statement = null;
+ ResultSet rs = null;
+ try {
+ statement = dbAccessor.getConnection().createStatement();
+ rs = statement.executeQuery(query);
+ if (rs != null) {
+ while (rs.next()) {
+ myISAMTables.add(rs.getString("table_name"));
+ }
+ }
+ } finally {
+ JdbcUtils.closeResultSet(rs);
+ JdbcUtils.closeStatement(statement);
+ }
+ return myISAMTables;
+ }
/**
* Upgrade Ambari DB schema to the target version passed in as the only
@@ -363,6 +387,15 @@ public class SchemaUpgradeHelper {
Injector injector = Guice.createInjector(new UpgradeHelperModule(), new AuditLoggerModule());
SchemaUpgradeHelper schemaUpgradeHelper = injector.getInstance(SchemaUpgradeHelper.class);
+ //Fail if MySQL database has tables with MyISAM engine
+ List<String> myISAMTables = schemaUpgradeHelper.getMyISAMTables();
+ if (!myISAMTables.isEmpty()) {
+ String errorMessage = String.format("Unsupported MyISAM table %s detected. " +
+ "For correct upgrade database should be migrated to InnoDB engine.", myISAMTables.get(0));
+ LOG.error(errorMessage);
+ throw new AmbariException(errorMessage);
+ }
+
String targetVersion = schemaUpgradeHelper.getAmbariServerVersion();
LOG.info("Upgrading schema to target version = " + targetVersion);
http://git-wip-us.apache.org/repos/asf/ambari/blob/98e41c67/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
index 09042b5..b01ed2f 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
@@ -26,6 +26,7 @@ delimiter ;
# USE @schema;
+SET default_storage_engine=INNODB;
CREATE TABLE stack(
stack_id BIGINT NOT NULL,