You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jo...@apache.org on 2015/06/05 17:54:58 UTC

ambari git commit: AMBARI-11726 - Alert History Cannot Insert Into Oracle Database (jonathanhurley)

Repository: ambari
Updated Branches:
  refs/heads/trunk ae679e4ef -> 13a74fb21


AMBARI-11726 - Alert History Cannot Insert Into Oracle Database (jonathanhurley)


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/13a74fb2
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/13a74fb2
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/13a74fb2

Branch: refs/heads/trunk
Commit: 13a74fb21a7cda988d35f94d1e8b90b32ceb5fc2
Parents: ae679e4
Author: Jonathan Hurley <jh...@hortonworks.com>
Authored: Fri Jun 5 11:54:49 2015 -0400
Committer: Jonathan Hurley <jh...@hortonworks.com>
Committed: Fri Jun 5 11:54:49 2015 -0400

----------------------------------------------------------------------
 .../server/orm/entities/AlertHistoryEntity.java |   4 +-
 .../server/upgrade/UpgradeCatalog210.java       |  52 +++++----
 .../main/resources/Ambari-DDL-Oracle-CREATE.sql |   2 +-
 .../server/upgrade/UpgradeCatalog210Test.java   | 112 ++++++++++++++-----
 4 files changed, 116 insertions(+), 54 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/13a74fb2/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/AlertHistoryEntity.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/AlertHistoryEntity.java b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/AlertHistoryEntity.java
index 8423abe..9091398 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/AlertHistoryEntity.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/orm/entities/AlertHistoryEntity.java
@@ -25,6 +25,7 @@ import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
 import javax.persistence.ManyToOne;
 import javax.persistence.NamedQueries;
 import javax.persistence.NamedQuery;
@@ -68,7 +69,8 @@ public class AlertHistoryEntity {
   @Column(name = "alert_state", nullable = false, length = 255)
   private AlertState alertState;
 
-  @Column(name = "alert_text", length = 32672)
+  @Lob
+  @Column(name = "alert_text")
   private String alertText;
 
   @Column(name = "alert_timestamp", nullable = false)

http://git-wip-us.apache.org/repos/asf/ambari/blob/13a74fb2/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 d83940e..a7a8cee 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
@@ -18,12 +18,22 @@
 
 package org.apache.ambari.server.upgrade;
 
-import com.google.gson.Gson;
-import com.google.gson.JsonObject;
-import com.google.gson.JsonParser;
-import com.google.inject.Inject;
-import com.google.inject.Injector;
-import com.google.inject.persist.Transactional;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.persistence.EntityManager;
+import javax.persistence.Query;
+import javax.persistence.criteria.CriteriaBuilder;
+import javax.persistence.criteria.CriteriaDelete;
+import javax.persistence.criteria.Root;
+
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.configuration.Configuration;
@@ -50,20 +60,12 @@ import org.eclipse.persistence.internal.databaseaccess.FieldTypeDefinition;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.persistence.EntityManager;
-import javax.persistence.Query;
-import javax.persistence.criteria.CriteriaBuilder;
-import javax.persistence.criteria.CriteriaDelete;
-import javax.persistence.criteria.Root;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import com.google.gson.Gson;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+import com.google.inject.persist.Transactional;
 
 
 /**
@@ -118,7 +120,7 @@ public class UpgradeCatalog210 extends AbstractUpgradeCatalog {
 
   @Inject
   private OsFamily osFamily;
-  
+
   /**
    * {@inheritDoc}
    */
@@ -163,7 +165,7 @@ public class UpgradeCatalog210 extends AbstractUpgradeCatalog {
    */
   @Override
   protected void executeDDLUpdates() throws AmbariException, SQLException {
-    executeDDLFixes();
+    executeAlertDDLUpdates();
     executeHostsDDLUpdates();
     executeWidgetDDLUpdates();
     executeStackDDLUpdates();
@@ -258,13 +260,15 @@ public class UpgradeCatalog210 extends AbstractUpgradeCatalog {
     cleanupStackUpdates();
   }
 
-  private void executeDDLFixes() throws AmbariException, SQLException {
+  private void executeAlertDDLUpdates() 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));
+      dbAccessor.alterColumn("alert_history", new DBColumnInfo("alert_text", new FieldTypeDefinition("TEXT"), null));
     } else {
       dbAccessor.alterColumn("alert_current", new DBColumnInfo("latest_text", Character[].class, null));
+      dbAccessor.alterColumn("alert_history", new DBColumnInfo("alert_text", Character[].class, null));
     }
 
   }
@@ -1038,7 +1042,7 @@ public class UpgradeCatalog210 extends AbstractUpgradeCatalog {
     updateHiveConfigs();
     updateHdfsConfigs();
   }
