You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by xi...@apache.org on 2014/01/29 23:54:37 UTC

git commit: AMBARI-4462. Add ability to decom/recom RegionServer from Host Details page.

Updated Branches:
  refs/heads/trunk 32f1ab98a -> dd9ec5a9f


AMBARI-4462. Add ability to decom/recom RegionServer from Host Details page.


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/dd9ec5a9
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/dd9ec5a9
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/dd9ec5a9

Branch: refs/heads/trunk
Commit: dd9ec5a9fa99cd190ba2c6634eacd5f1e97a2199
Parents: 32f1ab9
Author: Xi Wang <xi...@apache.org>
Authored: Wed Jan 29 11:28:06 2014 -0800
Committer: Xi Wang <xi...@apache.org>
Committed: Wed Jan 29 14:54:16 2014 -0800

----------------------------------------------------------------------
 ambari-web/app/controllers/main/host/details.js |  6 +-
 ambari-web/app/messages.js                      |  2 +-
 ambari-web/app/templates/main/host/summary.hbs  | 56 +++++++++------
 ambari-web/app/utils/ajax.js                    |  2 +-
 ambari-web/app/views/main/host/summary.js       | 73 ++++++++++++++++----
 5 files changed, 99 insertions(+), 40 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/dd9ec5a9/ambari-web/app/controllers/main/host/details.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/host/details.js b/ambari-web/app/controllers/main/host/details.js
