You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ao...@apache.org on 2014/09/05 15:36:04 UTC

git commit: AMBARI-7113. Property: javax.jdo.option.ConnectionPassword is absent in hive-site.xml. (aonishuk)

Repository: ambari
Updated Branches:
  refs/heads/trunk 4adf44e12 -> 0dd2063f1


AMBARI-7113. Property: javax.jdo.option.ConnectionPassword is absent in hive-site.xml. (aonishuk)


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

Branch: refs/heads/trunk
Commit: 0dd2063f1762af03a4fbe70e0df7db6a45b4087a
Parents: 4adf44e
Author: Andrew Onishuk <ao...@hortonworks.com>
Authored: Fri Sep 5 16:35:51 2014 +0300
Committer: Andrew Onishuk <ao...@hortonworks.com>
Committed: Fri Sep 5 16:35:51 2014 +0300

----------------------------------------------------------------------
 .../server/api/util/StackExtensionHelper.java   |   8 +-
 .../internal/ClientConfigResourceProvider.java  |   5 +
 .../api/util/StackExtensionHelperTest.java      |  27 +++
 .../ClientConfigResourceProviderTest.java       | 175 ++++++++++++++++++-
 .../HDP/2.0.5/services/ZOOKEEPER/metainfo.xml   |  12 ++
 .../HDP/2.0.7/services/ZOOKEEPER/metainfo.xml   |  12 ++
 6 files changed, 227 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/0dd2063f/ambari-server/src/main/java/org/apache/ambari/server/api/util/StackExtensionHelper.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/api/util/StackExtensionHelper.java b/ambari-server/src/main/java/org/apache/ambari/server/api/util/StackExtensionHelper.java
index c4dd022..1f6fda0 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/api/util/StackExtensionHelper.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/api/util/StackExtensionHelper.java
@@ -334,13 +334,7 @@ public class StackExtensionHelper {
             child.getConfigDependencies() : parent.getConfigDependencies());
 
 
-//    HashSet downloadSource = child.getDownloadSource();
-//    if (downloadSource != null) {
-//      result.setDownloadSource(child.getDownloadSource());
-//    } else {
-//      result.setDownloadSource(parent.getDownloadSource());
-//    }
-//
+    //Merge client config file definitions
     List<ClientConfigFileDefinition> clientConfigFiles = child.getClientConfigFiles();
     if (clientConfigFiles != null) {
       result.setClientConfigFiles(child.getClientConfigFiles());

http://git-wip-us.apache.org/repos/asf/ambari/blob/0dd2063f/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java
index 7bec61a..cc97eba 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProvider.java
@@ -201,6 +201,11 @@ public class ClientConfigResourceProvider extends AbstractControllerResourceProv
         }
       }
 
+      // Hack - Remove passwords from configs
+      if (configurations.get(Configuration.HIVE_CONFIG_TAG)!=null) {
+        configurations.get(Configuration.HIVE_CONFIG_TAG).remove(Configuration.HIVE_METASTORE_PASSWORD_PROPERTY);
+      }
+
       Map<String, Set<String>> clusterHostInfo = null;
       ServiceInfo serviceInfo = null;
       String osFamily = null;

http://git-wip-us.apache.org/repos/asf/ambari/blob/0dd2063f/ambari-server/src/test/java/org/apache/ambari/server/api/util/StackExtensionHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/api/util/StackExtensionHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/api/util/StackExtensionHelperTest.java
index 9a7946a..dfb1b81 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/api/util/StackExtensionHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/api/util/StackExtensionHelperTest.java
@@ -269,6 +269,33 @@ public class StackExtensionHelperTest {
   }
 
   @Test