-  
+
   protected void updateHdfsConfigs() throws AmbariException {
     /***
      * Append -Dorg.mortbay.jetty.Request.maxFormContentSize=-1 to HADOOP_NAMENODE_OPTS from hadoop-env.sh

http://git-wip-us.apache.org/repos/asf/ambari/blob/13a74fb2/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 fdd5ef8..93d6f6e 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-Oracle-CREATE.sql
@@ -768,7 +768,7 @@ CREATE TABLE alert_history (
   alert_timestamp NUMBER(19) NOT NULL,
   alert_label VARCHAR2(1024),
   alert_state VARCHAR2(255) NOT NULL,
-  alert_text VARCHAR2(4000),
+  alert_text CLOB,
   PRIMARY KEY (alert_id),
   FOREIGN KEY (alert_definition_id) REFERENCES alert_definition(definition_id),
   FOREIGN KEY (cluster_id) REFERENCES clusters(cluster_id)

http://git-wip-us.apache.org/repos/asf/ambari/blob/13a74fb2/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java
index e41ce0b..d8a2565 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog210Test.java
@@ -18,12 +18,29 @@
 
 package org.apache.ambari.server.upgrade;
 
-import com.google.inject.Binder;
-import com.google.inject.Guice;
-import com.google.inject.Injector;
-import com.google.inject.Module;
-import com.google.inject.Provider;
-import com.google.inject.persist.PersistService;
+import static junit.framework.Assert.assertEquals;
+import static org.easymock.EasyMock.capture;
+import static org.easymock.EasyMock.createMockBuilder;
+import static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.createStrictMock;
+import static org.easymock.EasyMock.eq;
+import static org.easymock.EasyMock.expect;
+import static org.easymock.EasyMock.expectLastCall;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.reset;
+import static org.easymock.EasyMock.verify;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.persistence.EntityManager;
+
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.AmbariManagementController;
@@ -54,27 +71,13 @@ import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import javax.persistence.EntityManager;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.sql.Connection;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import static junit.framework.Assert.assertEquals;
-import static org.easymock.EasyMock.capture;
-import static org.easymock.EasyMock.createMockBuilder;
-import static org.easymock.EasyMock.createNiceMock;
-import static org.easymock.EasyMock.createStrictMock;
-import static org.easymock.EasyMock.eq;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.reset;
-import static org.easymock.EasyMock.verify;
+
+import com.google.inject.Binder;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.Module;
+import com.google.inject.Provider;
+import com.google.inject.persist.PersistService;
 
 /**
  * {@link org.apache.ambari.server.upgrade.UpgradeCatalog210} unit tests.
@@ -110,17 +113,18 @@ public class UpgradeCatalog210Test {
   @Test
   public void testExecuteDDLUpdates() throws Exception {
     final DBAccessor dbAccessor = createNiceMock(DBAccessor.class);
-    Connection connection = createNiceMock(Connection.class);
     Configuration configuration = createNiceMock(Configuration.class);
     ResultSet resultSet = createNiceMock(ResultSet.class);
     expect(configuration.getDatabaseUrl()).andReturn(Configuration.JDBC_IN_MEMORY_URL).anyTimes();
 
     // Create DDL sections with their own capture groups
+    AlertSectionDDL alertSectionDDL = new AlertSectionDDL();
     HostSectionDDL hostSectionDDL = new HostSectionDDL();
     WidgetSectionDDL widgetSectionDDL = new WidgetSectionDDL();
     ViewSectionDDL viewSectionDDL = new ViewSectionDDL();
 
     // Execute any DDL schema changes
+    alertSectionDDL.execute(dbAccessor);
     hostSectionDDL.execute(dbAccessor);
     widgetSectionDDL.execute(dbAccessor);
     viewSectionDDL.execute(dbAccessor);
@@ -138,6 +142,7 @@ public class UpgradeCatalog210Test {
     verify(dbAccessor, configuration, resultSet);
 
     // Verify sections
+    alertSectionDDL.verify(dbAccessor);
     hostSectionDDL.verify(dbAccessor);
     widgetSectionDDL.verify(dbAccessor);
     viewSectionDDL.verify(dbAccessor);
@@ -537,4 +542,55 @@ public class UpgradeCatalog210Test {
       Assert.assertEquals("cluster_config", clusterConfigColumn.getName());
     }
   }
+
+  /**
+   * Verify view changes
+   */
+  class AlertSectionDDL implements SectionDDL {
+
+    HashMap<String, Capture<DBColumnInfo>> captures;
+
+    public AlertSectionDDL() {
+      captures = new HashMap<String, Capture<DBColumnInfo>>();
+
+      Capture<DBAccessor.DBColumnInfo> alertCurrentColumnCapture = new Capture<DBAccessor.DBColumnInfo>();
+      Capture<DBAccessor.DBColumnInfo> alertHistoryColumnCapture = new Capture<DBAccessor.DBColumnInfo>();
+
+      captures.put("alert_current", alertCurrentColumnCapture);
+      captures.put("alert_history", alertHistoryColumnCapture);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void execute(DBAccessor dbAccessor) throws SQLException {
+      Capture<DBColumnInfo> alertCurrentColumnCapture = captures.get("alert_current");
+      Capture<DBColumnInfo> alertHistoryColumnCapture = captures.get("alert_history");
+
+      dbAccessor.alterColumn(eq("alert_current"), capture(alertCurrentColumnCapture));
+      dbAccessor.alterColumn(eq("alert_history"), capture(alertHistoryColumnCapture));
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    @Override
+    public void verify(DBAccessor dbAccessor) throws SQLException {
+      verifyAlertCurrent(captures.get("alert_current"));
+      verifyAlertHistory(captures.get("alert_history"));
+    }
+
+    private void verifyAlertCurrent(Capture<DBAccessor.DBColumnInfo> alertCurrentColumnCapture) {
+      DBColumnInfo latestTextColumn = alertCurrentColumnCapture.getValue();
+      Assert.assertEquals(Character[].class, latestTextColumn.getType());
+      Assert.assertEquals("latest_text", latestTextColumn.getName());
+    }
+
+    private void verifyAlertHistory(Capture<DBAccessor.DBColumnInfo> alertHistoryColumnCapture) {
+      DBColumnInfo alertTextColumn = alertHistoryColumnCapture.getValue();
+      Assert.assertEquals(Character[].class, alertTextColumn.getType());
+      Assert.assertEquals("alert_text", alertTextColumn.getName());
+    }
+  }
 }