in ambari-web/app/mappers/service_mapper.js [453:551]
hdfsMapper: function (item) {
var finalConfig = jQuery.extend({}, this.config);
// Change the JSON so that it is easy to map
var hdfsConfig = this.hdfsConfig;
item.components.forEach(function (component) {
if (component.ServiceComponentInfo && component.ServiceComponentInfo.component_name == "NAMENODE") {
//enabled HA
if ( component.host_components.length == 2) {
var haState1;
var haState2;
if (component.host_components[1].metrics && component.host_components[1].metrics.dfs) {
haState2 = component.host_components[1].metrics.dfs.FSNamesystem.HAState;
}
if (component.host_components[0].metrics && component.host_components[0].metrics.dfs) {
haState1 = component.host_components[0].metrics.dfs.FSNamesystem.HAState;
}
var active_name_node = [];
var standby_name_nodes = [];
switch (haState1) {
case "active":
active_name_node.push(component.host_components[0].HostRoles.host_name);
break;
case "standby":
standby_name_nodes.push(component.host_components[0].HostRoles.host_name);
break;
}
switch (haState2) {
case "active":
active_name_node.push(component.host_components[1].HostRoles.host_name);
break;
case "standby":
standby_name_nodes.push(component.host_components[1].HostRoles.host_name);
break;
}
item.active_name_node_id = null;
item.standby_name_node_id = null;
item.standby_name_node2_id = null;
switch (active_name_node.length) {
case 1:
item.active_name_node_id = active_name_node[0];
break;
}
switch (standby_name_nodes.length) {
case 1:
item.standby_name_node_id = standby_name_nodes[0];
break;
case 2:
item.standby_name_node_id = standby_name_nodes[0];
item.standby_name_node2_id = standby_name_nodes[1];
break;
}
// important: active nameNode always at host_components[0]; if no active, then any nameNode could work.
if (haState2 == "active") { // change places for all model bind with host_component[0]
var tmp = component.host_components[1];
component.host_components[1] = component.host_components[0];
component.host_components[0] = tmp;
}
}
item.nameNodeComponent = component;
finalConfig = jQuery.extend(finalConfig, hdfsConfig);
// Get the live, dead & decommission nodes from string json
if (component.host_components[0].metrics && component.host_components[0].metrics.dfs && component.host_components[0].metrics.dfs.namenode) {
var liveNodesJson = App.parseJSON(component.host_components[0].metrics.dfs.namenode.LiveNodes);
var deadNodesJson = App.parseJSON(component.host_components[0].metrics.dfs.namenode.DeadNodes);
var decommissionNodesJson = App.parseJSON(component.host_components[0].metrics.dfs.namenode.DecomNodes);
}
item.live_data_nodes = [];
item.dead_data_nodes = [];
item.decommission_data_nodes = [];
for (var ln in liveNodesJson) {
item.live_data_nodes.push(ln);
}
for (var dn in deadNodesJson) {
item.dead_data_nodes.push(dn);
}
for (var dcn in decommissionNodesJson) {
item.decommission_data_nodes.push(dcn);
}
}
if (component.ServiceComponentInfo && component.ServiceComponentInfo.component_name == "SECONDARY_NAMENODE") {
item.snameNodeComponent = component;
}
if (component.ServiceComponentInfo && component.ServiceComponentInfo.component_name == "JOURNALNODE") {
if (!item.journal_nodes) {
item.journal_nodes = [];
}
if (component.host_components) {
component.host_components.forEach(function (hc) {
item.journal_nodes.push(hc.HostRoles.host_name);
});
}
}
});
// Map
var finalJson = this.parseIt(item, finalConfig);
finalJson.quick_links = [1, 2, 3, 4];
return finalJson;
},