+  public void testClientConfigFilesInheritance() throws Exception{
+    File stackRoot = new File(stackRootStr);
+    StackInfo stackInfo = new StackInfo();
+    stackInfo.setName("HDP");
+    stackInfo.setVersion("2.0.6");
+    StackExtensionHelper helper = new StackExtensionHelper(injector, stackRoot);
+    helper.populateServicesForStack(stackInfo);
+    helper.fillInfo();
+    List<ServiceInfo> allServices = helper.getAllApplicableServices(stackInfo);
+    for (ServiceInfo serviceInfo : allServices) {
+      if (serviceInfo.getName().equals("ZOOKEEPER")) {
+        List<ComponentInfo> components = serviceInfo.getComponents();
+        assertTrue(components.size() == 2);
+        ComponentInfo componentInfo = components.get(1);
+        List<ClientConfigFileDefinition> clientConfigs = componentInfo.getClientConfigFiles();
+        assertEquals(2,clientConfigs.size());
+        assertEquals("zookeeper-env",clientConfigs.get(0).getDictionaryName());
+        assertEquals("zookeeper-env.sh",clientConfigs.get(0).getFileName());
+        assertEquals("env",clientConfigs.get(0).getType());
+        assertEquals("zookeeper-log4j",clientConfigs.get(1).getDictionaryName());
+        assertEquals("log4j.properties",clientConfigs.get(1).getFileName());
+        assertEquals("env",clientConfigs.get(1).getType());
+      }
+    }
+  }
+
+  @Test
   public void testMonitoringServicePropertyInheritance() throws Exception{
     File stackRoot = new File(stackRootStr);
     StackInfo stackInfo = new StackInfo();

http://git-wip-us.apache.org/repos/asf/ambari/blob/0dd2063f/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProviderTest.java
index 2f54273..e7ecb88 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClientConfigResourceProviderTest.java
@@ -18,24 +18,32 @@
 
 package org.apache.ambari.server.controller.internal;
 
-import org.apache.ambari.server.controller.AmbariManagementController;
-import org.apache.ambari.server.controller.RequestStatusResponse;
-import org.apache.ambari.server.controller.TaskStatusResponse;
+import org.apache.ambari.server.api.services.AmbariMetaInfo;
+import org.apache.ambari.server.configuration.Configuration;
+import org.apache.ambari.server.controller.*;
 import org.apache.ambari.server.controller.spi.*;
 import org.apache.ambari.server.controller.utilities.PredicateBuilder;
 import org.apache.ambari.server.controller.utilities.PropertyHelper;
+import org.apache.ambari.server.state.*;
+import org.apache.ambari.server.state.PropertyInfo;
 import org.junit.Assert;
 import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.powermock.api.easymock.PowerMock;
+import org.powermock.core.classloader.annotations.PrepareForTest;
+import org.powermock.modules.junit4.PowerMockRunner;
 
+import java.io.File;
+import java.io.PrintWriter;
 import java.util.*;
 
 import static org.easymock.EasyMock.*;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNull;
 
 /**
  * TaskResourceProvider tests.
  */
+@RunWith(PowerMockRunner.class)
+@PrepareForTest( {ClientConfigResourceProvider.class} )
 public class ClientConfigResourceProviderTest {
   @Test
   public void testCreateResources() throws Exception {
@@ -116,6 +124,163 @@ public class ClientConfigResourceProviderTest {
   }
 
   @Test
+  public void testGetResources() throws Exception {
+    Resource.Type type = Resource.Type.ClientConfig;
+
+    AmbariManagementController managementController = createNiceMock(AmbariManagementController.class);
+    Clusters clusters = createNiceMock(Clusters.class);
+
+    Cluster cluster = createNiceMock(Cluster.class);
+    AmbariMetaInfo ambariMetaInfo = createNiceMock(AmbariMetaInfo.class);
+    StackId stackId = createNiceMock(StackId.class);
+    ComponentInfo componentInfo = createNiceMock(ComponentInfo.class);
+    ServiceInfo serviceInfo = createNiceMock(ServiceInfo.class);
+    CommandScriptDefinition commandScriptDefinition = createNiceMock(CommandScriptDefinition.class);
+    Config clusterConfig = createNiceMock(Config.class);
+    Host host = createNiceMock(Host.class);
+    Service service = createNiceMock(Service.class);
+    ServiceComponent serviceComponent = createNiceMock(ServiceComponent.class);
+    ServiceComponentHost serviceComponentHost = createNiceMock(ServiceComponentHost.class);
+    ServiceOsSpecific serviceOsSpecific = createNiceMock(ServiceOsSpecific.class);
+    ConfigHelper configHelper = createNiceMock(ConfigHelper.class);
+
+    File mockFile = PowerMock.createNiceMock(File.class);
+    Runtime runtime = createMock(Runtime.class);
+    Process process = createNiceMock(Process.class);
+
+    Collection<Config> clusterConfigs = new HashSet<Config>();
+    //Config clusterConfig = new ConfigImpl("config");
+    clusterConfigs.add(clusterConfig);
+    Map<String, Map<String, String>> allConfigTags = new HashMap<String, Map<String, String>>();
+    Map<String, Map<String, String>> properties = new HashMap<String, Map<String, String>>();
+    Map<String, Map<String, String>> configTags = new HashMap<String,
+            Map<String, String>>();
+    Map<String, Map<String, Map<String, String>>> attributes = new HashMap<String,
+            Map<String, Map<String, String>>>();
+
+    ClientConfigFileDefinition clientConfigFileDefinition = new ClientConfigFileDefinition();
+    clientConfigFileDefinition.setDictionaryName("pig-env");
+    clientConfigFileDefinition.setFileName("pig-env.sh");
+    clientConfigFileDefinition.setType("env");
+    List <ClientConfigFileDefinition> clientConfigFileDefinitionList = new LinkedList<ClientConfigFileDefinition>();
+    clientConfigFileDefinitionList.add(clientConfigFileDefinition);
+
+    ResourceProvider provider = AbstractControllerResourceProvider.getResourceProvider(
+        type,
+        PropertyHelper.getPropertyIds(type),
+        PropertyHelper.getKeyPropertyIds(type),
+        managementController);
+
+    // create the request
+    Request request = PropertyHelper.getReadRequest(ClientConfigResourceProvider.COMPONENT_CLUSTER_NAME_PROPERTY_ID, "c1",
+            ClientConfigResourceProvider.COMPONENT_COMPONENT_NAME_PROPERTY_ID,
+            ClientConfigResourceProvider.COMPONENT_SERVICE_NAME_PROPERTY_ID);
+
+    Predicate predicate = new PredicateBuilder().property(ClientConfigResourceProvider.COMPONENT_CLUSTER_NAME_PROPERTY_ID).equals("c1").
+        toPredicate();
+
+    String clusterName = "C1";
+    String serviceName = "PIG";
+    String componentName = "PIG";
+    String hostName = "Host100";
+    String desiredState = "INSTALLED";
+
+    String stackName = "S1";
+    String stackVersion = "V1";
+
+    String stackRoot="/tmp/stacks/S1/V1";
+
+    String packageFolder="PIG/package";
+
+    HashMap<String, Host> hosts = new HashMap<String, Host>();
+    hosts.put(hostName,host);
+    HashMap<String, Service> services = new HashMap<String, Service>();
+    services.put(serviceName,service);
+    HashMap<String, ServiceComponent> serviceComponentMap = new HashMap<String, ServiceComponent>();
+    serviceComponentMap.put(componentName,serviceComponent);
+    HashMap<String, ServiceComponentHost> serviceComponentHosts = new HashMap<String, ServiceComponentHost>();
+    serviceComponentHosts.put(componentName, serviceComponentHost);
+    HashMap<String, ServiceOsSpecific> serviceOsSpecificHashMap = new HashMap<String, ServiceOsSpecific>();
+    serviceOsSpecificHashMap.put("key",serviceOsSpecific);
+
+    ServiceComponentHostResponse shr1 = new ServiceComponentHostResponse(clusterName, serviceName, componentName, hostName, desiredState, "", null, null, null);
+
+    Set<ServiceComponentHostResponse> responses = new LinkedHashSet<ServiceComponentHostResponse>();
+    responses.add(shr1);
+
+    // set expectations
+    expect(managementController.getConfigHelper()).andReturn(configHelper);
+    expect(managementController.getAmbariMetaInfo()).andReturn(ambariMetaInfo).anyTimes();
+    expect(managementController.getClusters()).andReturn(clusters).anyTimes();
+    expect(clusters.getCluster(clusterName)).andReturn(cluster).anyTimes();
+    expect(configHelper.getEffectiveConfigProperties(cluster, configTags)).andReturn(properties);
+    expect(clusterConfig.getType()).andReturn(Configuration.HIVE_CONFIG_TAG).anyTimes();
+    expect(configHelper.getEffectiveConfigAttributes(cluster, configTags)).andReturn(attributes);
+    //!!!!
+    Map<String,String> props = new HashMap<String, String>();
+    props.put(Configuration.HIVE_METASTORE_PASSWORD_PROPERTY, "pass");
+    props.put("key","value");
+    expect(clusterConfig.getProperties()).andReturn(props);
+    expect(configHelper.getEffectiveDesiredTags(cluster, hostName)).andReturn(allConfigTags);
+    //!!!!
+    expect(cluster.getClusterName()).andReturn(clusterName);
+    expect(managementController.getHostComponents((Set<ServiceComponentHostRequest>) anyObject())).andReturn(responses).anyTimes();
+    expect(cluster.getCurrentStackVersion()).andReturn(stackId);
+
+    expect(stackId.getStackName()).andReturn(stackName).anyTimes();
+    expect(stackId.getStackVersion()).andReturn(stackVersion).anyTimes();
+
+    expect(ambariMetaInfo.getComponent(stackName, stackVersion, serviceName, componentName)).andReturn(componentInfo);
+    expect(ambariMetaInfo.getServiceInfo(stackName, stackVersion, serviceName)).andReturn(serviceInfo);
+    expect(serviceInfo.getServicePackageFolder()).andReturn(packageFolder);
+    expect(ambariMetaInfo.getComponentCategory((String) anyObject(), (String) anyObject(),
+            (String) anyObject(), (String) anyObject())).andReturn(componentInfo).anyTimes();
+    expect(componentInfo.getCommandScript()).andReturn(commandScriptDefinition);
+    expect(componentInfo.getClientConfigFiles()).andReturn(clientConfigFileDefinitionList);
+    expect(ambariMetaInfo.getStackRoot()).andReturn(new File(stackRoot));
+    expect(cluster.getAllConfigs()).andReturn(clusterConfigs);
+    expect(clusters.getHostsForCluster(clusterName)).andReturn(hosts);
+    expect(cluster.getServices()).andReturn(services);
+    expect(service.getServiceComponents()).andReturn(serviceComponentMap);
+    expect(serviceComponent.getName()).andReturn(componentName);
+    expect(serviceComponent.getServiceComponentHosts()).andReturn(serviceComponentHosts);
+    expect(clusters.getHost(hostName)).andReturn(host);
+
+    HashMap<String, String> rcaParams = new HashMap<String, String>();
+    rcaParams.put("key","value");
+    expect(managementController.getRcaParameters()).andReturn(rcaParams).anyTimes();
+    expect(ambariMetaInfo.getServiceInfo(stackName, stackVersion, serviceName)).andReturn(serviceInfo);
+    expect(serviceInfo.getOsSpecifics()).andReturn(new HashMap<String, ServiceOsSpecific>()).anyTimes();
+    Set<String> userSet = new HashSet<String>();
+    userSet.add("hdfs");
+    expect(configHelper.getPropertyValuesWithPropertyType(stackId, PropertyInfo.PropertyType.USER, cluster)).andReturn(userSet);
+    PowerMock.expectNew(File.class, new Class<?>[]{String.class}, anyObject(String.class)).andReturn(mockFile).anyTimes();
+    PowerMock.createNiceMockAndExpectNew(PrintWriter.class, anyObject());
+    expect(mockFile.getParent()).andReturn("");
+    PowerMock.mockStatic(Runtime.class);
+    expect(Runtime.getRuntime()).andReturn(runtime);
+    expect(mockFile.exists()).andReturn(true);
+    expect(runtime.exec("ambari-python-wrap /tmp/stacks/S1/V1/PIG/package/null generate_configs null " +
+            "/tmp/stacks/S1/V1/PIG/package /tmp/ambari-server/structured-out.json INFO /tmp/ambari-server"))
+            .andReturn(process).once();
+
+    // replay
+    replay(managementController, clusters, cluster, ambariMetaInfo, stackId, componentInfo, commandScriptDefinition,
+            clusterConfig, host, service, serviceComponent, serviceComponentHost, serviceInfo, configHelper,
+            runtime, process);
+    PowerMock.replayAll();
+
+    provider.getResources(request, predicate);
+
+
+
+    // verify
+    verify(managementController, clusters, cluster, ambariMetaInfo, stackId, componentInfo,commandScriptDefinition,
+            clusterConfig, host, service, serviceComponent, serviceComponentHost, serviceInfo, configHelper,
+            runtime, process);
+  }
+
+  @Test
   public void testDeleteResources() throws Exception {
     Resource.Type type = Resource.Type.ClientConfig;
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/0dd2063f/ambari-server/src/test/resources/stacks/HDP/2.0.5/services/ZOOKEEPER/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/stacks/HDP/2.0.5/services/ZOOKEEPER/metainfo.xml b/ambari-server/src/test/resources/stacks/HDP/2.0.5/services/ZOOKEEPER/metainfo.xml
index 2875b77..e17bbd3 100644
--- a/ambari-server/src/test/resources/stacks/HDP/2.0.5/services/ZOOKEEPER/metainfo.xml
+++ b/ambari-server/src/test/resources/stacks/HDP/2.0.5/services/ZOOKEEPER/metainfo.xml
@@ -44,6 +44,18 @@
             <script>scripts/zookeeper_client.py</script>
             <scriptType>PYTHON</scriptType>
           </commandScript>
+          <configFiles>
+            <configFile>
+              <type>env</type>
+              <fileName>zookeeper-env.sh</fileName>
+              <dictionaryName>zookeeper-env</dictionaryName>
+            </configFile>
+            <configFile>
+              <type>env</type>
+              <fileName>log4j.properties</fileName>
+              <dictionaryName>zookeeper-log4j</dictionaryName>
+            </configFile>
+          </configFiles>
         </component>
       </components>
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/0dd2063f/ambari-server/src/test/resources/stacks/HDP/2.0.7/services/ZOOKEEPER/metainfo.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/resources/stacks/HDP/2.0.7/services/ZOOKEEPER/metainfo.xml b/ambari-server/src/test/resources/stacks/HDP/2.0.7/services/ZOOKEEPER/metainfo.xml
index d397d19..c4cdb22 100644
--- a/ambari-server/src/test/resources/stacks/HDP/2.0.7/services/ZOOKEEPER/metainfo.xml
+++ b/ambari-server/src/test/resources/stacks/HDP/2.0.7/services/ZOOKEEPER/metainfo.xml
@@ -46,6 +46,18 @@
             <script>scripts/zookeeper_client.py</script>
             <scriptType>PYTHON</scriptType>
           </commandScript>
+          <configFiles>
+            <configFile>
+              <type>env</type>
+              <fileName>zookeeper-env.sh</fileName>
+              <dictionaryName>zookeeper-env</dictionaryName>
+            </configFile>
+            <configFile>
+              <type>env</type>
+              <fileName>log4j.properties</fileName>
+              <dictionaryName>zookeeper-log4j</dictionaryName>
+            </configFile>
+          </configFiles>
         </component>
       </components>