Browse Source

AMBARI-495. HMC master node not shown in topology and node assignments if the HMC server is not assigned to any other role (Contributed by yusaku)

git-svn-id: https://svn.apache.org/repos/asf/incubator/ambari/trunk@1357064 13f79535-47bb-0310-9956-ffa450edef68
Yusaku Sako 13 năm trước cách đây
mục cha
commit
af9c98adce
3 tập tin đã thay đổi với 84 bổ sung76 xóa
  1. 3 0
      CHANGES.txt
  2. 16 13
      hmc/js/assignMasters.js
  3. 65 63
      hmc/js/clustersList.js

+ 3 - 0
CHANGES.txt

@@ -6,6 +6,9 @@ characters wide.
 
 Release 1.0.0 - unreleased
 
+  AMBARI-495. HMC master node not shown in topology and node assignments 
+  if the HMC server is not assigned to any other role (yusaku)
+
   AMBARI-593. Update README file for consistency (yusaku)
 
   AMBARI-592. Add a link to NOTICE file on every page (yusaku)

+ 16 - 13
hmc/js/assignMasters.js

@@ -21,6 +21,8 @@
 
 function AssignMasters() {
 
+  var managerHostName;
+  var allHosts;
   var registeredAssignHostsEventHandlers = false;
   
   function getNodeInfo(nodeName) {
@@ -28,10 +30,10 @@ function AssignMasters() {
     if (nodeName == null) {
       return null;
     }
-    for (host in this.allHosts) {
-      if (this.allHosts[host].hostName == nodeName) {
+    for (var host in allHosts) {
+      if (allHosts[host].hostName == nodeName) {
         // globalYui.log("Get node info: " + allHosts[host].hostName);
-        return this.allHosts[host];
+        return allHosts[host];
       }
     }
   
@@ -54,11 +56,7 @@ function AssignMasters() {
   	  for (var j in hostsToMasterServices[host]) {
   	    markup += '<li>' + hostsToMasterServices[host][j] + '</li>';
   	  }
-  	  // add manager server
-  	  if (host == this.managerHostName) {
-  	    markup += '<li>' + App.Props.managerServiceName + ' Server</li>';	    
-  	  }
-  	  markup += '</ul><div style="clear:both"></div></div>';
+      markup += '</ul><div style="clear:both"></div></div>';
   	}
   	$('#hostsToMasterServices').html(markup);
   }
@@ -110,8 +108,8 @@ function AssignMasters() {
   	var chosenHost = getNodeInfo(chosenHostName);
   	var markup = '<select name="' + masterName + '">'; 
   	markup += '<option selected="selected" value="' + chosenHost.hostName + '">' + getHostInfoForDisplay(chosenHost) + '</option>';
-  	for (var i in this.allHosts) {
-        var host = this.allHosts[i];
+  	for (var i in allHosts) {
+        var host = allHosts[i];
   	  if (host.hostName != chosenHost.hostName) {
   	    markup += '<option value="' + host.hostName + '">' + host.hostName + ' - ' + getTotalMemForDisplay(host.totalMem) + ', ' + host.cpuCount + ' cores</option>';
   	  }
@@ -201,8 +199,8 @@ function AssignMasters() {
       registeredAssignHostsEventHandlers = true;
     }
   
-    this.allHosts = clusterInfo.allHosts;
-    this.managerHostName = clusterInfo.managerHostName;
+    allHosts = clusterInfo.allHosts;
+    managerHostName = clusterInfo.managerHostName;
     
     var servicesInfo = globalYui.Array( clusterInfo.services );
     var masterServices = {};
@@ -243,7 +241,12 @@ function AssignMasters() {
   	  } 
   	  hostsToMasterServices[masterServices[i].host][masterServices[i].name] = masterServices[i].displayName;
     }
-    
+    // add manager server
+    if (hostsToMasterServices[managerHostName] == null) {
+      hostsToMasterServices[managerHostName] = {};
+    }
+    hostsToMasterServices[managerHostName].MANAGER_SERVER = App.Props.managerServiceName + ' Server';
+
     $('#masterServicesToHosts').html(markup);
     
     renderHostsToMasterServices(hostsToMasterServices);

+ 65 - 63
hmc/js/clustersList.js

@@ -19,53 +19,58 @@
  *
 */
 
-function ClustersList() { 
-  
-  var managerHostName;
-  
+function ClustersList() {
+
+  var managerHostName = '';
+
   function populateHostToMasterRoleMapping(clusterServices, hostMap) {
-    
+
+    var hostName;
+
     for (var serviceName in clusterServices) {
       if (clusterServices.hasOwnProperty(serviceName)) {
-  
-        if (clusterServices[serviceName].isEnabled == "1" && 
-            clusterServices[serviceName].attributes.runnable &&
-            !clusterServices[serviceName].attributes.noDisplay) {
-  
+
+        if (clusterServices[serviceName].isEnabled == "1" &&
+          clusterServices[serviceName].attributes.runnable &&
+          !clusterServices[serviceName].attributes.noDisplay) {
+
           globalYui.Array.each( clusterServices[serviceName].components, function (serviceComponent) {
             if (serviceComponent.isMaster) {
               // just add the master to the hostname object
               for (var i in serviceComponent.hostNames) {
-                var hostName = serviceComponent.hostNames[i];
+                hostName = serviceComponent.hostNames[i];
                 if ( !( hostName in hostMap ) ) {
-                  hostMap[hostName] = new Array();
-                  hostMap[hostName].push({ serviceName: serviceComponent.displayName, isMaster: true });
-                } else {
-                  hostMap[hostName].push({ serviceName: serviceComponent.displayName, isMaster: true });
+                  hostMap[hostName] = [];
                 }
+                hostMap[hostName].push({ serviceName: serviceComponent.displayName, isMaster: true });
               }
             }
           });
         }
       }
     }
+    hostName = managerHostName;
+    if (!(hostName in hostMap)) {
+      hostMap[hostName] = [];
+    }
+    hostMap[hostName].push({ serviceName: App.Props.managerServiceName + ' Server', isMaster: true });
   }
-  
+
   function populateHostToClientRoleMapping(clusterServices, hostMap) {
-  
+
     for (var serviceName in clusterServices) {
       if (clusterServices.hasOwnProperty(serviceName)) {
-  
-        if (clusterServices[serviceName].isEnabled == "1" && 
-            !clusterServices[serviceName].attributes.noDisplay) {
-  
-          globalYui.Array.each( clusterServices[serviceName].components, function (serviceComponent) {          
+
+        if (clusterServices[serviceName].isEnabled == "1" &&
+          !clusterServices[serviceName].attributes.noDisplay) {
+
+          globalYui.Array.each( clusterServices[serviceName].components, function (serviceComponent) {
             if (serviceComponent.isClient) {
               // just add the client to the hostname object
               for (var i in serviceComponent.hostNames) {
                 var hostName = serviceComponent.hostNames[i];
                 if ( !( hostName in hostMap ) ) {
-                  hostMap[hostName] = new Array();
+                  hostMap[hostName] = [];
                   hostMap[hostName].push({ serviceName: serviceComponent.displayName, isMaster: false });
                 } else {
                   hostMap[hostName].push({ serviceName: serviceComponent.displayName, isMaster: false });
@@ -77,40 +82,37 @@ function ClustersList() {
       }
     }
   }
-  
+
   function generateHostRoleMappingMarkup( clusterServices ) {
-  
+
     var hostMap = {};
     var markup = '';
-    
-    populateHostToMasterRoleMapping(clusterServices, hostMap); 
+
+    populateHostToMasterRoleMapping(clusterServices, hostMap);
     populateHostToClientRoleMapping(clusterServices, hostMap);
-    
+
     markup += '<div>';
     for (var hostName in hostMap) {
       markup += '<div class="hostToServices clearfix"><h3>' + hostName + '</h3>' + '<ul>';
-      if (hostName == managerHostName) {
-        markup += '<li class="master">' + App.Props.managerServiceName + ' Server</li>';
-      }
       for (var service in hostMap[hostName]) {
         markup += '<li class="' + ((hostMap[hostName][service].isMaster) ? 'master' : 'client') + '">' + hostMap[hostName][service].serviceName + '</li>';
       }
       markup += '</ul></div>';
     }
     markup += '</div>';
-  
+
     return markup;
   }
-  
+
   this.render = function() {
-    
+
     globalYui.io("../php/frontend/listClusters.php", {
       method: 'GET',
       timeout : 10000,
       on: {
         success: function (x,o) {
           globalYui.log("RAW JSON DATA: " + o.responseText);
-  
+
           // Process the JSON data returned from the server
           try {
             clusterListInfoJson = globalYui.JSON.parse(o.responseText);
@@ -119,21 +121,21 @@ function ClustersList() {
             alert("JSON Parse failed!");
             return;
           }
-          
+
           globalYui.log("PARSED DATA: " + globalYui.Lang.dump(clusterListInfoJson));
-  
+
           if (clusterListInfoJson.result != 0) {
             // Error!
-            alert("Got error!" + clusterListInfoJson.error); 
+            alert("Got error!" + clusterListInfoJson.error);
             return;
           }
-  
-          clusterListInfoJson = clusterListInfoJson.response;  
+
+          clusterListInfoJson = clusterListInfoJson.response;
           var numClusters = clusterListInfoJson.length;
           var clustersListMarkup;
           var clusterId;
           var multipleClustersSupported = false;
-  
+
           if (numClusters == 0) {
             clustersListMarkup = "";
           } else {
@@ -141,7 +143,7 @@ function ClustersList() {
               clustersListMarkup =    "<table>" +
                 "<caption>List of clusters</caption>" +
                 "<thead><tr><th>Name of the cluster</th><th>Cluster status</th><th>Actions</th></tr></thead>";
-              var i = 0;
+
               for (clusterId in clusterListInfoJson) {
                 clustersListMarkup += "<tr><td><a href='manageServices.php?clusterId=" + clusterId + "' id='existingClusterLinkDivId'>" + clusterId + "</a></td><td>" + clusterListInfoJson[clusterId] + "</td><td>Uninstall</td></tr>" ;
               }
@@ -155,25 +157,25 @@ function ClustersList() {
               }
             }
           }
-  
+
           var newClusterLinkHTML = "";
           if (multipleClustersSupported || numClusters == 0) {
             document.location.href = "/hmc/html/welcome.php";
             return;
           }
-  
+
           /* Beginning of adding Role Topology information. */
           globalYui.io( "../php/frontend/fetchClusterServices.php?clusterName=" + clusterName + "&getConfigs=true&getComponents=true", {
             timeout: 10000,
             on: {
               success: function(x1, o1) {
-  
+
                 hideLoadingImg();
-  
+
                 globalYui.log("RAW JSON DATA: " + o1.responseText);
-  
+
                 var clusterServicesResponseJson;
-  
+
                 try {
                   clusterServicesResponseJson = globalYui.JSON.parse(o1.responseText);
                 }
@@ -181,27 +183,27 @@ function ClustersList() {
                   alert("JSON Parse failed");
                   return;
                 }
-                
+
                 managerHostName = clusterServicesResponseJson.response.managerHostName;
-  
+
                 globalYui.log(globalYui.Lang.dump(clusterServicesResponseJson));
-  
+
                 /* Check that clusterServicesResponseJson actually indicates success. */
                 if( clusterServicesResponseJson.result == 0 ) {
-                  
+
                   var clusterServices = clusterServicesResponseJson.response.services;
-  
+
                   var markup =
                     '<div class="clearfix">' +
                       '<h2>Cluster: ' +  clusterName + '</h2>' +
-                        '<div id="serviceLegend">' +
-                          '<span class="masterLegend">Master</span><span class="clientLegend" style="margin-right:0">Client</span>' +
-                        '</div>' +
+                      '<div id="serviceLegend">' +
+                      '<span class="masterLegend">Master</span><span class="clientLegend" style="margin-right:0">Client</span>' +
+                      '</div>' +
                       '</div>' +
-                    '</div>';
-                  
+                      '</div>';
+
                   globalYui.one("#clusterHostRoleMappingDynamicRenderDivId").setContent(
-                      markup + generateHostRoleMappingMarkup(clusterServices) );
+                    markup + generateHostRoleMappingMarkup(clusterServices) );
                   globalYui.one("#clusterHostRoleMappingDivId").show();
                 }
                 else {
@@ -215,18 +217,18 @@ function ClustersList() {
             }
           });
           /* End of adding Role Topology information. */
-  
+
           globalYui.one("#clustersListDivId").setContent( clustersListMarkup );
           globalYui.one("#clustersListDivId").setStyle('display', 'block');
-  
+
           if (globalYui.one('#newClusterLinkDivId') != null) {
             globalYui.one('#newClusterLinkDivId').on('click',function (e) {
               /* Done with this stage, hide it. */
               globalYui.one("#clustersListDivId").setStyle('display','none');
               // globalYui.one("#installationWizardDivId").setStyle('display','block');
-          });
+            });
           }
-    
+
         },
         failure: function (x,o) {
           //    e.target.set('disabled', false);