Browse Source

AMBARI-5570. MySQL Server install failed during deployment, suse11.(vbrodetskyi)

Vitaly Brodetskyi 11 years ago
parent
commit
7c277169fe

+ 17 - 3
ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariManagementControllerImpl.java

@@ -1307,9 +1307,13 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
     if (serviceInfo.getOsSpecifics().containsKey(AmbariMetaInfo.ANY_OS)) {
       anyOs = serviceInfo.getOsSpecifics().get(AmbariMetaInfo.ANY_OS);
     }
-    ServiceOsSpecific hostOs = null;
-    if (serviceInfo.getOsSpecifics().containsKey(osFamily)) {
-      hostOs = serviceInfo.getOsSpecifics().get(osFamily);
+    ServiceOsSpecific hostOs = new ServiceOsSpecific(osFamily);
+    List<ServiceOsSpecific> foundedOSSpecifics = getOSSpecificsByFamily(serviceInfo.getOsSpecifics(), osFamily);
+    if (!foundedOSSpecifics.isEmpty()) {
+      for (ServiceOsSpecific osSpecific : foundedOSSpecifics) {
+        hostOs.addPackages(osSpecific.getPackages());
+      }
+      serviceInfo.getOsSpecifics().get(osFamily);
       // Choose repo that is relevant for host
       ServiceOsSpecific.Repo serviceRepo = hostOs.getRepo();
       if (serviceRepo != null) {
@@ -1349,6 +1353,16 @@ public class AmbariManagementControllerImpl implements AmbariManagementControlle
     }
   }
 
+  private List<ServiceOsSpecific> getOSSpecificsByFamily(Map<String, ServiceOsSpecific> osSpecifics, String osFamily) {
+    List<ServiceOsSpecific> foundedOSSpecifics = new ArrayList<ServiceOsSpecific>();
+    for (Entry<String, ServiceOsSpecific> osSpecific : osSpecifics.entrySet()) {
+      if (osSpecific.getKey().indexOf(osFamily) != -1) {
+        foundedOSSpecifics.add(osSpecific.getValue());
+      }
+    }
+    return foundedOSSpecifics;
+  }
+
   private ActionExecutionContext getActionExecutionContext
       (ExecuteActionRequest actionRequest) throws AmbariException {
 

+ 1 - 5
ambari-server/src/main/java/org/apache/ambari/server/state/ServiceInfo.java

@@ -66,8 +66,6 @@ public class ServiceInfo {
   private File metricsFile = null;
   @XmlTransient
   private Map<String, Map<String, List<MetricDefinition>>> metrics = null;
-  
-  private static final String OS_SEPARATOR = ",";
 
 
   /**
@@ -316,9 +314,7 @@ public class ServiceInfo {
                   new TreeMap<String, ServiceOsSpecific>();
           if (serviceOsSpecifics != null) {
             for (ServiceOsSpecific osSpecific : serviceOsSpecifics) {
-              for(String osFamily:osSpecific.getOsFamily().split(OS_SEPARATOR)) {
-                tmpMap.put(osFamily.trim(), osSpecific);
-              }
+              tmpMap.put(osSpecific.getOsFamily(), osSpecific);
             }
           }
           serviceOsSpecificsMap = tmpMap;

+ 10 - 0
ambari-server/src/main/java/org/apache/ambari/server/state/ServiceOsSpecific.java

@@ -32,6 +32,12 @@ public class ServiceOsSpecific {
   private String osFamily;
   private Repo repo;
 
+  public ServiceOsSpecific() {
+  }
+
+  public ServiceOsSpecific(String osFamily) {
+    this.osFamily = osFamily;
+  }
 
   @XmlElementWrapper(name="packages")
   @XmlElements(@XmlElement(name="package"))
@@ -52,6 +58,10 @@ public class ServiceOsSpecific {
     return packages;
   }
 
+  public void addPackages(List<Package> packages) {
+    this.packages.addAll(packages);
+  }
+
   /**
    * The <code>repo</code> tag. It has different set of fields compared to
    * <link>org.apache.ambari.server.state.RepositoryInfo</link>,