Repository: ambari
Updated Branches:
  refs/heads/branch-feature-AMBARI-18456 a851d8f12 -> 20f297803


AMBARI-18532. Part_2.Getting errors with max length 1000byte, when using Mysql 
db with charset UTF8.(vbrodetskyi)


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

Branch: refs/heads/branch-feature-AMBARI-18456
Commit: d4f24d3313f850eeee597682c6f15bdf5106e297
Parents: 2131466
Author: Vitaly Brodetskyi <vbrodets...@hortonworks.com>
Authored: Thu Oct 13 04:11:14 2016 +0300
Committer: Vitaly Brodetskyi <vbrodets...@hortonworks.com>
Committed: Thu Oct 13 04:11:14 2016 +0300

----------------------------------------------------------------------
 .../server/upgrade/SchemaUpgradeHelper.java     |   1 +
 .../server/upgrade/UpgradeCatalog242.java       | 124 ++++++++++
 .../main/resources/Ambari-DDL-MySQL-CREATE.sql  |   2 +-
 .../server/upgrade/UpgradeCatalog242Test.java   | 226 +++++++++++++++++++
 4 files changed, 352 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/d4f24d33/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 54ffec5..38bd6e1 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
@@ -192,6 +192,7 @@ public class SchemaUpgradeHelper {
       catalogBinder.addBinding().to(UpgradeCatalog222.class);
       catalogBinder.addBinding().to(UpgradeCatalog230.class);
       catalogBinder.addBinding().to(UpgradeCatalog240.class);
+      catalogBinder.addBinding().to(UpgradeCatalog242.class);
       catalogBinder.addBinding().to(UpgradeCatalog250.class);
       catalogBinder.addBinding().to(UpgradeCatalog300.class);
       catalogBinder.addBinding().to(FinalUpgradeCatalog.class);

http://git-wip-us.apache.org/repos/asf/ambari/blob/d4f24d33/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog242.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog242.java
 
b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog242.java
new file mode 100644
index 0000000..6fa3e68
--- /dev/null
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog242.java
@@ -0,0 +1,124 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ambari.server.upgrade;
+
+import java.sql.SQLException;
+
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.configuration.Configuration;
+import org.apache.ambari.server.orm.DBAccessor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+
+/**
+ * Upgrade catalog for version 2.4.2.
+ */
+public class UpgradeCatalog242 extends AbstractUpgradeCatalog {
+
+  protected static final String EXTENSION_TABLE = "extension";
+  protected static final String USERS_TABLE = "users";
+  protected static final String HOST_ROLE_COMMAND_TABLE = "host_role_command";
+  protected static final String BLUEPRINT_TABLE = "blueprint";
+
+  protected static final String BLUEPRINT_NAME_COLUMN = "blueprint_name";
+  protected static final String EXTENSION_NAME_COLUMN = "extension_name";
+  protected static final String EXTENSION_VERSION_COLUMN = "extension_version";
+  protected static final String USER_TYPE_COLUMN = "user_type";
+  protected static final String USER_NAME_COLUMN = "user_name";
+  protected static final String ROLE_COLUMN = "role";
+  protected static final String STATUS_COLUMN = "status";
+
+
+  /**
+   * Logger.
+   */
+  private static final Logger LOG = 
LoggerFactory.getLogger(UpgradeCatalog242.class);
+
+
+
+
+  // ----- Constructors ------------------------------------------------------
+
+  /**
+   * Don't forget to register new UpgradeCatalogs in {@link 
org.apache.ambari.server.upgrade.SchemaUpgradeHelper.UpgradeHelperModule#configure()}
+   *
+   * @param injector Guice injector to track dependencies and uses bindings to 
inject them.
+   */
+  @Inject
+  public UpgradeCatalog242(Injector injector) {
+    super(injector);
+    this.injector = injector;
+  }
+
+  // ----- UpgradeCatalog ----------------------------------------------------
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public String getTargetVersion() {
+    return "2.4.2";
+  }
+
+  // ----- AbstractUpgradeCatalog --------------------------------------------
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public String getSourceVersion() {
+    return "2.4.0";
+  }
+
+
+  @Override
+  protected void executeDDLUpdates() throws AmbariException, SQLException {
+    updateTablesForMysql();
+  }
+
+  @Override
+  protected void executePreDMLUpdates() throws AmbariException, SQLException {
+    //To change body of implemented methods use File | Settings | File 
Templates.
+  }
+
+  @Override
+  protected void executeDMLUpdates() throws AmbariException, SQLException {
+    addNewConfigurationsFromXml();
+  }
+
+  protected void updateTablesForMysql() throws SQLException {
+    final Configuration.DatabaseType databaseType = 
configuration.getDatabaseType();
+    if (databaseType == Configuration.DatabaseType.MYSQL) {
+      dbAccessor.alterColumn(EXTENSION_TABLE, new 
DBAccessor.DBColumnInfo(EXTENSION_NAME_COLUMN, String.class, 100, null, false));
+      dbAccessor.alterColumn(EXTENSION_TABLE, new 
DBAccessor.DBColumnInfo(EXTENSION_VERSION_COLUMN, String.class, 100, null, 
false));
+
+      dbAccessor.alterColumn(USERS_TABLE, new 
DBAccessor.DBColumnInfo(USER_TYPE_COLUMN, String.class, 100, null, false));
+      dbAccessor.alterColumn(USERS_TABLE, new 
DBAccessor.DBColumnInfo(USER_NAME_COLUMN, String.class, 100, null, false));
+
+      dbAccessor.alterColumn(HOST_ROLE_COMMAND_TABLE, new 
DBAccessor.DBColumnInfo(ROLE_COLUMN, String.class, 100, null, true));
+      dbAccessor.alterColumn(HOST_ROLE_COMMAND_TABLE, new 
DBAccessor.DBColumnInfo(STATUS_COLUMN, String.class, 100, null, true));
+
+      dbAccessor.alterColumn(BLUEPRINT_TABLE, new 
DBAccessor.DBColumnInfo(BLUEPRINT_NAME_COLUMN, String.class, 100, null, false));
+    }
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/ambari/blob/d4f24d33/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 1c17e1a..f28cdc9 100644
--- a/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
+++ b/ambari-server/src/main/resources/Ambari-DDL-MySQL-CREATE.sql
@@ -508,7 +508,7 @@ CREATE TABLE requestschedulebatchrequest (
   CONSTRAINT FK_rsbatchrequest_schedule_id FOREIGN KEY (schedule_id) 
REFERENCES requestschedule (schedule_id));
 
 CREATE TABLE blueprint (
-  blueprint_name VARCHAR(255) NOT NULL,
+  blueprint_name VARCHAR(100) NOT NULL,
   stack_id BIGINT NOT NULL,
   security_type VARCHAR(32) NOT NULL DEFAULT 'NONE',
   security_descriptor_reference VARCHAR(255),

http://git-wip-us.apache.org/repos/asf/ambari/blob/d4f24d33/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog242Test.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog242Test.java
 
b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog242Test.java
new file mode 100644
index 0000000..81f8451
--- /dev/null
+++ 
b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog242Test.java
@@ -0,0 +1,226 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ambari.server.upgrade;
+
+import javax.persistence.EntityManager;
+import junit.framework.Assert;
+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.newCapture;
+import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.reset;
+import static org.easymock.EasyMock.verify;
+
+import java.lang.reflect.Method;
+
+import org.apache.ambari.server.api.services.AmbariMetaInfo;
+import org.apache.ambari.server.configuration.Configuration;
+import org.apache.ambari.server.controller.AmbariManagementController;
+import org.apache.ambari.server.orm.DBAccessor;
+import org.apache.ambari.server.orm.GuiceJpaInitializer;
+import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
+import org.apache.ambari.server.orm.dao.ClusterDAO;
+import org.apache.ambari.server.orm.dao.ClusterVersionDAO;
+import org.apache.ambari.server.orm.dao.HostVersionDAO;
+import org.apache.ambari.server.orm.dao.RepositoryVersionDAO;
+import org.apache.ambari.server.orm.dao.StackDAO;
+import org.apache.ambari.server.orm.entities.StackEntity;
+import org.apache.ambari.server.state.stack.OsFamily;
+import org.easymock.Capture;
+import org.easymock.EasyMock;
+import org.easymock.IMocksControl;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+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.UpgradeCatalog242} unit tests.
+ */
+public class UpgradeCatalog242Test {
+  private Injector injector;
+  private Provider<EntityManager> entityManagerProvider = 
createStrictMock(Provider.class);
+  private EntityManager entityManager = createNiceMock(EntityManager.class);
+  private UpgradeCatalogHelper upgradeCatalogHelper;
+  private StackEntity desiredStackEntity;
+  private AmbariManagementController amc = 
createNiceMock(AmbariManagementController.class);
+  private AmbariMetaInfo metaInfo = createNiceMock(AmbariMetaInfo.class);
+  private StackDAO stackDAO = createNiceMock(StackDAO.class);
+  private RepositoryVersionDAO repositoryVersionDAO = 
createNiceMock(RepositoryVersionDAO.class);
+  private ClusterVersionDAO clusterVersionDAO = 
createNiceMock(ClusterVersionDAO.class);
+  private HostVersionDAO hostVersionDAO = createNiceMock(HostVersionDAO.class);
+  private ClusterDAO clusterDAO = createNiceMock(ClusterDAO.class);
+
+  private IMocksControl mocksControl = EasyMock.createControl();
+
+  @Before
+  public void init() {
+    reset(entityManagerProvider);
+    expect(entityManagerProvider.get()).andReturn(entityManager).anyTimes();
+    replay(entityManagerProvider);
+    injector = Guice.createInjector(new InMemoryDefaultTestModule());
+    injector.getInstance(GuiceJpaInitializer.class);
+
+    upgradeCatalogHelper = injector.getInstance(UpgradeCatalogHelper.class);
+    // inject AmbariMetaInfo to ensure that stacks get populated in the DB
+    injector.getInstance(AmbariMetaInfo.class);
+    // load the stack entity
+    StackDAO stackDAO = injector.getInstance(StackDAO.class);
+    desiredStackEntity = stackDAO.find("HDP", "2.2.0");
+  }
+
+  @After
+  public void tearDown() {
+    injector.getInstance(PersistService.class).stop();
+  }
+
+  @Test
+  public void testUpdateTablesForMysql() throws Exception{
+    final DBAccessor dbAccessor = createNiceMock(DBAccessor.class);
+    final Configuration configuration = createNiceMock(Configuration.class);
+
+    Capture<DBAccessor.DBColumnInfo> extensionExtensionNameColumnChangeSize = 
newCapture();
+    Capture<DBAccessor.DBColumnInfo> extensionExtensionVersionColumnChangeSize 
= newCapture();
+    Capture<DBAccessor.DBColumnInfo> usersUserTypeColumnChangeSize = 
newCapture();
+    Capture<DBAccessor.DBColumnInfo> usersUserNameColumnChangeSize = 
newCapture();
+    Capture<DBAccessor.DBColumnInfo> hostRoleCommandRoleColumnChangeSize = 
newCapture();
+    Capture<DBAccessor.DBColumnInfo> hostRoleCommandStatusColumnChangeSize = 
newCapture();
+    Capture<DBAccessor.DBColumnInfo> blueprintBlueprintNameColumnChangeSize = 
newCapture();
+
+
+    
expect(configuration.getDatabaseType()).andReturn(Configuration.DatabaseType.MYSQL).once();
+
+    dbAccessor.alterColumn(eq(UpgradeCatalog242.EXTENSION_TABLE), 
capture(extensionExtensionNameColumnChangeSize));
+    dbAccessor.alterColumn(eq(UpgradeCatalog242.EXTENSION_TABLE), 
capture(extensionExtensionVersionColumnChangeSize));
+
+    dbAccessor.alterColumn(eq(UpgradeCatalog242.USERS_TABLE), 
capture(usersUserTypeColumnChangeSize));
+    dbAccessor.alterColumn(eq(UpgradeCatalog242.USERS_TABLE), 
capture(usersUserNameColumnChangeSize));
+
+    dbAccessor.alterColumn(eq(UpgradeCatalog242.HOST_ROLE_COMMAND_TABLE), 
capture(hostRoleCommandRoleColumnChangeSize));
+    dbAccessor.alterColumn(eq(UpgradeCatalog242.HOST_ROLE_COMMAND_TABLE), 
capture(hostRoleCommandStatusColumnChangeSize));
+
+    dbAccessor.alterColumn(eq(UpgradeCatalog242.BLUEPRINT_TABLE), 
capture(blueprintBlueprintNameColumnChangeSize));
+
+
+    replay(dbAccessor, configuration);
+    Module module = new Module() {
+      @Override
+      public void configure(Binder binder) {
+        binder.bind(DBAccessor.class).toInstance(dbAccessor);
+        binder.bind(OsFamily.class).toInstance(createNiceMock(OsFamily.class));
+        binder.bind(EntityManager.class).toInstance(entityManager);
+        binder.bind(Configuration.class).toInstance(configuration);
+      }
+    };
+
+    Injector injector = Guice.createInjector(module);
+    UpgradeCatalog242 upgradeCatalog242 = 
injector.getInstance(UpgradeCatalog242.class);
+    upgradeCatalog242.executeDDLUpdates();
+
+    DBAccessor.DBColumnInfo extensionExtensionNameInfo = 
extensionExtensionNameColumnChangeSize.getValue();
+    Assert.assertNotNull(extensionExtensionNameInfo);
+    Assert.assertEquals(UpgradeCatalog242.EXTENSION_NAME_COLUMN, 
extensionExtensionNameInfo.getName());
+    Assert.assertEquals(new Integer(100), 
extensionExtensionNameInfo.getLength());
+    Assert.assertEquals(String.class, extensionExtensionNameInfo.getType());
+    Assert.assertEquals(null, extensionExtensionNameInfo.getDefaultValue());
+    Assert.assertEquals(false, extensionExtensionNameInfo.isNullable());
+
+    DBAccessor.DBColumnInfo extensionExtensionVersionInfo = 
extensionExtensionVersionColumnChangeSize.getValue();
+    Assert.assertNotNull(extensionExtensionVersionInfo);
+    Assert.assertEquals(UpgradeCatalog242.EXTENSION_VERSION_COLUMN, 
extensionExtensionVersionInfo.getName());
+    Assert.assertEquals(new Integer(100), 
extensionExtensionVersionInfo.getLength());
+    Assert.assertEquals(String.class, extensionExtensionVersionInfo.getType());
+    Assert.assertEquals(null, extensionExtensionVersionInfo.getDefaultValue());
+    Assert.assertEquals(false, extensionExtensionVersionInfo.isNullable());
+
+    DBAccessor.DBColumnInfo usersUserTypeInfo = 
usersUserTypeColumnChangeSize.getValue();
+    Assert.assertNotNull(usersUserTypeInfo);
+    Assert.assertEquals(UpgradeCatalog242.USER_TYPE_COLUMN, 
usersUserTypeInfo.getName());
+    Assert.assertEquals(new Integer(100), usersUserTypeInfo.getLength());
+    Assert.assertEquals(String.class, usersUserTypeInfo.getType());
+    Assert.assertEquals(null, usersUserTypeInfo.getDefaultValue());
+    Assert.assertEquals(false, usersUserTypeInfo.isNullable());
+
+    DBAccessor.DBColumnInfo usersUserNameInfo = 
usersUserNameColumnChangeSize.getValue();
+    Assert.assertNotNull(usersUserNameInfo);
+    Assert.assertEquals(UpgradeCatalog242.USER_NAME_COLUMN, 
usersUserNameInfo.getName());
+    Assert.assertEquals(new Integer(100), usersUserNameInfo.getLength());
+    Assert.assertEquals(String.class, usersUserNameInfo.getType());
+    Assert.assertEquals(null, usersUserNameInfo.getDefaultValue());
+    Assert.assertEquals(false, usersUserNameInfo.isNullable());
+
+    DBAccessor.DBColumnInfo hostRoleCommandRoleInfo = 
hostRoleCommandRoleColumnChangeSize.getValue();
+    Assert.assertNotNull(hostRoleCommandRoleInfo);
+    Assert.assertEquals(UpgradeCatalog242.ROLE_COLUMN, 
hostRoleCommandRoleInfo.getName());
+    Assert.assertEquals(new Integer(100), hostRoleCommandRoleInfo.getLength());
+    Assert.assertEquals(String.class, hostRoleCommandRoleInfo.getType());
+    Assert.assertEquals(null, hostRoleCommandRoleInfo.getDefaultValue());
+    Assert.assertEquals(true, hostRoleCommandRoleInfo.isNullable());
+
+    DBAccessor.DBColumnInfo hostRoleCommandStatusInfo = 
hostRoleCommandStatusColumnChangeSize.getValue();
+    Assert.assertNotNull(hostRoleCommandStatusInfo);
+    Assert.assertEquals(UpgradeCatalog242.STATUS_COLUMN, 
hostRoleCommandStatusInfo.getName());
+    Assert.assertEquals(new Integer(100), 
hostRoleCommandStatusInfo.getLength());
+    Assert.assertEquals(String.class, hostRoleCommandStatusInfo.getType());
+    Assert.assertEquals(null, hostRoleCommandStatusInfo.getDefaultValue());
+    Assert.assertEquals(true, hostRoleCommandStatusInfo.isNullable());
+
+    DBAccessor.DBColumnInfo blueprintBlueprintNameInfo = 
blueprintBlueprintNameColumnChangeSize.getValue();
+    Assert.assertNotNull(blueprintBlueprintNameInfo);
+    Assert.assertEquals(UpgradeCatalog242.BLUEPRINT_NAME_COLUMN, 
blueprintBlueprintNameInfo.getName());
+    Assert.assertEquals(new Integer(100), 
blueprintBlueprintNameInfo.getLength());
+    Assert.assertEquals(String.class, blueprintBlueprintNameInfo.getType());
+    Assert.assertEquals(null, blueprintBlueprintNameInfo.getDefaultValue());
+    Assert.assertEquals(false, blueprintBlueprintNameInfo.isNullable());
+
+
+    verify(dbAccessor, configuration);
+  }
+
+  @Test
+  public void testExecuteDMLUpdates() throws Exception {
+    Method addNewConfigurationsFromXml = 
AbstractUpgradeCatalog.class.getDeclaredMethod("addNewConfigurationsFromXml");
+
+
+    UpgradeCatalog242 upgradeCatalog242 = 
createMockBuilder(UpgradeCatalog242.class)
+            .addMockedMethod(addNewConfigurationsFromXml)
+            .createMock();
+
+
+    upgradeCatalog242.addNewConfigurationsFromXml();
+    expectLastCall().once();
+
+
+    replay(upgradeCatalog242);
+
+    upgradeCatalog242.executeDMLUpdates();
+
+    verify(upgradeCatalog242);
+  }
+}

Reply via email to