Przeglądaj źródła

AMBARI-6379. In Host Detailed Page, decommissioned NM is labeled as STOPPED (alexantonenko)

Alex Antonenko 11 lat temu
rodzic
commit
df8d549795

+ 2 - 0
ambari-web/app/mappers/service_mapper.js

@@ -24,6 +24,8 @@ App.serviceMapper = App.QuickDataMapper.create({
     json.items.forEach(function (service) {
       var cachedService = App.cache['services'].findProperty('ServiceInfo.service_name', service.ServiceInfo.service_name);
       if (cachedService) {
+        // restore service workStatus
+        App.Service.find(cachedService.ServiceInfo.service_name).set('workStatus', service.ServiceInfo.state);
         cachedService.ServiceInfo.state = service.ServiceInfo.state;
         cachedService.ServiceInfo.passive_state = service.ServiceInfo.maintenance_state;
 

+ 4 - 1
ambari-web/app/mixins/main/host/details/host_components/decommissionable.js

@@ -67,8 +67,10 @@ App.Decommissionable = Em.Mixin.create({
    * @type {bool}
    */
   isComponentDecommissionDisable: function() {
+    var masterComponent = this.get('content.service.hostComponents').findProperty('componentName', this.get('componentForCheckDecommission'));
+    if (masterComponent && masterComponent.get('workStatus') != App.HostComponentStatus.started) return true;
     return this.get('content.service.workStatus') != App.HostComponentStatus.started;
-  }.property('content.service.workStatus'),
+  }.property('content.service.workStatus', 'content.service.hostComponents.@each.workStatus'),
 
   /**
    * @override App.HostComponentView.isRestartableComponent
@@ -207,6 +209,7 @@ App.Decommissionable = Em.Mixin.create({
   getDecommissionStatusSuccessCallback: function (response) {
     var statusObject = response.ServiceComponentInfo;
     if ( statusObject != null) {
+      statusObject.component_state = response.host_components[0].HostRoles.state;
       this.set('decommissionedStatusObject', statusObject);
       return statusObject;
     }

+ 1 - 1
ambari-web/app/utils/ajax/ajax.js

@@ -393,7 +393,7 @@ var urls = {
     'mock': ''
   },
   'host.host_component.decommission_status': {
-    'real': '/clusters/{clusterName}/services/{serviceName}/components/{componentName}/?fields=ServiceComponentInfo',
+    'real': '/clusters/{clusterName}/services/{serviceName}/components/{componentName}/?fields=ServiceComponentInfo,host_components/HostRoles/state',
     'mock': ''
   },
   'host.host_component.decommission_status_datanode': {

+ 10 - 1
ambari-web/app/views/main/host/details/host_component_views/nodemanager_view.js

@@ -42,9 +42,13 @@ App.NodeManagerComponentView = App.HostComponentView.extend(App.Decommissionable
         case "DECOMMISSIONED":
           var deferred = $.Deferred();
           self.getDecommissionStatus().done( function() {
-            var curObj = self.get('decommissionedStatusObject');
+            var curObj = self.get('decommissionedStatusObject'),
+                rmComponent = self.get('content.service.hostComponents').findProperty('componentName', self.get('componentForCheckDecommission'));
+
+            rmComponent.set('workStatus', curObj.component_state);
             self.set('decommissionedStatusObject', null);
             if (curObj && curObj.rm_metrics) {
+              // Update RESOURCEMANAGER status
               var nodeManagersArray = App.parseJSON(curObj.rm_metrics.cluster.nodeManagers);
               if (nodeManagersArray.findProperty('HostName', hostName)){
                 // decommisioning ..
@@ -57,6 +61,11 @@ App.NodeManagerComponentView = App.HostComponentView.extend(App.Decommissionable
                 self.set('isComponentDecommissioning', false);
                 self.set('isComponentDecommissionAvailable', false);
               }
+            } else {
+              // in this case ResourceManager not started. Set status to Decommissioned
+              self.set('isComponentRecommissionAvailable', true);
+              self.set('isComponentDecommissioning', false);
+              self.set('isComponentDecommissionAvailable', false);
             }
             deferred.resolve(curObj);
           });