You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by jl...@apache.org on 2015/10/23 18:29:24 UTC

ambari git commit: AMBARI-13529: Service Checks fail after PHD-Ambari 1.7.1 to 2.1.2 upgrade (jluniya)

Repository: ambari
Updated Branches:
  refs/heads/trunk 2116e000a -> 6d5df47da


AMBARI-13529: Service Checks fail after PHD-Ambari 1.7.1 to 2.1.2 upgrade (jluniya)


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

Branch: refs/heads/trunk
Commit: 6d5df47daa1929c0a06840e75b3dc97e17bca4ba
Parents: 2116e00
Author: Jayush Luniya <jl...@hortonworks.com>
Authored: Fri Oct 23 09:29:17 2015 -0700
Committer: Jayush Luniya <jl...@hortonworks.com>
Committed: Fri Oct 23 09:29:17 2015 -0700

----------------------------------------------------------------------
 .../pluggable_stack_definition/configs/PHD.json |   3 +
 .../server/upgrade/AbstractUpgradeCatalog.java  |   2 +-
 .../server/upgrade/SchemaUpgradeHelper.java     |   5 +-
 .../server/upgrade/UpgradeCatalog2121.java      | 169 +++++++++++++++++++
 .../server/upgrade/UpgradeCatalog213.java       |   2 +-
 .../server/upgrade/UpgradeCatalog220.java       |   2 +-
 .../server/upgrade/UpgradeCatalog2121Test.java  | 118 +++++++++++++
 .../server/upgrade/UpgradeCatalog220Test.java   |   2 +-
 8 files changed, 297 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/6d5df47d/ambari-common/src/main/python/pluggable_stack_definition/configs/PHD.json
----------------------------------------------------------------------
diff --git a/ambari-common/src/main/python/pluggable_stack_definition/configs/PHD.json b/ambari-common/src/main/python/pluggable_stack_definition/configs/PHD.json
index 431a26c..70b64f7 100644
--- a/ambari-common/src/main/python/pluggable_stack_definition/configs/PHD.json
+++ b/ambari-common/src/main/python/pluggable_stack_definition/configs/PHD.json
@@ -65,6 +65,9 @@
         },
         {
           "name": "PIG"
+        },
+        {
+          "name": "GANGLIA"
         }
       ]
     },

