You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by dm...@apache.org on 2016/03/22 15:40:16 UTC

[2/4] ambari git commit: AMBARI-15505. Ambari upgrade for 2.0.x version to 2.1.x doesn't retain properties value from ranger-site (dgrinenko via dlysnichenko)

AMBARI-15505. Ambari upgrade for 2.0.x version to 2.1.x doesn't retain properties value from ranger-site (dgrinenko via dlysnichenko)


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

Branch: refs/heads/trunk
Commit: e26e80a84ac0c45339f3676ed2279f1205c56191
Parents: 0e4084c
Author: Lisnichenko Dmitro <dl...@hortonworks.com>
Authored: Tue Mar 22 16:36:54 2016 +0200
Committer: Lisnichenko Dmitro <dl...@hortonworks.com>
Committed: Tue Mar 22 16:36:54 2016 +0200

----------------------------------------------------------------------
 .../server/upgrade/UpgradeCatalog210.java       | 46 ++++++++++
 .../server/upgrade/UpgradeCatalog210Test.java   | 90 ++++++++++++++++++++
 2 files changed, 136 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/e26e80a8/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 d97c0c1..74f4994 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
@@ -122,6 +122,7 @@ public class UpgradeCatalog210 extends AbstractUpgradeCatalog {
   private static final String TOPOLOGY_HOST_TASK_TABLE = "topology_host_task";
   private static final String TOPOLOGY_LOGICAL_TASK_TABLE = "topology_logical_task";
   private static final String HDFS_SITE_CONFIG = "hdfs-site";
+  private static final String RANGER_SITE_CONFIG = "ranger-site";
 
   // constants for stack table changes
   private static final String STACK_ID_COLUMN_NAME = "stack_id";
@@ -1337,9 +1338,54 @@ public class UpgradeCatalog210 extends AbstractUpgradeCatalog {
     updateStormConfigs();
     updateRangerHiveConfigs();
     updateRangerHBaseConfigs();
+    updateRangerSiteConfigs();
     updateHBaseConfigs();
   }
 
+  protected void updateRangerSiteConfigs() throws AmbariException{
+    AmbariManagementController ambariManagementController = injector.getInstance(AmbariManagementController.class);
+    Clusters clusters = ambariManagementController.getClusters();
+
+    Map<String, String> rangerPropertyMap = new HashMap<String, String>() {{
+      put("HTTPS_CLIENT_AUTH", "https.attrib.clientAuth");
+      put("HTTPS_KEYSTORE_FILE", "https.attrib.keystoreFile");
+      put("HTTPS_KEYSTORE_PASS", "https.attrib.keystorePass");
+      put("HTTPS_KEY_ALIAS", "https.attrib.keyAlias");
+      put("HTTPS_SERVICE_PORT", "https.service.port");
+      put("HTTP_ENABLED", "http.enabled");
+      put("HTTP_SERVICE_PORT", "http.service.port");
+    }};
+
+    if (clusters != null) {
+      Map<String, Cluster> clusterMap = clusters.getClusters();
+      if (clusterMap != null && !clusterMap.isEmpty()) {
+
+        for (final Cluster cluster : clusterMap.values()) {
+         Config rangerSite = cluster.getDesiredConfigByType(RANGER_SITE_CONFIG);
+         Map<String, String> rangerSiteProperties;
+         Map<String, String> convertedRangerSiteProperties = new HashMap<>();
+         Set<String> oldPropertiesList = new HashSet<>();
+
+          if (rangerSite != null) {
+            rangerSiteProperties = rangerSite.getProperties();
+            for (Map.Entry<String, String> mapEntry: rangerPropertyMap.entrySet()) {
+              String oldKey = mapEntry.getKey();
+              String newKey = mapEntry.getValue();
+              if (rangerSiteProperties.containsKey(oldKey)) {
+                convertedRangerSiteProperties.put(newKey, rangerSiteProperties.get(oldKey));
+                oldPropertiesList.add(oldKey);
+              }
+            }
+          }
+
+          updateConfigurationPropertiesForCluster(cluster, RANGER_SITE_CONFIG, convertedRangerSiteProperties, true, false);
+          removeConfigurationPropertiesFromCluster(cluster, RANGER_SITE_CONFIG, oldPropertiesList);
+        }
+
+      }
+    }
+  }
+
   protected void updateRangerHiveConfigs() throws AmbariException{
     AmbariManagementController ambariManagementController = injector.getInstance(
             AmbariManagementController.class);

http://git-wip-us.apache.org/repos/asf/ambari/blob/e26e80a8/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 c641bbf..6795f1e 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
@@ -21,7 +21,10 @@ package org.apache.ambari.server.upgrade;
 import static junit.framework.Assert.assertEquals;
 import static junit.framework.Assert.assertNotNull;
 import static junit.framework.Assert.assertNull;
+import static junit.framework.Assert.assertTrue;
+import static org.easymock.EasyMock.anyBoolean;
 import static org.easymock.EasyMock.anyObject;
+import static org.easymock.EasyMock.anyString;
 import static org.easymock.EasyMock.capture;
 import static org.easymock.EasyMock.createMockBuilder;
 import static org.easymock.EasyMock.createNiceMock;
@@ -46,9 +49,11 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import javax.persistence.EntityManager;
 
+import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.AmbariManagementController;
@@ -75,6 +80,7 @@ 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.ConfigHelper;
+import org.apache.ambari.server.state.ConfigImpl;
 import org.apache.ambari.server.state.Host;
 import org.apache.ambari.server.state.HostComponentAdminState;
 import org.apache.ambari.server.state.Service;
@@ -83,11 +89,13 @@ import org.apache.ambari.server.state.kerberos.KerberosDescriptorFactory;
 import org.apache.ambari.server.state.kerberos.KerberosServiceDescriptor;
 import org.apache.ambari.server.state.stack.OsFamily;
 import org.easymock.Capture;
+import org.easymock.EasyMock;
 import org.easymock.EasyMockSupport;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
+import org.mockito.ArgumentCaptor;
 
 import com.google.inject.AbstractModule;
 import com.google.inject.Binder;
@@ -378,6 +386,88 @@ public class UpgradeCatalog210Test {
   }
 
   @Test
+  public void TestRangerSitePropertyConversion() throws Exception{
+    EasyMockSupport easyMockSupport = new EasyMockSupport();
+    final String clusterName = "c1";
+    final AmbariManagementController  mockAmbariManagementController = easyMockSupport.createNiceMock(AmbariManagementController.class);
+    final ConfigHelper mockConfigHelper = easyMockSupport.createMock(ConfigHelper.class);
+    final Clusters mockClusters = easyMockSupport.createStrictMock(Clusters.class);
+    final Cluster cluster = easyMockSupport.createStrictMock(Cluster.class);
+    final Config config = easyMockSupport.createNiceMock(Config.class);
+    final Map<String,Cluster> clusters = new HashMap<String,Cluster>(){{
+      put(clusterName, cluster);
+    }};
+    final Map<String,String> properties = new HashMap<String, String>() {{
+      put("HTTPS_CLIENT_AUTH", "test123");
+      put("HTTPS_KEYSTORE_FILE", "test123");
+      put("HTTPS_KEYSTORE_PASS", "test123");
+      put("HTTPS_KEY_ALIAS", "test123");
+      put("HTTPS_SERVICE_PORT", "test123");
+      put("HTTP_ENABLED", "test123");
+      put("HTTP_SERVICE_PORT", "test123");
+    }};
+
+    final Map<String, String> expectedPropertyMap = new HashMap<String, String>() {{
+      put("HTTPS_CLIENT_AUTH", "https.attrib.clientAuth");
+      put("HTTPS_KEYSTORE_FILE", "https.attrib.keystoreFile");
+      put("HTTPS_KEYSTORE_PASS", "https.attrib.keystorePass");
+      put("HTTPS_KEY_ALIAS", "https.attrib.keyAlias");
+      put("HTTP_SERVICE_PORT", "http.service.port");
+      put("HTTPS_SERVICE_PORT", "https.service.port");
+      put("HTTP_ENABLED", "http.enabled");
+    }};
+
+    final Map<String,String> convertedProperties = new HashMap<>();
+    final Set<String> removedProperties = new HashSet<>();
+
+    final Injector mockInjector = Guice.createInjector(new AbstractModule() {
+      @Override
+      protected void configure() {
+        bind(AmbariManagementController.class).toInstance(mockAmbariManagementController);
+        bind(Clusters.class).toInstance(mockClusters);
+        bind(ConfigHelper.class).toInstance(mockConfigHelper);
+
+        bind(DBAccessor.class).toInstance(createNiceMock(DBAccessor.class));
+        bind(OsFamily.class).toInstance(createNiceMock(OsFamily.class));
+      }
+    });
+
+    UpgradeCatalog210 upgradeCatalog210 = new UpgradeCatalog210(mockInjector) {
+
+      @Override
+      protected void updateConfigurationPropertiesForCluster(Cluster cluster, String configType,
+        Map<String, String> properties, boolean updateIfExists, boolean createNewConfigType) throws AmbariException {
+        convertedProperties.putAll(properties);
+      }
+
+      @Override
+      protected void removeConfigurationPropertiesFromCluster(Cluster cluster, String configType, Set<String> removePropertiesList)
+        throws AmbariException {
+        removedProperties.addAll(removePropertiesList);
+      }
+    };
+
+    expect(mockAmbariManagementController.getClusters()).andReturn(mockClusters).atLeastOnce();
+    expect(mockClusters.getClusters()).andReturn(clusters).atLeastOnce();
+    expect(config.getProperties()).andReturn(properties).atLeastOnce();
+    expect(cluster.getDesiredConfigByType("ranger-site")).andReturn(config).atLeastOnce();
+
+    replay(mockAmbariManagementController, mockClusters, cluster, config);
+
+    upgradeCatalog210.updateRangerSiteConfigs();
+
+
+    for (Map.Entry<String,String> propertyEntry: expectedPropertyMap.entrySet()){
+      String oldKey = propertyEntry.getKey();
+      String newKey = propertyEntry.getValue();
+      assertTrue(String.format("Old property %s doesn't migrated to new name %s", oldKey, newKey), convertedProperties.containsKey(newKey));
+      assertTrue(String.format("Property value %s doesn't preserved after renaming: %s",properties.get(oldKey), convertedProperties.get(newKey)),
+        convertedProperties.get(newKey).equals(properties.get(oldKey)));
+      assertTrue(String.format("Old property %s doesn't removed after renaming", oldKey), removedProperties.contains(oldKey));
+    }
+  }
+
+  @Test
   public void TestUpdateHiveEnvContent() {
     EasyMockSupport easyMockSupport = new EasyMockSupport();
     final AmbariManagementController  mockAmbariManagementController = easyMockSupport.createNiceMock(AmbariManagementController.class);