Pārlūkot izejas kodu

AMBARI-8159. RM info not showing after shutting down active RM (onechiporenko)

Oleg Nechiporenko 10 gadi atpakaļ
vecāks
revīzija
c68cf2fdc5

+ 1 - 0
ambari-web/app/assets/test/tests.js

@@ -106,6 +106,7 @@ var files = ['test/init_model_test',
   'test/mappers/server_data_mapper_test',
   'test/mappers/hosts_mapper_test',
   'test/mappers/service_mapper_test',
+  'test/mappers/service_metrics_mapper_test',
   'test/mappers/status_mapper_test',
   'test/mappers/users_mapper_test',
   'test/mappers/stack_mapper_test',

+ 2 - 1
ambari-web/app/mappers/service_metrics_mapper.js

@@ -490,7 +490,8 @@ App.serviceMetricsMapper = App.QuickDataMapper.create({
         // if YARN has two host components, ACTIVE one should be first in component.host_components array for proper metrics mapping
         if (component.host_components.length === 2) {
           var activeRM = component.host_components.findProperty('HostRoles.ha_state', 'ACTIVE');
-          var standbyRM = component.host_components.findProperty('HostRoles.ha_state', 'STANDBY');
+          // if "second" RM isn't STARTED his ha_status is null (not STANDBY)
+          var standbyRM = component.host_components.filter(function(host_component) {return host_component.HostRoles.ha_state !== 'ACTIVE';})[0];
           if (activeRM && standbyRM) {
             component.host_components = [activeRM, standbyRM];
           }

+ 64 - 0
ambari-web/test/mappers/service_metrics_mapper_test.js

@@ -0,0 +1,64 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with this
+ * work for additional information regarding copyright ownership. The ASF
+ * licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+
+var App = require('app');
+
+describe('App.serviceMetricsMapper', function () {
+
+  describe('#yarnMapper', function () {
+
+    it('should set ACTIVE RM first in any cases (if RM HA enabled)', function() {
+      var item = {
+          components: [
+            {
+              ServiceComponentInfo: {
+                component_name: 'RESOURCEMANAGER'
+              },
+              host_components: [
+                {
+                  HostRoles: {
+                    ha_state: null,
+                    host_name : 'h1'
+                  }
+                },
+                {
+                  HostRoles: {
+                    ha_state: 'ACTIVE',
+                    host_name : 'h2'
+                  },
+                  metrics: {
+                    yarn: {
+                      Queue: {
+                        root: {
+                          default: {}
+                        }
+                      }
+                    }
+                  }
+                }
+              ]
+            }
+          ]
+        },
+        result = App.serviceMetricsMapper.yarnMapper(item);
+      expect(result.queue).to.equal("{\"root\":{\"default\":{}}}");
+    });
+
+  });
+
+});