http://git-wip-us.apache.org/repos/asf/ambari/blob/6d5df47d/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java
index ed68313..92cc9e6 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/AbstractUpgradeCatalog.java
@@ -188,7 +188,7 @@ public abstract class AbstractUpgradeCatalog implements UpgradeCatalog {
       }
 
       return VersionUtils.compareVersions(upgradeCatalog1.getTargetVersion(),
-        upgradeCatalog2.getTargetVersion(), 3);
+        upgradeCatalog2.getTargetVersion(), 4);
     }
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/6d5df47d/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 c77b724..ed19da4 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
@@ -138,10 +138,10 @@ public class SchemaUpgradeHelper {
 
     for (UpgradeCatalog upgradeCatalog : candidateCatalogs) {
       if (sourceVersion == null || VersionUtils.compareVersions(sourceVersion,
-        upgradeCatalog.getTargetVersion(), 3) < 0) {
+        upgradeCatalog.getTargetVersion(), 4) < 0) {
         // catalog version is newer than source
         if (VersionUtils.compareVersions(upgradeCatalog.getTargetVersion(),
-          targetVersion, 3) <= 0) {
+          targetVersion, 4) <= 0) {
           // catalog version is older or equal to target
           upgradeCatalogs.add(upgradeCatalog);
         }
@@ -180,6 +180,7 @@ public class SchemaUpgradeHelper {
       catalogBinder.addBinding().to(UpgradeCatalog210.class);
       catalogBinder.addBinding().to(UpgradeCatalog211.class);
       catalogBinder.addBinding().to(UpgradeCatalog212.class);
+      catalogBinder.addBinding().to(UpgradeCatalog2121.class);
       catalogBinder.addBinding().to(UpgradeCatalog213.class);
       catalogBinder.addBinding().to(UpgradeCatalog220.class);
       catalogBinder.addBinding().to(FinalUpgradeCatalog.class);

http://git-wip-us.apache.org/repos/asf/ambari/blob/6d5df47d/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog2121.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog2121.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog2121.java
new file mode 100644
index 0000000..ac06bb1
--- /dev/null
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog2121.java
@@ -0,0 +1,169 @@
+/*
+ * 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 com.google.inject.Inject;
+import com.google.inject.Injector;
+import org.apache.ambari.server.AmbariException;
+import org.apache.ambari.server.controller.AmbariManagementController;
+import org.apache.ambari.server.orm.dao.DaoUtils;
+import org.apache.ambari.server.state.Cluster;
+import org.apache.ambari.server.state.Clusters;
+import org.apache.ambari.server.state.Config;
+import org.apache.ambari.server.state.DesiredConfig;
+import org.apache.ambari.server.state.StackId;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * Upgrade catalog for version 2.1.2.1
+ */
+public class UpgradeCatalog2121 extends AbstractUpgradeCatalog {
+
+  /**
+   * Logger.
+   */
+  private static final Logger LOG = LoggerFactory.getLogger(UpgradeCatalog2121.class);
+
+  @Inject
+  DaoUtils daoUtils;
+
+  // ----- 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 UpgradeCatalog2121(Injector injector) {
+    super(injector);
+
+    daoUtils = injector.getInstance(DaoUtils.class);
+  }
+
+  // ----- UpgradeCatalog ----------------------------------------------------
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public String getTargetVersion() {
+    return "2.1.2.1";
+  }
+
+  // ----- AbstractUpgradeCatalog --------------------------------------------
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public String getSourceVersion() {
+    return "2.1.2";
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  protected void executeDDLUpdates() throws AmbariException, SQLException {
+
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  protected void executePreDMLUpdates() throws AmbariException, SQLException {
+
+  }
+
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  protected void executeDMLUpdates() throws AmbariException, SQLException {
+    updatePHDConfigs();
+  }
+
+  /**
+   * Update PHD stack configs
+   * @throws AmbariException
+   */
+  protected void updatePHDConfigs() throws AmbariException {
+
+    Map<String, String> replacements = new LinkedHashMap<String, String>();
+    replacements.put("-Dstack.name=\\{\\{\\s*stack_name\\s*\\}\\}\\s*", "");
+    replacements.put("-Dstack.name=\\$\\{stack.name\\}\\s*", "");
+    replacements.put("-Dstack.version=\\{\\{\\s*stack_version_buildnum\\s*\\}\\}", "-Dhdp.version=\\$HDP_VERSION");
+    replacements.put("-Dstack.version=\\$\\{stack.version\\}", "-Dhdp.version=\\$\\{hdp.version\\}");
+    replacements.put("\\{\\{\\s*stack_name\\s*\\}\\}", "phd");
+    replacements.put("\\$\\{stack.name\\}", "phd");
+    replacements.put("\\$\\{stack.version\\}", "\\$\\{hdp.version\\}");
+
+    AmbariManagementController ambariManagementController = injector.getInstance(AmbariManagementController.class);
+    Clusters clusters = ambariManagementController.getClusters();
+    if (clusters != null) {
+      Map<String, Cluster> clusterMap = clusters.getClusters();
+      if ((clusterMap != null) && !clusterMap.isEmpty()) {
+        // Iterate through the clusters and perform any configuration updates
+        for (final Cluster cluster : clusterMap.values()) {
+          StackId currentStackVersion = cluster.getCurrentStackVersion();
+          String currentStackName = currentStackVersion != null? currentStackVersion.getStackName() : null;
+          if (currentStackName != null && currentStackName.equalsIgnoreCase("PHD")) {
+            // Update configs only if PHD stack is deployed
+            Map<String, DesiredConfig> desiredConfigs = cluster.getDesiredConfigs();
+            if(desiredConfigs != null && !desiredConfigs.isEmpty()) {
+              for (Map.Entry<String, DesiredConfig> dc : desiredConfigs.entrySet()) {
+                String configType = dc.getKey();
+                DesiredConfig desiredConfig = dc.getValue();
+                String configTag = desiredConfig.getTag();
+                Config config = cluster.getConfig(configType, configTag);
+
+                Map<String, String> properties = config.getProperties();
+                if(properties != null && !properties.isEmpty()) {
+                  Map<String, String> updates = new HashMap<String, String>();
+                  for (Map.Entry<String, String> property : properties.entrySet()) {
+                    String propertyKey = property.getKey();
+                    String propertyValue = property.getValue();
+                    String modifiedPropertyValue = propertyValue;
+                    for (String regex : replacements.keySet()) {
+                      modifiedPropertyValue = modifiedPropertyValue.replaceAll(regex, replacements.get(regex));
+                    }
+                    if (!modifiedPropertyValue.equals(propertyValue)) {
+                      updates.put(propertyKey, modifiedPropertyValue);
+                    }
+                  }
+                  if (!updates.isEmpty()) {
+                    updateConfigurationPropertiesForCluster(cluster, configType, updates, true, false);
+                  }
+                }
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/6d5df47d/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog213.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog213.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog213.java
index 965689a..d85b508 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog213.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog213.java
@@ -157,7 +157,7 @@ public class UpgradeCatalog213 extends AbstractUpgradeCatalog {
    */
   @Override
   public String getSourceVersion() {
-    return "2.1.2";
+    return "2.1.2.1";
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/6d5df47d/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog220.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog220.java b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog220.java
index 4eb7a80..804d97b 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog220.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/upgrade/UpgradeCatalog220.java
@@ -46,7 +46,7 @@ public class UpgradeCatalog220 extends AbstractUpgradeCatalog {
    */
   @Override
   public String getSourceVersion() {
-    return "2.1.0";
+    return "2.1.3";
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/ambari/blob/6d5df47d/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog2121Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog2121Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog2121Test.java
new file mode 100644
index 0000000..f6b1c78
--- /dev/null
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog2121Test.java
@@ -0,0 +1,118 @@
+/*
+ * 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 static junit.framework.Assert.assertEquals;
+import static org.easymock.EasyMock.anyObject;
+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.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.HashMap;
+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;
+import org.apache.ambari.server.orm.DBAccessor;
+import org.apache.ambari.server.orm.DBAccessor.DBColumnInfo;
+import org.apache.ambari.server.orm.GuiceJpaInitializer;
+import org.apache.ambari.server.orm.InMemoryDefaultTestModule;
+import org.apache.ambari.server.orm.dao.StackDAO;
+import org.apache.ambari.server.orm.entities.StackEntity;
+import org.apache.ambari.server.state.*;
+import org.apache.ambari.server.state.stack.OsFamily;
+import org.easymock.Capture;
+import org.easymock.EasyMockSupport;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import com.google.inject.AbstractModule;
+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;
+
+
+public class UpgradeCatalog2121Test {
+  private Injector injector;
+  private Provider<EntityManager> entityManagerProvider = createStrictMock(Provider.class);
+  private EntityManager entityManager = createNiceMock(EntityManager.class);
+  private UpgradeCatalogHelper upgradeCatalogHelper;
+  private StackEntity desiredStackEntity;
+
+  @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("PHD", "3.0.0");
+  }
+
+  @After
+  public void tearDown() {
+    injector.getInstance(PersistService.class).stop();
+  }
+
+  @Test
+  public void testExecuteDMLUpdates() throws Exception {
+    Method updatePHDConfigs = UpgradeCatalog2121.class.getDeclaredMethod("updatePHDConfigs");
+
+    UpgradeCatalog2121 upgradeCatalog2121 = createMockBuilder(UpgradeCatalog2121.class)
+        .addMockedMethod(updatePHDConfigs)
+        .createMock();
+
+    upgradeCatalog2121.updatePHDConfigs();
+    expectLastCall().once();
+
+    replay(upgradeCatalog2121);
+
+    upgradeCatalog2121.executeDMLUpdates();
+
+    verify(upgradeCatalog2121);
+  }
+}
+

http://git-wip-us.apache.org/repos/asf/ambari/blob/6d5df47d/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog220Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog220Test.java b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog220Test.java
index 505cf42..ad704a5 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog220Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/upgrade/UpgradeCatalog220Test.java
@@ -93,7 +93,7 @@ public class UpgradeCatalog220Test {
   public void testGetSourceVersion() {
     final DBAccessor dbAccessor     = createNiceMock(DBAccessor.class);
     UpgradeCatalog upgradeCatalog = getUpgradeCatalog(dbAccessor);
-    Assert.assertEquals("2.1.0", upgradeCatalog.getSourceVersion());
+    Assert.assertEquals("2.1.3", upgradeCatalog.getSourceVersion());
   }
 
   private AbstractUpgradeCatalog getUpgradeCatalog(final DBAccessor dbAccessor) {