index 73fa87a..f749e44 100644
--- a/ambari-web/app/controllers/main/host/details.js
+++ b/ambari-web/app/controllers/main/host/details.js
@@ -755,7 +755,7 @@ App.MainHostDetailsController = Em.Controller.extend({
       sender: this,
       data: {
         intervalTimeSeconds: 1,
-        toleratePercentage : 50,
+        tolerateSize : 0,
         batches:[
           {
             "order_id" : 1,
@@ -835,7 +835,7 @@ App.MainHostDetailsController = Em.Controller.extend({
       sender: this,
       data: {
         intervalTimeSeconds: 1,
-        toleratePercentage : 50,
+        tolerateSize : 1,
         batches:[
           {
             "order_id" : 1,
@@ -885,7 +885,7 @@ App.MainHostDetailsController = Em.Controller.extend({
       sender: this,
       data: {
         intervalTimeSeconds: 1,
-        toleratePercentage : 50,
+        tolerateSize : 1,
         batches:[
           {
             "order_id" : 1,

http://git-wip-us.apache.org/repos/asf/ambari/blob/dd9ec5a9/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index aed505e..46f37b6 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -1415,7 +1415,7 @@ Em.I18n.translations = {
   'hosts.host.regionserver.decommission.batch1':'Decommission RegionServer - Turn drain mode on',
   'hosts.host.regionserver.decommission.batch2':'Decommission RegionServer - Stop RegionServer',
   'hosts.host.regionserver.decommission.batch3':'Decommission RegionServer - Turn drain mode off',
-  'hosts.host.regionserver.recommission':'Recommission HBase RegionServer',
+  'hosts.host.hbase_regionserver.recommission':'Recommission HBase RegionServer',
   'hosts.host.decommissioned':'Decommissioned',
   'hosts.host.decommissioning':'Decommissioning...',
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/dd9ec5a9/ambari-web/app/templates/main/host/summary.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/host/summary.hbs b/ambari-web/app/templates/main/host/summary.hbs
index 282da83..ffd4c9f 100644
--- a/ambari-web/app/templates/main/host/summary.hbs
+++ b/ambari-web/app/templates/main/host/summary.hbs
@@ -92,34 +92,50 @@
                   {{/if}}
                   {{#if view.isNodeManager}}
                     {{#if view.isNodeManagerDecommissionAvailable}}
-                        <li {{bindAttr class="view.noActionAvailable"}}>
-                            <a href="javascript:void(null)" data-toggle="modal" {{action "decommission" view.content target="controller"}}>
-                              {{t common.decommission}}
-                            </a>
-                        </li>
+                      <li {{bindAttr class="view.noActionAvailable"}}>
+                        <a href="javascript:void(null)" data-toggle="modal" {{action "decommission" view.content target="controller"}}>
+                          {{t common.decommission}}
+                        </a>
+                      </li>
                     {{/if}}
                     {{#if view.isNodeManagerRecommissionAvailable}}
-                        <li {{bindAttr class="view.noActionAvailable"}}>
-                            <a href="javascript:void(null)" data-toggle="modal" {{action "recommission" view.content target="controller"}}>
-                              {{t common.recommission}}
-                            </a>
-                        </li>
+                      <li {{bindAttr class="view.noActionAvailable"}}>
+                        <a href="javascript:void(null)" data-toggle="modal" {{action "recommission" view.content target="controller"}}>
+                          {{t common.recommission}}
+                        </a>
+                      </li>
                     {{/if}}
                   {{/if}}
                   {{#if view.isTaskTracker}}
                     {{#if view.isTaskTrackerDecommissionAvailable}}
-                        <li {{bindAttr class="view.noActionAvailable"}}>
-                            <a href="javascript:void(null)" data-toggle="modal" {{action "decommission" view.content target="controller"}}>
-                              {{t common.decommission}}
-                            </a>
-                        </li>
+                      <li {{bindAttr class="view.noActionAvailable"}}>
+                        <a href="javascript:void(null)" data-toggle="modal" {{action "decommission" view.content target="controller"}}>
+                          {{t common.decommission}}
+                        </a>
+                      </li>
                     {{/if}}
                     {{#if view.isTaskTrackerRecommissionAvailable}}
-                        <li {{bindAttr class="view.noActionAvailable"}}>
-                            <a href="javascript:void(null)" data-toggle="modal" {{action "recommission" view.content target="controller"}}>
-                              {{t common.recommission}}
-                            </a>
-                        </li>
+                      <li {{bindAttr class="view.noActionAvailable"}}>
+                        <a href="javascript:void(null)" data-toggle="modal" {{action "recommission" view.content target="controller"}}>
+                          {{t common.recommission}}
+                        </a>
+                      </li>
+                    {{/if}}
+                  {{/if}}
+                  {{#if view.isRegionServer}}
+                    {{#if view.isRegionServerDecommissionAvailable}}
+                      <li {{bindAttr class="view.noActionAvailable"}}>
+                        <a href="javascript:void(null)" data-toggle="modal" {{action "decommission" view.content target="controller"}}>
+                          {{t common.decommission}}
+                        </a>
+                      </li>
+                    {{/if}}
+                    {{#if view.isRegionServerRecommissionAvailable}}
+                      <li {{bindAttr class="view.noActionAvailable"}}>
+                        <a href="javascript:void(null)" data-toggle="modal" {{action "recommission" view.content target="controller"}}>
+                          {{t common.recommission}}
+                        </a>
+                      </li>
                     {{/if}}
                   {{/if}}
                   {{#if view.isDeletableComponent}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/dd9ec5a9/ambari-web/app/utils/ajax.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/ajax.js b/ambari-web/app/utils/ajax.js
index 2edb3a3..aa07c7f 100644
--- a/ambari-web/app/utils/ajax.js
+++ b/ambari-web/app/utils/ajax.js
@@ -381,7 +381,7 @@ var urls = {
             }, {
               "batch_settings" : {
                 "batch_separation_in_seconds" : data.intervalTimeSeconds,
-                "task_failure_tolerance" : data.toleratePercentage
+                "task_failure_tolerance" : data.tolerateSize
               }
             } ]
           }

http://git-wip-us.apache.org/repos/asf/ambari/blob/dd9ec5a9/ambari-web/app/views/main/host/summary.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/host/summary.js b/ambari-web/app/views/main/host/summary.js
index 67d5f1c..5d64894 100644
--- a/ambari-web/app/views/main/host/summary.js
+++ b/ambari-web/app/views/main/host/summary.js
@@ -46,9 +46,6 @@ App.MainHostSummaryView = Em.View.extend({
   }.property('content.componentsWithStaleConfigsCount'),
 
   didInsertElement: function () {
-    //if (this.get('content.hostComponents').someProperty('componentName', 'DATANODE')) {
-      //this.loadDecommissionNodesList();
-    //}
     this.addToolTip();
   },
   addToolTip: function() {
@@ -239,6 +236,9 @@ App.MainHostSummaryView = Em.View.extend({
       if (this.get('isTaskTracker')){
         this.loadTaskTrackerDecommissionStatus();
       }
+      if (this.get('isRegionServer')){
+        this.loadRegionServerDecommissionStatus();
+      }
     },
     hostComponent: function () {
       var hostComponent = null;
@@ -280,9 +280,17 @@ App.MainHostSummaryView = Em.View.extend({
         if(this.get("isTaskTracker") && this.get('isTaskTrackerRecommissionAvailable')){
           componentTextStatus = Em.I18n.t('hosts.host.decommissioned');
         }
+        if(this.get("isRegionServer") && this.get('isRegionServerRecommissionAvailable')){
+          if(this.get('isRegionServerDecommissioning')){
+            componentTextStatus = Em.I18n.t('hosts.host.decommissioning');
+          } else {
+            componentTextStatus = Em.I18n.t('hosts.host.decommissioned');
+          }
+        }
       }
       return componentTextStatus;
-    }.property('workStatus','isDataNodeRecommissionAvailable', 'isDataNodeDecommissioning', 'isNodeManagerRecommissionAvailable','isTaskTrackerRecommissionAvailable'),
+    }.property('workStatus','isDataNodeRecommissionAvailable', 'isDataNodeDecommissioning', 'isNodeManagerRecommissionAvailable',
+      'isTaskTrackerRecommissionAvailable', 'isRegionServerRecommissionAvailable', 'isRegionServerDecommissioning'),
 
     statusClass: function () {
       //If the component is DataNode
@@ -306,6 +314,13 @@ App.MainHostSummaryView = Em.View.extend({
         }
       }
 
+      //If the component is RegionServer
+      if (this.get('isRegionServer')) {
+        if (this.get('isRegionServerRecommissionAvailable') && (this.get('isStart') || this.get('workStatus') == 'INSTALLED')) {
+          return 'health-status-DEAD-ORANGE';
+        }
+      }
+
       //Class when install failed
       if (this.get('workStatus') === App.HostComponentStatus.install_failed) {
         return 'health-status-color-red icon-cog';
@@ -323,7 +338,8 @@ App.MainHostSummaryView = Em.View.extend({
 
       //For all other cases
       return 'health-status-' + App.HostComponentStatus.getKeyName(this.get('workStatus'));
-    }.property('content.passiveState','workStatus', 'isDataNodeRecommissionAvailable', 'isNodeManagerRecommissionAvailable', 'isTaskTrackerRecommissionAvailable'),
+
+    }.property('content.passiveState','workStatus', 'isDataNodeRecommissionAvailable', 'isNodeManagerRecommissionAvailable', 'isTaskTrackerRecommissionAvailable', 'isRegionServerRecommissionAvailable'),
 
     disabled: function () {
       return (this.get('parentView.content.healthClass') === "health-status-DEAD-YELLOW") ? 'disabled' : '';
@@ -347,9 +363,9 @@ App.MainHostSummaryView = Em.View.extend({
       var workStatus = this.get('workStatus');
       var self = this;
       var pulsate = [ App.HostComponentStatus.starting, App.HostComponentStatus.stopping, App.HostComponentStatus.installing].contains(workStatus);
-      if (!pulsate && this.get('isDataNode')) {
-        var dataNodeComponent = this.get('content');
-        if (dataNodeComponent && workStatus != "INSTALLED") {
+      if (!pulsate && (this.get('isDataNode') || this.get('isRegionServer'))) {
+        var component = this.get('content');
+        if (component && workStatus != "INSTALLED") {
           pulsate = this.get('isDecommissioning');
         }
       }
@@ -368,7 +384,7 @@ App.MainHostSummaryView = Em.View.extend({
       this.$('.components-health').stop(true, true);
       this.$('.components-health').css({opacity: 1.0});
       this.doBlinking();
-    }.observes('workStatus','isDataNodeRecommissionAvailable', 'isDecommissioning'),
+    }.observes('workStatus','isDataNodeRecommissionAvailable', 'isDecommissioning', 'isRegionServerRecommissionAvailable'),
 
     isStart: function () {
       return (this.get('workStatus') == App.HostComponentStatus.started || this.get('workStatus') == App.HostComponentStatus.starting);
@@ -418,14 +434,12 @@ App.MainHostSummaryView = Em.View.extend({
 
 
     isDecommissioning: function () {
-      //the slaves is decommissioning.
-      return this.get('isDataNode') && this.get("isDataNodeDecommissioning");
-    }.property("workStatus", "isDataNodeDecommissioning"),
+      return (this.get('isDataNode') && this.get("isDataNodeDecommissioning")) || (this.get('isRegionServer') && this.get("isRegionServerDecommissioning"));
+    }.property("workStatus", "isDataNodeDecommissioning", "isRegionServerDecommissioning"),
 
     isDataNodeDecommissioning: null,
     isDataNodeDecommissionAvailable: null,
     isDataNodeRecommissionAvailable: null,
-
     /**
      * load Recommission/Decommission status from adminState of each live node
      */
@@ -593,7 +607,6 @@ App.MainHostSummaryView = Em.View.extend({
 
     isNodeManagerDecommissionAvailable: null,
     isNodeManagerRecommissionAvailable: null,
-
     /**
      * load Recommission/Decommission status for nodeManager from nodeManagers list
      */
@@ -659,7 +672,6 @@ App.MainHostSummaryView = Em.View.extend({
 
     isTaskTrackerDecommissionAvailable: null,
     isTaskTrackerRecommissionAvailable: null,
-
     /**
      * load Recommission/Decommission status for TaskTracker from JobTracker/AliveNodes list
      */
@@ -725,6 +737,37 @@ App.MainHostSummaryView = Em.View.extend({
       });
     },
 
+    isRegionServerDecommissioning: null,
+    isRegionServerDecommissionAvailable: null,
+    isRegionServerRecommissionAvailable: null,
+    /**
+     * load Recommission/Decommission status of RegionServer
+     */
+    loadRegionServerDecommissionStatus: function () {
+      var clusterName = App.router.get('clusterController.clusterName');
+      var hostName = App.router.get('mainHostDetailsController.content.hostName');
+      var slaveType = 'HBASE_REGIONSERVER';
+      var self = this;
+      var deferred = $.Deferred();
+      self.getDesiredAdminState(clusterName, hostName, slaveType).done( function () {
+        var desired_admin_state = self.get('desiredAdminState');
+        self.set('desiredAdminState', null);
+        switch(desired_admin_state) {
+          case "INSERVICE":
+            self.set('isRegionServerRecommissionAvailable', false);
+            self.set('isRegionServerDecommissioning', false);
+            self.set('isRegionServerDecommissionAvailable', self.get('isStart'));
+            break;
+          case "DECOMMISSIONED":
+            self.set('isRegionServerRecommissionAvailable', true);
+            self.set('isRegionServerDecommissioning', self.get('isStart'));
+            self.set('isRegionServerDecommissionAvailable', false);
+            break;
+        }
+        deferred.resolve(desired_admin_state);
+      });
+      return deferred.promise();
+    }.observes('App.router.mainHostDetailsController.content'),
 
     /**
      * Shows whether we need to show Delete button