Repository: ambari Updated Branches: refs/heads/trunk 4ade1cd85 -> 21a74e9f8
AMBARI-10412. Incorrect datatype of alert_current.latest_text in Oracle DDL and upgrade catalog.. (mpapirkovskyy) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/21a74e9f Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/21a74e9f Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/21a74e9f Branch: refs/heads/trunk Commit: 21a74e9f890d75cfc8f5d294bceb600dc6bb46ac Parents: 4ade1cd Author: Myroslav Papirkovskyy <[email protected]> Authored: Thu May 14 19:45:09 2015 +0300 Committer: Myroslav Papirkovskyy <[email protected]> Committed: Fri May 15 19:14:03 2015 +0300 ---------------------------------------------------------------------- .../apache/ambari/server/orm/DBAccessor.java | 30 ++++++++++++++------ .../server/orm/entities/AlertCurrentEntity.java | 6 ++-- .../orm/helpers/dbms/GenericDbmsHelper.java | 6 ++-- .../server/upgrade/UpgradeCatalog210.java | 15 +++++++++- .../main/resources/Ambari-DDL-Oracle-CREATE.sql | 2 +- 5 files changed, 44 insertions(+), 15 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/21a74e9f/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessor.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessor.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessor.java index 2b01c72..2c9277a 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessor.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/DBAccessor.java @@ -23,6 +23,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; +import org.eclipse.persistence.internal.databaseaccess.FieldTypeDefinition; import org.eclipse.persistence.sessions.DatabaseSession; /** @@ -400,11 +401,12 @@ public interface DBAccessor { public class DBColumnInfo { private String name; private Class type; -// private DBColumnType type; private Integer length; private Object defaultValue; private boolean isNullable; + private FieldTypeDefinition dbType = null; + public DBColumnInfo(String name, Class type, Integer length) { this(name, type, length, null, true); } @@ -418,6 +420,18 @@ public interface DBAccessor { isNullable = nullable; } + public DBColumnInfo(String name, FieldTypeDefinition dbType, Integer length, Object defaultValue, boolean isNullable) { + this.name = name; + this.length = length; + this.isNullable = isNullable; + this.defaultValue = defaultValue; + this.dbType = dbType; + } + + public DBColumnInfo(String name, FieldTypeDefinition dbType, Integer length) { + this(name, dbType, length, null, true); + } + public String getName() { return name; } @@ -458,14 +472,12 @@ public interface DBAccessor { isNullable = nullable; } - public enum DBColumnType { - VARCHAR, - CHAR, - INT, - LONG, - BOOL, - TIME, - BLOB + public FieldTypeDefinition getDbType() { + return dbType; + } + + public void setDbType(FieldTypeDefinition dbType) { + this.dbType = dbType; } } http://git-wip-us.apache.org/repos/asf/ambari/blob/21a74e9f/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/AlertCurrentEntity.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/AlertCurrentEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/AlertCurrentEntity.java index 26e0d00..66b2a83 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/AlertCurrentEntity.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/AlertCurrentEntity.java @@ -26,6 +26,7 @@ import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; +import javax.persistence.Lob; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.OneToOne; @@ -75,7 +76,8 @@ public class AlertCurrentEntity { @Column(name = "original_timestamp", nullable = false) private Long originalTimestamp; - @Column(name = "latest_text", length = 4000) + @Lob + @Column(name = "latest_text") private String latestText = null; /** @@ -250,4 +252,4 @@ public class AlertCurrentEntity { int result = null != alertId ? alertId.hashCode() : 0; return result; } -} \ No newline at end of file +} http://git-wip-us.apache.org/repos/asf/ambari/blob/21a74e9f/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/GenericDbmsHelper.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/GenericDbmsHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/GenericDbmsHelper.java index 9816133..5783f44 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/GenericDbmsHelper.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/helpers/dbms/GenericDbmsHelper.java @@ -90,9 +90,11 @@ public class GenericDbmsHelper implements DbmsHelper { } public StringBuilder writeColumnType(StringBuilder builder, DBAccessor.DBColumnInfo columnInfo) { - FieldTypeDefinition fieldType; + FieldTypeDefinition fieldType = columnInfo.getDbType(); - fieldType = databasePlatform.getFieldTypeDefinition(columnInfo.getType()); + if (fieldType == null) { + fieldType = databasePlatform.getFieldTypeDefinition(columnInfo.getType()); + } if (fieldType == null) { throw new IllegalArgumentException("Unable to convert data type"); http://git-wip-us.apache.org/repos/asf/ambari/blob/21a74e9f/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java index c023ae1..b10d3a5 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog210.java @@ -41,6 +41,7 @@ import org.apache.ambari.server.state.Service; import org.apache.ambari.server.state.StackId; import org.apache.ambari.server.state.stack.OsFamily; import org.apache.commons.lang.StringUtils; +import org.eclipse.persistence.internal.databaseaccess.FieldTypeDefinition; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -147,6 +148,7 @@ public class UpgradeCatalog210 extends AbstractUpgradeCatalog { */ @Override protected void executeDDLUpdates() throws AmbariException, SQLException { + executeDDLFixes(); executeHostsDDLUpdates(); executeWidgetDDLUpdates(); executeStackDDLUpdates(); @@ -239,6 +241,17 @@ public class UpgradeCatalog210 extends AbstractUpgradeCatalog { cleanupStackUpdates(); } + private void executeDDLFixes() throws AmbariException, SQLException { + //Fix latest_text column type to match for all DBMS + Configuration.DatabaseType databaseType = configuration.getDatabaseType(); + if (Configuration.DatabaseType.MYSQL == databaseType) { + dbAccessor.alterColumn("alert_current", new DBColumnInfo("latest_text", new FieldTypeDefinition("TEXT"), null)); + } else { + dbAccessor.alterColumn("alert_current", new DBColumnInfo("latest_text", Character[].class, null)); + } + + } + /** * Execute all of the hosts DDL updates. * @@ -513,7 +526,7 @@ public class UpgradeCatalog210 extends AbstractUpgradeCatalog { columns.add(new DBColumnInfo("layout_name", String.class, 255, null, false)); columns.add(new DBColumnInfo("section_name", String.class, 255, null, false)); columns.add(new DBColumnInfo("cluster_id", Long.class, null, null, false)); - columns.add(new DBColumnInfo("scope", String.class, 255, null, false)); + columns.add(new DBColumnInfo("scope", String.class, 255, null, false)); columns.add(new DBColumnInfo("user_name", String.class, 255, null, false)); columns.add(new DBColumnInfo("display_name", String.class, 255, null, true)); http://git-wip-us.apache.org/repos/asf/ambari/blob/21a74e9f/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql index 5d79618..d092e76 100644 --- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql +++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql @@ -781,7 +781,7 @@ CREATE TABLE alert_current ( maintenance_state VARCHAR2(255) NOT NULL, original_timestamp NUMBER(19) NOT NULL, latest_timestamp NUMBER(19) NOT NULL, - latest_text VARCHAR2(4000), + latest_text CLOB, PRIMARY KEY (alert_id), FOREIGN KEY (definition_id) REFERENCES alert_definition(definition_id), FOREIGN KEY (history_id) REFERENCES alert_history(alert_id)
