Browse Source

AMBARI-3142. NameNode HA Wizard (rollback): Based on which task failed, show tasks that need to be done for rollback

Alex Antonenko 11 years ago
parent
commit
8098df95b8

+ 4 - 0
ambari-web/app/controllers/main/admin/highAvailability/progress_controller.js

@@ -20,6 +20,8 @@ var App = require('app');
 
 App.HighAvailabilityProgressPageController = Em.Controller.extend({
 
+  name: 'highAvailabilityProgressPageController',
+
   status: 'IN_PROGRESS',
   tasks: [],
   commands: [],
@@ -107,9 +109,11 @@ App.HighAvailabilityProgressPageController = Em.Controller.extend({
 
   rollback: function () {
     var task = this.get('tasks').findProperty('status', 'FAILED');
+    App.router.get(this.get('content.controllerName')).saveFailedTask(task);
     App.ModalPopup.show({
       header: Em.I18n.t('admin.highAvailability.confirmRollbackHeader'),
       primary: Em.I18n.t('common.confirm'),
+      showCloseButton: false,
       onPrimary: function () {
         App.router.transitionTo('root.main.admin.adminHighAvailability.rollback');
         this.hide();

+ 48 - 5
ambari-web/app/controllers/main/admin/highAvailability/rollback_controller.js

@@ -23,13 +23,15 @@ App.HighAvailabilityRollbackController = App.HighAvailabilityProgressPageControl
 
   name: "highAvailabilityRollbackController",
 
+  failedTask: null,
+
   commands: [
     'stopAllServices',
     'restoreHBaseConfigs',
     'stopFailoverControllers',
     'deleteFailoverControllers',
     'stopStandbyNameNode',
-    'stopNamenode',
+    'stopNameNode',
     'restoreHDFSConfigs',
     'enableSecondaryNameNode',
     'stopJournalNodes',
@@ -38,8 +40,42 @@ App.HighAvailabilityRollbackController = App.HighAvailabilityProgressPageControl
     'startAllServices'
   ],
 
-  getStartingPoint: function() {
-
+  loadStep: function () {
+    this.loadFailedTask();
+    this.clearStep();
+    this.loadTasks();
+    this.addObserver('tasks.@each.status', this, 'onTaskStatusChange');
+    this.onTaskStatusChange();
+  },
+
+  setCommandsAndTasks: function(tmpTasks) {
+    var fTask = this.get('failedTask');
+    var newCommands = [];
+    var newTasks = [];
+    var index = [
+      'deleteSNameNode',
+      'startAllServices',
+      'reconfigureHBase',
+      'startZKFC',
+      'installZKFC',
+      'startSecondNameNode',
+      'startNameNode',
+      'startZooKeeperServers',
+      'reconfigureHDFS',
+      'disableSNameNode',
+      'startJournalNodes',
+      'installJournalNodes',
+      'installNameNode',
+      'stopAllServices'
+    ].indexOf(fTask.command);
+
+    if(index > 6){
+      --index;
+    }
+    newCommands = this.get('commands').splice(index);
+    this.set('commands', newCommands);
+    newTasks = tmpTasks.splice(index);
+    this.set('tasks', newTasks);
   },
 
   clearStep: function () {
@@ -48,8 +84,9 @@ App.HighAvailabilityRollbackController = App.HighAvailabilityProgressPageControl
     this.set('logs', []);
     this.set('currentRequestIds', []);
     var commands = this.get('commands');
+    var tmpTasks = [];
     for (var i = 0; i < commands.length; i++) {
-      this.get('tasks').pushObject(Ember.Object.create({
+      tmpTasks.pushObject(Ember.Object.create({
         title: Em.I18n.t('admin.highAvailability.rollback.task' + i + '.title'),
         status: 'PENDING',
         id: i,
@@ -62,6 +99,7 @@ App.HighAvailabilityRollbackController = App.HighAvailabilityProgressPageControl
         hosts: []
       }));
     }
+    this.setCommandsAndTasks(tmpTasks);
   },
 
   onTaskStatusChange: function () {
@@ -103,6 +141,11 @@ App.HighAvailabilityRollbackController = App.HighAvailabilityProgressPageControl
     //this.set('content.tasksStatuses', statuses);
   },
 
+  loadFailedTask: function(){
+    var failedTask = App.db.getHighAvailabilityWizardFailedTask();
+    this.set('failedTask', failedTask);
+  },
+
   saveRequestIds: function(requestIds){
     App.db.setHighAvailabilityWizardRequestIds(requestIds);
     //this.set('content.requestIds', requestIds);
@@ -137,7 +180,7 @@ App.HighAvailabilityRollbackController = App.HighAvailabilityProgressPageControl
   stopStandbyNameNode: function(){
 
   },
-  stopNamenode: function(){
+  stopNameNode: function(){
 
   },
   restoreHDFSConfigs: function(){

+ 7 - 1
ambari-web/app/controllers/main/admin/highAvailability/wizard_controller.js

@@ -39,7 +39,8 @@ App.HighAvailabilityWizardController = App.WizardController.extend({
     masterComponentHosts: null,
     serviceName: 'MISC',
     hdfsUser:"hdfs",
-    nameServiceId: ''
+    nameServiceId: '',
+    failedTask : null
   }),
 
   /**
@@ -158,6 +159,11 @@ App.HighAvailabilityWizardController = App.WizardController.extend({
     this.set('content.tasksStatuses', statuses);
   },
 
+  saveFailedTask: function(task){
+    App.db.setHighAvailabilityWizardFailedTask(task);
+    this.set('content.failedTask', task);
+  },
+
   saveConfigTag: function(tag){
     App.db.setHighAvailabilityWizardConfigTag(tag);
     this.set('content.'+[tag.name], tag.value);

+ 5 - 4
ambari-web/app/routes/main.js

@@ -661,17 +661,18 @@ module.exports = Em.Route.extend({
           Ember.run.next(function () {
             App.router.get('updateController').set('isWorking', false);
 
-
             var highAvailabilityWizardController = router.get('highAvailabilityWizardController');
-            highAvailabilityWizardController.finish();
-            highAvailabilityWizardController.get('popup').hide();
-
+            if(highAvailabilityWizardController.get('popup')){
+              highAvailabilityWizardController.finish();
+              highAvailabilityWizardController.get('popup').hide();
+            }
             var popup = App.ModalPopup.show({
               classNames: ['full-width-modal'],
               header: Em.I18n.t('admin.highAvailability.rollback.header'),
               bodyClass: App.HighAvailabilityRollbackView.extend({
                 controllerBinding: 'App.router.highAvailabilityRollbackController'
               }),
+              showCloseButton: false,
               primary: Em.I18n.t('form.cancel'),
               secondary: null,
               showFooter: false,

+ 10 - 0
ambari-web/app/utils/db.js

@@ -355,6 +355,11 @@ App.db.setHighAvailabilityWizardConfigTag = function (tag) {
   App.db.data.HighAvailabilityWizard[tag.name] = tag.value;
   localStorage.setObject('ambari', App.db.data);
 };
+App.db.setHighAvailabilityWizardFailedTask = function (task) {
+  App.db.data = localStorage.getObject('ambari');
+  App.db.data.HighAvailabilityWizard.failedTask = task;
+  localStorage.setObject('ambari', App.db.data);
+};
 
 App.db.setHighAvailabilityWizardTasksStatuses = function (tasksStatuses) {
   App.db.data = localStorage.getObject('ambari');
@@ -592,6 +597,11 @@ App.db.getHighAvailabilityWizardTasksStatuses = function () {
   return App.db.data.HighAvailabilityWizard.tasksStatuses;
 };
 
+App.db.getHighAvailabilityWizardFailedTask = function () {
+  App.db.data = localStorage.getObject('ambari');
+  return App.db.data.HighAvailabilityWizard.failedTask;
+};
+
 App.db.getHighAvailabilityWizardRequestIds = function () {
   App.db.data = localStorage.getObject('ambari');
   return App.db.data.HighAvailabilityWizard.requestIds;