浏览代码

AMBARI-5452. Ambari schema does not upgrade on 1.4.3 and 1.4.4 with MySQL as Ambari DB. (Mahadev konar, swagle via swagle)

Siddharth Wagle 11 年之前
父节点
当前提交
fcbd817a03

+ 9 - 2
ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog151.java

@@ -20,6 +20,7 @@ package org.apache.ambari.server.upgrade;
 import com.google.inject.Inject;
 import com.google.inject.Injector;
 import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.orm.DBAccessor;
 
 import java.sql.SQLException;
@@ -101,8 +102,14 @@ public class UpgradeCatalog151 extends AbstractUpgradeCatalog {
     columns.add(new DBAccessor.DBColumnInfo("subResource_names", String.class, 255, null, true));
     columns.add(new DBAccessor.DBColumnInfo("provider", String.class, 255, null, true));
     columns.add(new DBAccessor.DBColumnInfo("service", String.class, 255, null, true));
-    columns.add(new DBAccessor.DBColumnInfo("\"resource\"", String.class, 255, null, true)); //TODO incorrect name for oracle
-
+    if (Configuration.MYSQL_DB_NAME.equals(getDbType())) {
+      columns.add(new DBAccessor.DBColumnInfo("`resource`", String.class, 255, null, true));
+      //TODO incorrect name for MySQL
+    	
+    } else{
+      columns.add(new DBAccessor.DBColumnInfo("\"resource\"", String.class, 255, null, true)); 
+        //TODO incorrect name for oracle
+    }
     dbAccessor.createTable("viewresource", columns, "view_name", "name");
 
 

+ 13 - 3
ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog151Test.java

@@ -21,16 +21,19 @@ import com.google.inject.Binder;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 import com.google.inject.Module;
+import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.orm.DBAccessor;
 import org.apache.ambari.server.orm.dao.MetainfoDAO;
 import org.easymock.EasyMock;
 import org.junit.Assert;
 import org.junit.Test;
 
+import java.lang.reflect.Field;
 import java.util.List;
 
 import static org.easymock.EasyMock.eq;
 import static org.easymock.EasyMock.createNiceMock;
+import static org.easymock.EasyMock.expect;
 import static org.easymock.EasyMock.replay;
 import static org.easymock.EasyMock.verify;
 
@@ -45,6 +48,9 @@ public class UpgradeCatalog151Test {
 
     final DBAccessor dbAccessor = createNiceMock(DBAccessor.class);
 
+    Configuration configuration = createNiceMock(Configuration.class);
+    expect(configuration.getDatabaseUrl()).andReturn(Configuration.JDBC_IN_MEMORY_URL).anyTimes();
+
     dbAccessor.createTable(eq("viewmain"), EasyMock.<List<DBAccessor.DBColumnInfo>>anyObject(), eq("view_name"));
     dbAccessor.createTable(eq("viewinstancedata"), EasyMock.<List<DBAccessor.DBColumnInfo>>anyObject(),
         eq("view_name"), eq("view_instance_name"), eq("name"));
@@ -61,11 +67,15 @@ public class UpgradeCatalog151Test {
     dbAccessor.addFKConstraint("viewresource", "FK_viewres_view_name", "view_name", "viewmain", "view_name", true);
     dbAccessor.addFKConstraint("viewinstance", "FK_viewinst_view_name", "view_name", "viewmain", "view_name", true);
 
-    replay(dbAccessor);
-
+    replay(dbAccessor, configuration);
     AbstractUpgradeCatalog upgradeCatalog = getUpgradeCatalog(dbAccessor);
+    Class<?> c = AbstractUpgradeCatalog.class;
+    Field f = c.getDeclaredField("configuration");
+    f.setAccessible(true);
+    f.set(upgradeCatalog, configuration);
+
     upgradeCatalog.executeDDLUpdates();
-    verify(dbAccessor);
+    verify(dbAccessor, configuration);
   }
 
   @Test