You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by al...@apache.org on 2015/05/20 20:10:25 UTC

[2/2] ambari git commit: AMBARI-11275. RU Improvements: List services that failed service check and user chose to skip (alexantonenko)

AMBARI-11275. RU Improvements: List services that failed service check and user chose to skip (alexantonenko)


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

Branch: refs/heads/trunk
Commit: e9e8c4eff188f7ffdd78558d6f618bf7e9924423
Parents: 932855f
Author: Alex Antonenko <hi...@gmail.com>
Authored: Wed May 20 20:50:43 2015 +0300
Committer: Alex Antonenko <hi...@gmail.com>
Committed: Wed May 20 21:10:20 2015 +0300

----------------------------------------------------------------------
 ambari-web/app/messages.js                      |   2 +
 .../stack_upgrade/stack_upgrade_wizard.hbs      |  14 ++
 ambari-web/app/utils/ajax/ajax.js               |   3 +
 .../admin/stack_upgrade/upgrade_wizard_view.js  |  49 +++++++
 .../stack_upgrade/upgrade_wizard_view_test.js   | 144 +++++++++++++++++++
 5 files changed, 212 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/e9e8c4ef/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 410e849..d0f680f 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -1426,6 +1426,8 @@ Em.I18n.translations = {
     "Click on <b>Finalize</b> when you are ready to finalize the downgrade and commit to the new version." +
     " You are strongly encouraged to run tests on your cluster to ensure it is fully operational before finalizing." +
     " <b>You cannot go back to the original version once the downgrade is finalized.</b>",
+  'admin.stackUpgrade.finalize.message.skippedServiceChecks': "During the upgrade, checks for the following services failed and were skipped:",
+  'admin.stackUpgrade.finalize.message.testServices': "You are strongly recommended to test these services before finalizing upgrade.",
   'admin.stackUpgrade.doThisLater': "Do This Later",
   'admin.stackUpgrade.pauseUpgrade': "Pause Upgrade",
   'admin.stackUpgrade.downgrade.proceed': "Proceed with Downgrade",

http://git-wip-us.apache.org/repos/asf/ambari/blob/e9e8c4ef/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs b/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
index 6dec0e3..0198afb 100644
--- a/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
+++ b/ambari-web/app/templates/main/admin/stack_upgrade/stack_upgrade_wizard.hbs
@@ -93,6 +93,20 @@
                 <p>{{t admin.stackUpgrade.finalize.message.upgrade}}</p>
               {{/if}}
 
+              {{#if view.areSkippedServiceChecksLoaded}}
+                {{#if view.skippedServiceChecks.length}}
+                  <div>{{t admin.stackUpgrade.finalize.message.skippedServiceChecks}}</div>
+                  <ul>
+                    {{#each serviceName in view.skippedServiceChecks}}
+                      <li>{{serviceName}}</li>
+                    {{/each}}
+                  </ul>
+                  <div>{{t admin.stackUpgrade.finalize.message.testServices}}</div>
+                {{/if}}
+              {{else}}
+                <div class="spinner"></div>
+              {{/if}}
+
               <label class="message">
                 {{view Em.Checkbox checkedBinding="view.isManualDone"}}
                 {{t admin.stackUpgrade.dialog.manualDone}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/e9e8c4ef/ambari-web/app/utils/ajax/ajax.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/ajax/ajax.js b/ambari-web/app/utils/ajax/ajax.js
index 77d6ea5..943c3f6 100644
--- a/ambari-web/app/utils/ajax/ajax.js
+++ b/ambari-web/app/utils/ajax/ajax.js
@@ -1519,6 +1519,9 @@ var urls = {
     'minimal_response=true',
     'mock': '/data/stack_versions/upgrade_item.json'
   },
+  'admin.upgrade.service_checks': {
+    'real': '/clusters/{clusterName}/upgrades/{upgradeId}/upgrade_groups?upgrade_items/UpgradeItem/status=COMPLETED&upgrade_items/tasks/Tasks/status.in(FAILED,ABORTED,TIMEDOUT)&upgrade_items/tasks/Tasks/command=SERVICE_CHECK&fields=upgrade_items/tasks/Tasks/command_detail,upgrade_items/tasks/Tasks/status&minimal_response=true'
+  },
   'admin.upgrade.start': {
     'real': '/clusters/{clusterName}/upgrades',
     'mock': '/data/stack_versions/start_upgrade.json',

http://git-wip-us.apache.org/repos/asf/ambari/blob/e9e8c4ef/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js
index b989ac7..3c1f7be 100644
--- a/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js
+++ b/ambari-web/app/views/main/admin/stack_upgrade/upgrade_wizard_view.js
@@ -64,6 +64,18 @@ App.upgradeWizardView = Em.View.extend({
   outsideView: true,
 
   /**
+   * Determines if list of services with checks that failed and were skipped by user during the upgrade is loaded
+   * @type {boolean}
+   */
+  areSkippedServiceChecksLoaded: false,
+
+  /**
+   * List of services with checks that failed and were skipped by user during the upgrade
+   * @type {array}
+   */
+  skippedServiceChecks: [],
+
+  /**
    * Downgrade should be available only if target version higher than current, so we can't downgrade
    * when downgrade already started
    * @type {boolean}
@@ -238,6 +250,43 @@ App.upgradeWizardView = Em.View.extend({
     }
   }.observes('App.clusterName'),
 
+  getSkippedServiceChecks: function () {
+    if (this.get('isFinalizeItem') && !this.get('areSkippedServiceChecksLoaded')) {
+      var self = this;
+      App.ajax.send({
+        name: 'admin.upgrade.service_checks',
+        sender: this,
+        data: {
+          upgradeId: this.get('controller.upgradeId')
+        },
+        success: 'getSkippedServiceChecksSuccessCallback'
+      }).complete(function () {
+          self.set('areSkippedServiceChecksLoaded', true);
+        });
+    }
+  }.observes('isFinalizeItem'),
+
+  getSkippedServiceChecksSuccessCallback: function (data) {
+    if (data.items && data.items.length) {
+      var lastItemWithChecks = data.items[data.items.length - 1];
+      if (lastItemWithChecks && lastItemWithChecks.upgrade_items && lastItemWithChecks.upgrade_items.length) {
+        var skippedServiceChecks = [];
+        lastItemWithChecks.upgrade_items.forEach(function (item) {
+          if (item.tasks && item.tasks.length) {
+            item.tasks.forEach(function (task) {
+              var detail = Em.get(task, 'Tasks.command_detail');
+              if (detail && detail.startsWith('SERVICE_CHECK ')) {
+                skippedServiceChecks.push(App.format.role(detail.replace('SERVICE_CHECK ', '')));
+              }
+            });
+          }
+        });
+        skippedServiceChecks = skippedServiceChecks.uniq();
+        this.set('skippedServiceChecks', skippedServiceChecks);
+      }
+    }
+  },
+
   /**
    * start polling upgrade data
    */

http://git-wip-us.apache.org/repos/asf/ambari/blob/e9e8c4ef/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js
index d37649d..860e2d6 100644
--- a/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js
+++ b/ambari-web/test/views/main/admin/stack_upgrade/upgrade_wizard_view_test.js
@@ -644,4 +644,148 @@ describe('App.upgradeWizardView', function () {
     });
   });
 
+  describe('#getSkippedServiceChecks()', function () {
+
+    var cases = [
+      {
+        isFinalizeItem: false,
+        areSkippedServiceChecksLoaded: false,
+        ajaxSendCallCount: 0,
+        areSkippedServiceChecksLoadedResult: false,
+        title: 'no ajax request should be sent away from Finalize step'
+      },
+      {
+        isFinalizeItem: false,
+        areSkippedServiceChecksLoaded: true,
+        ajaxSendCallCount: 0,
+        areSkippedServiceChecksLoadedResult: false,
+        title: 'no ajax request should be sent if data is already loaded'
+      },
+      {
+        isFinalizeItem: true,
+        areSkippedServiceChecksLoaded: false,
+        ajaxSendCallCount: 1,
+        areSkippedServiceChecksLoadedResult: true,
+        title: 'ajax request should be sent on Finalize step'
+      }
+    ];
+
+    beforeEach(function () {
+      view.set('controller.upgradeId', 1);
+      sinon.stub(App.ajax, 'send').returns({
+        complete: function (callback) {
+          callback();
+        }
+      });
+    });
+
+    afterEach(function () {
+      App.ajax.send.restore();
+    });
+
+    cases.forEach(function (item) {
+      it(item.title, function () {
+        view.set('areSkippedServiceChecksLoaded', item.areSkippedServiceChecksLoaded);
+        view.reopen({
+          isFinalizeItem: item.isFinalizeItem
+        });
+        view.propertyDidChange('isFinalizeItem');
+        expect(App.ajax.send.callCount).to.equal(item.ajaxSendCallCount);
+        expect(view.get('areSkippedServiceChecksLoaded')).to.equal(item.areSkippedServiceChecksLoadedResult);
+        if (item.ajaxSendCallCount) {
+          expect(App.ajax.send.firstCall.args[0].data.upgradeId).to.equal(1);
+        }
+      });
+    });
+
+  });
+
+  describe('#getSkippedServiceChecksSuccessCallback()', function () {
+
+    var data = {
+      items: [
+        {
+          upgrade_items: [
+            {
+              tasks: [
+                {
+                  Tasks: {
+                    command_detail: 'SERVICE_CHECK HDFS'
+                  }
+                }
+              ]
+            }
+          ]
+        },
+        {
+          upgrade_items: [
+            {
+              tasks: [
+                {
+                  Tasks: {
+                    command_detail: 'SERVICE_CHECK ZOOKEEPER'
+                  }
+                }
+              ]
+            },
+            {
+              tasks: [
+                {
+                  Tasks: {
+                    command_detail: 'SERVICE_CHECK YARN'
+                  }
+                }
+              ]
+            },
+            {},
+            {
+              tasks: []
+            },
+            {
+              tasks: [
+                {
+                  Tasks: null
+                },
+                {
+                  Tasks: {
+                    command_detail: 'SERVICE_CHECK HIVE'
+                  }
+                }
+              ]
+            },
+            {
+              tasks: [
+                {
+                  Tasks: {
+                    command_detail: null
+                  }
+                },
+                {
+                  Tasks: {
+                    command_detail: 'SERVICE_CHECK YARN'
+                  }
+                }
+              ]
+            },
+            {
+              tasks: [
+                {
+                  Tasks: {
+                    command_detail: 'RESTART HDFS'
+                  }
+                }
+              ]
+            }
+          ]
+        }
+      ]
+    };
+
+    it('should set an array of service names from tha latest service checks step', function () {
+      view.getSkippedServiceChecksSuccessCallback(data);
+      expect(view.get('skippedServiceChecks')).to.eql(['ZooKeeper', 'YARN', 'Hive']);
+    });
+
+  });
+
 });