Repository: ambari
Updated Branches:
  refs/heads/branch-1.5.0 4b28e139f -> 7b04eab2e


AMBARI-5242. Move wizard freezes on step "Configure component", operation 
"Install (component name)". (Denys Buzhor via akovalenko)


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

Branch: refs/heads/branch-1.5.0
Commit: 7b04eab2e1f533b1a12cb654535581c1d71ded73
Parents: 4b28e13
Author: Aleksandr Kovalenko <akovale...@hortonworks.com>
Authored: Fri Mar 28 13:12:56 2014 +0200
Committer: Aleksandr Kovalenko <akovale...@hortonworks.com>
Committed: Fri Mar 28 13:13:27 2014 +0200

----------------------------------------------------------------------
 .../highAvailability/progress_controller.js     | 42 ++++++++++++--------
 ambari-web/app/models/cluster_states.js         | 21 ++++++++--
 2 files changed, 42 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/7b04eab2/ambari-web/app/controllers/main/admin/highAvailability/progress_controller.js
----------------------------------------------------------------------
diff --git 
a/ambari-web/app/controllers/main/admin/highAvailability/progress_controller.js 
b/ambari-web/app/controllers/main/admin/highAvailability/progress_controller.js
index a5c58e5..5875533 100644
--- 
a/ambari-web/app/controllers/main/admin/highAvailability/progress_controller.js
+++ 
b/ambari-web/app/controllers/main/admin/highAvailability/progress_controller.js
@@ -187,6 +187,28 @@ App.HighAvailabilityProgressPageController = 
App.HighAvailabilityWizardControlle
 
   onTaskStatusChange: function () {
     console.warn('func: onTaskStatusChange1');
+    var statuses = this.get('tasks').mapProperty('status');
+    var logs = this.get('tasks').mapProperty('hosts');
+    var requestIds = this.get('currentRequestIds');
+    console.warn('func: onTaskStatusChange5',statuses, logs, requestIds);
+    // save task info
+    
App.router.get(this.get('content.controllerName')).saveTasksStatuses(statuses);
+    
App.router.get(this.get('content.controllerName')).saveRequestIds(requestIds);
+    App.router.get(this.get('content.controllerName')).saveLogs(logs);
+    // call saving of cluster status asynchronous
+    // synchronous executing cause problems in Firefox
+    App.clusterStatus.setClusterStatus({
+      clusterName: this.get('content.cluster.name'),
+      clusterState: this.get('clusterDeployState'),
+      wizardControllerName: this.get('content.controllerName'),
+      localdb: App.db.data
+    }, { async: true, success: 'statusChangeCallback', sender: this });
+  },
+  /**
+   * Method that called after saving persist data to server.
+   * Switch task according its status.
+   */
+  statusChangeCallback: function() {
     if (!this.get('tasks').someProperty('status', 'IN_PROGRESS') && 
!this.get('tasks').someProperty('status', 'QUEUED') && 
!this.get('tasks').someProperty('status', 'FAILED')) {
       var nextTask = this.get('tasks').findProperty('status', 'PENDING');
       if (nextTask) {
@@ -210,24 +232,10 @@ App.HighAvailabilityProgressPageController = 
App.HighAvailabilityWizardControlle
     }
     
this.get('tasks').filterProperty('status','COMPLETED').setEach('showRetry', 
false);
     
this.get('tasks').filterProperty('status','COMPLETED').setEach('showRollback', 
false);
-
-    var statuses = this.get('tasks').mapProperty('status');
-    var logs = this.get('tasks').mapProperty('hosts');
-    var requestIds = this.get('currentRequestIds');
-    console.warn('func: onTaskStatusChange5',statuses, logs, requestIds);
-    
App.router.get(this.get('content.controllerName')).saveTasksStatuses(statuses);
-    
App.router.get(this.get('content.controllerName')).saveRequestIds(requestIds);
-    App.router.get(this.get('content.controllerName')).saveLogs(logs);
-    App.clusterStatus.setClusterStatus({
-      clusterName: this.get('content.cluster.name'),
-      clusterState: this.get('clusterDeployState'),
-      wizardControllerName: this.get('content.controllerName'),
-      localdb: App.db.data
-    });
   },
 
-  /*
-   run command of appropriate task
+  /**
+   * Run command of appropriate task
    */
   runTask: function (taskId) {
     console.warn('func: runTask',taskId);
@@ -370,6 +378,7 @@ App.HighAvailabilityProgressPageController = 
App.HighAvailabilityWizardControlle
     console.warn('func: doPolling');
     this.setTaskStatus(this.get('currentTaskId'), 'IN_PROGRESS');
     var requestIds = this.get('currentRequestIds');
+    this.set('logs', []);
     for (var i = 0; i < requestIds.length; i++) {
       App.ajax.send({
         name: 'admin.high_availability.polling',
@@ -415,7 +424,6 @@ App.HighAvailabilityProgressPageController = 
App.HighAvailabilityWizardControlle
           self.doPolling()
         }, self.POLL_INTERVAL);
       }
-      this.set('logs', []);
     }
   },
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/7b04eab2/ambari-web/app/models/cluster_states.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/cluster_states.js 
b/ambari-web/app/models/cluster_states.js
index fae426e..e1ed468 100644
--- a/ambari-web/app/models/cluster_states.js
+++ b/ambari-web/app/models/cluster_states.js
@@ -124,9 +124,11 @@ App.clusterStatus = Ember.Object.create({
   /**
    * update cluster status and post it on server
    * @param newValue
+   * @param opt - used for additional ajax request options, by default ajax 
used synchronous mode
+   *
    * @return {*}
    */
-  setClusterStatus: function(newValue){
+  setClusterStatus: function(newValue, opt){
     if(App.testMode) return false;
     var user = App.db.getUser();
     var login = App.db.getLoginName();
@@ -146,6 +148,7 @@ App.clusterStatus = Ember.Object.create({
         this.set('wizardControllerName', newValue.wizardControllerName);
         val.wizardControllerName = newValue.wizardControllerName;
       }
+
       if (newValue.localdb) {
         if (newValue.localdb.app && newValue.localdb.app.user)
           delete newValue.localdb.app.user;
@@ -156,7 +159,7 @@ App.clusterStatus = Ember.Object.create({
       } else {
         delete App.db.data.app.user;
         delete App.db.data.app.loginName;
-          val.localdb = App.db.data;
+        val.localdb = App.db.data;
         App.db.setUser(user);
         App.db.setLoginName(login);
       }
@@ -165,7 +168,7 @@ App.clusterStatus = Ember.Object.create({
 
       keyValuePair[this.get('key')] = JSON.stringify(val);
 
-      App.ajax.send({
+      var ajaxOptions = {
         name: 'cluster.state',
         sender: this,
         data: {
@@ -173,7 +176,17 @@ App.clusterStatus = Ember.Object.create({
         },
         beforeSend: 'clusterStatusBeforeSend',
         error: 'clusterStatusErrorCallBack'
-      });
+      };
+
+      if (opt) {
+        ajaxOptions.async = !!opt.async;
+        ajaxOptions.sender = opt.sender || this;
+        ajaxOptions.success = opt.success;
+        ajaxOptions.beforeSend = opt.beforeSend;
+        ajaxOptions.error = opt.error;
+      }
+
+      App.ajax.send(ajaxOptions);
       return newValue;
     }
   },

Reply via email to