Просмотр исходного кода

AMBARI-5484. When ATS is not running, Jobs page just shows "Loading..." forever (alexantonenko)

Alex Antonenko 11 лет назад
Родитель
Сommit
8c6e091522

+ 17 - 1
ambari-web/app/controllers/main/jobs_controller.js

@@ -107,6 +107,7 @@ App.MainJobsController = Em.Controller.extend({
   sortProperty: 'id',
   sortProperty: 'id',
   sortAscending: true,
   sortAscending: true,
   sortingDone: true,
   sortingDone: true,
+  jobsMessage: Em.I18n.t('jobs.loadingTasks'),
 
 
   sortingColumnObserver: function () {
   sortingColumnObserver: function () {
     if(this.get('sortingColumn')){
     if(this.get('sortingColumn')){
@@ -377,11 +378,25 @@ App.MainJobsController = Em.Controller.extend({
     console.debug(jqXHR);
     console.debug(jqXHR);
   },
   },
 
 
+  checkDataLoadingError: function (jqXHR){
+    var atsComponent = App.HostComponent.find().findProperty('componentName','APP_TIMELINE_SERVER');
+    if(atsComponent && atsComponent.get('workStatus') != "STARTED") {
+      this.set('jobsMessage', Em.I18n.t('jobs.error.ats.down'));
+      return true;
+    }else if (jqXHR && jqXHR.status == 400) {
+      this.set('jobsMessage', Em.I18n.t('jobs.error.400'));
+    }else{
+      this.set('jobsMessage', Em.I18n.t('jobs.loadingTasks'));
+    }
+    return false;
+  },
+
   loadJobs : function() {
   loadJobs : function() {
     var self = this;
     var self = this;
     var timeout = this.get('loadTimeout');
     var timeout = this.get('loadTimeout');
     var yarnService = App.YARNService.find().objectAt(0);
     var yarnService = App.YARNService.find().objectAt(0);
-    if (yarnService != null) {
+    var retryLoad = this.checkDataLoadingError();
+    if (yarnService != null && !retryLoad) {
       this.set('loading', true);
       this.set('loading', true);
       var historyServerHostName = yarnService.get('appTimelineServerNode.hostName');
       var historyServerHostName = yarnService.get('appTimelineServerNode.hostName');
       var filtersLink = this.get('filterObject').createJobsFiltersLink();
       var filtersLink = this.get('filterObject').createJobsFiltersLink();
@@ -407,6 +422,7 @@ App.MainJobsController = Em.Controller.extend({
           self.set('loaded', true);
           self.set('loaded', true);
         }
         }
       }, function (jqXHR, textStatus) {
       }, function (jqXHR, textStatus) {
+        self.checkDataLoadingError(jqXHR);
         App.hiveJobsMapper.map({entities : []});
         App.hiveJobsMapper.map({entities : []});
       });
       });
     }else{
     }else{

+ 2 - 0
ambari-web/app/messages.js

@@ -1990,6 +1990,8 @@ Em.I18n.translations = {
 
 
   'jobs.nothingToShow': 'No jobs to display',
   'jobs.nothingToShow': 'No jobs to display',
   'jobs.loadingTasks': 'Loading...',
   'jobs.loadingTasks': 'Loading...',
+  'jobs.error.ats.down': 'Jobs data cannot be shown since YARN App Timeline Server is not running.',
+  'jobs.error.400': 'Unable to load data.',
   'jobs.table.custom.date.am':'AM',
   'jobs.table.custom.date.am':'AM',
   'jobs.table.custom.date.pm':'PM',
   'jobs.table.custom.date.pm':'PM',
   'jobs.table.custom.date.header':'Select Custom Dates',
   'jobs.table.custom.date.header':'Select Custom Dates',

+ 7 - 5
ambari-web/app/templates/main/jobs.hbs

@@ -52,11 +52,13 @@
           <tbody>
           <tbody>
           {{#if view.noDataToShow}}
           {{#if view.noDataToShow}}
               <tr>
               <tr>
-                {{#if controller.loaded}}
-                <td class="no-data" {{bindAttr colspan="controller.columnsName.content.length"}}>{{t jobs.nothingToShow}}</td>
-              {{else}}
-                    <td class="no-data" {{bindAttr colspan="controller.columnsName.content.length"}}>{{t jobs.loadingTasks}}</td>
-                {{/if}}
+                <td class="no-data" {{bindAttr colspan="controller.columnsName.content.length"}}>
+                  {{#if controller.loaded}}
+                    {{t jobs.nothingToShow}}
+                  {{else}}
+                    {{controller.jobsMessage}}
+                  {{/if}}
+                </td>
               </tr>
               </tr>
           {{else}}
           {{else}}
             {{#each job in controller.sortedContent}}
             {{#each job in controller.sortedContent}}