Repository: ambari Updated Branches: refs/heads/trunk 43f70c8d0 -> 8fd6395b3
AMBARI-19793. Hive2: Unreasonable response time from query exeuction in hive view (pallavkul) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/8fd6395b Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/8fd6395b Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/8fd6395b Branch: refs/heads/trunk Commit: 8fd6395b3b6a95e17065a7c6ae26e8432c635a8c Parents: 43f70c8 Author: pallavkul <[email protected]> Authored: Wed Feb 8 16:56:49 2017 +0530 Committer: pallavkul <[email protected]> Committed: Wed Feb 8 16:56:49 2017 +0530 ---------------------------------------------------------------------- .../resources/ui/app/routes/queries/query.js | 31 +- .../src/main/resources/ui/app/routes/query.js | 305 ------------------- .../ui/app/templates/queries/query.hbs | 3 +- .../main/resources/ui/app/templates/query.hbs | 84 ----- 4 files changed, 4 insertions(+), 419 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/8fd6395b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js ---------------------------------------------------------------------- diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js index b904e4e..dcf27b4 100644 --- a/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js +++ b/contrib/views/hive20/src/main/resources/ui/app/routes/queries/query.js @@ -218,9 +218,8 @@ export default Ember.Route.extend({ self.get('controller.model').set('logFile', data.job.logFile); self.get('controller').set('currentJobId', data.job.id); - self.get('jobs').waitForJobToComplete(data.job.id, 5 * 1000, false) + self.get('jobs').waitForJobToComplete(data.job.id, 2 * 1000, false) .then((status) => { - Ember.run.later(() => { self.get('controller').set('isJobSuccess', true); self.send('getJob', data); @@ -231,9 +230,6 @@ export default Ember.Route.extend({ //Last log self.send('fetchLogs'); - //Open result tab and hide log tab - //self.send('showQueryEditorResult'); - }, 2 * 1000); }, (error) => { Ember.run.later(() => { // TODO: handle error @@ -319,21 +315,6 @@ export default Ember.Route.extend({ }, function(reason) { // on rejection console.log('reason' , reason); - if( reason.errors[0].status == 409 ){ - setTimeout(function(){ - - //Put the code here for changing the log content. - let logFile = self.get('controller.model').get('logFile'); - self.get('query').retrieveQueryLog(logFile).then(function(data) { - self.get('controller.model').set('logResults', data.file.fileContent); - }, function(error){ - console.log('error', error); - }); - - - self.send('getJob',data); - }, 2000); - } }); }, @@ -372,12 +353,6 @@ export default Ember.Route.extend({ }, function(reason) { // on rejection console.log('reason' , reason); - - if( reason.errors[0].status == 409 ){ - setTimeout(function(){ - self.send('getJob',data); - }, 2000); - } }); } else { //Pages from cache object this.get('controller.model').set('currentPage', currentPage+1); @@ -533,8 +508,6 @@ export default Ember.Route.extend({ showQueryResultContainer(){ this.get('controller.model').set('isQueryResultContainer', true); - }, - - + } }); http://git-wip-us.apache.org/repos/asf/ambari/blob/8fd6395b/contrib/views/hive20/src/main/resources/ui/app/routes/query.js ---------------------------------------------------------------------- diff --git a/contrib/views/hive20/src/main/resources/ui/app/routes/query.js b/contrib/views/hive20/src/main/resources/ui/app/routes/query.js deleted file mode 100644 index 54213c7..0000000 --- a/contrib/views/hive20/src/main/resources/ui/app/routes/query.js +++ /dev/null @@ -1,305 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import Ember from 'ember'; - -export default Ember.Route.extend({ - - model() { - return this.store.findAll('database'); - }, - - query: Ember.inject.service(), - - afterModel(model) { - if (model.get('length') > 0) { - this.selectDatabase(model); - } - }, - - setupController(controller, model) { - - let sortedModel = model.sortBy('name'); - let selectedModel = sortedModel.filterBy('selected', true).get('firstObject'); - sortedModel.removeObject(selectedModel); - let finalList = []; - let selectedDB = []; - - finalList.pushObject(selectedModel); - finalList.pushObjects(sortedModel); - controller.set('model', finalList); - - selectedDB.pushObject(selectedModel); - controller.set('selectedModel',selectedDB); - - let selecteDBName = selectedModel.get('name'); - - let self = this; - let selectedTablesModels =[]; - - selectedTablesModels.pushObject( - { - 'dbname': selecteDBName , - 'tables': this.store.query('table', {databaseId: selecteDBName}) - } - ) - - controller.set('selectedTablesModels',selectedTablesModels ); - controller.set('currentQuery', ''); - controller.set('isQueryRunning', false); - controller.set('defaultQueryResult', {'schema' :[], 'rows' :[]}); - controller.set('queryResult', controller.get('defaultQueryResult')); - controller.set('hidePreviousButton', true); - - //For Pagination - localStorage.setItem("jobData", JSON.stringify([])); - controller.set('prevPage', -1 ); - controller.set('currentPage', 0 ); - controller.set('nextPage', 1 ); - controller.set('currentJobData', null ); - - }, - - selectDatabase(model) { - // check if default database is present - let toSelect = model.findBy('name', 'default'); - if (Ember.isEmpty(toSelect)) { - let sortedModel = model.sortBy('name'); - toSelect = sortedModel.get('firstObject'); - } - toSelect.set('selected', true); - }, - - actions: { - - changeDbHandler(selectedDBs){ - - let self = this; - let selectedTablesModels =[]; - - selectedDBs.forEach(function(db){ - selectedTablesModels.pushObject( - { - 'dbname': db , - 'tables':self.store.query('table', {databaseId: db}) - } - ) - }); - - this.get('controller').set('selectedTablesModels', selectedTablesModels ); - - }, - - tableSelected(){ - console.log('I am in tableSelected'); - }, - - showTables(db){ - //should we do this by writing a seperate component. - $('.collapse').hide(); - $('#' + db).toggle(); - }, - - notEmptyDialogClosed() { - this.get('controller').set('databaseNotEmpty', false); - this.get('controller').set('databaseName', undefined); - }, - - executeQuery(isFirstCall){ - - let self = this; - let queryInput = this.get('controller').get('currentQuery'); - let dbid = this.get('controller').get('selectedTablesModels')[0]['dbname'] - - self.get('controller').set('isQueryRunning', true); - self.get('controller').set('queryResult', self.get('controller').get('defaultQueryResult')); - - let payload ={ - "title":"Worksheet", - "hiveQueryId":null, - "queryFile":null, - "owner":null, - "dataBase":dbid, - "status":null, - "statusMessage":null, - "dateSubmitted":null, - "forcedContent":queryInput, - "logFile":null, - "dagName":null, - "dagId":null, - "sessionTag":null, - "statusDir":null, - "referrer":"job", - "confFile":null, - "globalSettings":""}; - - - this.get('query').createJob(payload).then(function(data) { - // applying a timeout otherwise it goes for status code 409, although that condition is also handled in the code. - setTimeout(function(){ - self.get('controller').set('currentJobData', data); - self.send('getJob', data); - }, 2000); - }, function(reason) { - console.log(reason); - }); - - }, - getJob(data){ - - var self = this; - var data = data; - - let jobId = data.job.id; - let dateSubmitted = data.job.dateSubmitted; - - this.get('query').getJob(jobId, dateSubmitted, true).then(function(data) { - // on fulfillment - console.log('getJob route', data ); - self.get('controller').set('queryResult', data); - self.get('controller').set('isQueryRunning', false); - - let localArr = JSON.parse(localStorage.getItem("jobData")); - localArr.push(data); - localStorage.setItem("jobData", JSON.stringify(localArr)); - - self.get('controller').set('currentPage', localArr.length); - self.get('controller').set('prevPage', localArr.length-1); - - - }, function(reason) { - // on rejection - console.log('reason' , reason); - - if( reason.errors[0].status == 409 ){ - setTimeout(function(){ - self.send('getJob',data); - }, 2000); - } - }); - - }, - goNextPage(){ - - let nextPage = this.get('controller').get('nextPage'); - let totalPages = JSON.parse(localStorage.getItem("jobData")).length; - - if(nextPage >= totalPages){ - var self = this; - var data = this.get('controller').get('currentJobData'); - - let jobId = data.job.id; - let dateSubmitted = data.job.dateSubmitted; - - - this.get('query').getJob(jobId, dateSubmitted, false).then(function(data) { - // on fulfillment - console.log('getJob route', data ); - self.get('controller').set('queryResult', data); - self.get('controller').set('isQueryRunning', false); - self.get('controller').set('hidePreviousButton', false); - - let localArr = JSON.parse(localStorage.getItem("jobData")); - localArr.push(data); - - - localStorage.setItem("jobData", JSON.stringify(localArr)); - - - self.get('controller').set('currentPage', localArr.length); - self.get('controller').set('prevPage', localArr.length-1); - - self.get('controller').set('nextPage', localArr.length+1); - - }, function(reason) { - // on rejection - console.log('reason' , reason); - - if( reason.errors[0].status == 409 ){ - setTimeout(function(){ - self.send('getJob',data); - }, 2000); - } - }); - } else { - - let currentPage = this.get('controller').get('currentPage'); - let prevPage = this.get('controller').get('prevPage'); - let nextPage = this.get('controller').get('nextPage'); - let totalPages = JSON.parse(localStorage.getItem("jobData")).length; - - if(nextPage < totalPages ){ - this.get('controller').set('currentPage', currentPage+1 ); - this.get('controller').set('prevPage', prevPage + 1 ); - this.get('controller').set('nextPage', nextPage + 1); - - this.get('controller').set('hidePreviousButton', false); - - this.get('controller').set('queryResult', JSON.parse(localStorage.getItem("jobData"))[this.get('controller').get('currentPage')] ); - } else { - - console.log('upper limit exceed'); - this.send('goNextPage'); - } - } - - - }, - goPrevPage(){ - - let currentPage = this.get('controller').get('currentPage'); - let prevPage = this.get('controller').get('prevPage'); - let nextPage = this.get('controller').get('nextPage'); - let totalPages = JSON.parse(localStorage.getItem("jobData")).length; - - if(prevPage > -1){ - this.get('controller').set('currentPage', currentPage-1 ); - this.get('controller').set('prevPage', prevPage - 1 ); - this.get('controller').set('nextPage', this.get('controller').get('currentPage')+1); - - this.get('controller').set('queryResult', JSON.parse(localStorage.getItem("jobData"))[this.get('controller').get('currentPage')] ); - } else { - //console.log('previous limit over'); - this.get('controller').set('hidePreviousButton', true); - } - }, - - expandQueryEdidorPanel(){ - Ember.$('.query-editor-panel').toggleClass('query-editor-full-width'); - Ember.$('.database-panel').toggleClass("hide"); - }, - - expandQueryResultPanel(){ - - Ember.$('.query-editor-panel').toggleClass('query-editor-full-width'); - Ember.$('.query-editor-container').toggleClass("hide"); - Ember.$('.database-panel').toggleClass("hide"); - this.send('adjustPanelSize'); - }, - - adjustPanelSize(){ - let isFullHeight = ($(window).height() ==(parseInt(Ember.$('.ember-light-table').css('height'), 10)) ) || false; - if(!isFullHeight){ - Ember.$('.ember-light-table').css('height', '100vh'); - }else { - Ember.$('.ember-light-table').css('height', '70vh'); - } - } - - } -}); http://git-wip-us.apache.org/repos/asf/ambari/blob/8fd6395b/contrib/views/hive20/src/main/resources/ui/app/templates/queries/query.hbs ---------------------------------------------------------------------- diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/queries/query.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/queries/query.hbs index ce90883..8ee8e87 100644 --- a/contrib/views/hive20/src/main/resources/ui/app/templates/queries/query.hbs +++ b/contrib/views/hive20/src/main/resources/ui/app/templates/queries/query.hbs @@ -28,7 +28,8 @@ {{query-editor query=currentQuery }} </div> <div class="row query-editor-controls"> - <button class="btn btn-success" {{action "executeQuery" }}>{{fa-icon "check"}} Execute</button> + <button class="btn btn-success" {{action "executeQuery" }} disabled={{ worksheet.isQueryRunning}}>{{fa-icon "check"}} Execute</button> + <button class="btn btn-default" {{action "openWorksheetModal" }}>{{fa-icon "save"}} Save As</button> <div class="btn-group"> <button class="btn btn-default" type="button" data-toggle="dropdown">Insert UDF http://git-wip-us.apache.org/repos/asf/ambari/blob/8fd6395b/contrib/views/hive20/src/main/resources/ui/app/templates/query.hbs ---------------------------------------------------------------------- diff --git a/contrib/views/hive20/src/main/resources/ui/app/templates/query.hbs b/contrib/views/hive20/src/main/resources/ui/app/templates/query.hbs deleted file mode 100644 index 3575ec1..0000000 --- a/contrib/views/hive20/src/main/resources/ui/app/templates/query.hbs +++ /dev/null @@ -1,84 +0,0 @@ -{{! -* Licensed to the Apache Software Foundation (ASF) under one -* or more contributor license agreements. See the NOTICE file -* distributed with this work for additional information -* regarding copyright ownership. The ASF licenses this file -* to you under the Apache License, Version 2.0 (the -* "License"); you may not use this file except in compliance -* with the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -}} - -{{multiple-database-search-bar databases=model selected=selected changeDbHandler="changeDbHandler" }} - -<div class="clearfix col-md-9 query-editor-panel"> - <div class="query-editor-container"> - <div class="row query-editor" style="position:relative"> - <span class="expand-button" {{action "expandQueryEdidorPanel" }} > - {{fa-icon "expand"}} - </span> - {{query-editor query=currentQuery }} - </div> - <div class="row query-editor-controls"> - <button class="btn btn-success" {{action "executeQuery" }}>{{fa-icon "check"}} Execute</button> - {{#if isQueryRunning}} - <img src="http://www.bba-reman.com/images/fbloader.gif" height="22" width="32" /> - {{/if}} - </div> - </div> - <div class="clearfix row query-editor-results" style="position: relative"> - {{query-result-table queryResult=queryResult hidePreviousButton=hidePreviousButton goNextPage='goNextPage' goPrevPage='goPrevPage' expandQueryResultPanel='expandQueryResultPanel' }} - </div> -</div> - -<div class="col-md-3 database-panel"> - <div class="database-container"> - <div class="row"> - <div class="panel-group database-panel" id="accordion" role="tablist" aria-multiselectable="true"> - {{#each selectedTablesModels as |tableModel|}} - <div class="panel panel-default"> - <div class="panel-heading" role="tab"> - <h4 class="panel-title"> - <a role="button" data-toggle="collapse" data-parent="#accordion" - href="javascript:void(0)" {{action 'showTables' tableModel.dbname }} aria-expanded="true" - aria-controls={{tableModel.dbname}}> - {{ tableModel.dbname }} - </a> - <small class="pull-right">Tables({{tableModel.tables.length}})</small> - </h4> - </div> - <div id={{ tableModel.dbname }} class="panel-collapse collapse {{if singleDbModel 'in'}}" role="tabpanel" - aria-labelledby="headingOne"> - <div class="panel-body"> - {{#if tableModel.tables.length }} - {{#list-filter header="tables" items=tableModel.tables - placeholder="Search Tables" - as |filteredItems|}} - {{#list-group class="table-list" items=filteredItems as |item|}} - {{list-item item=item itemClicked="tableSelected"}} - {{/list-group}} - {{/list-filter}} - {{else}} - <div class="empty">No Table found.</div> - {{/if}} - </div> - </div> - </div> - {{/each}} - </div> - </div> -</div> -</div> - -{{#if databaseNotEmpty}} - {{database-not-empty name=databaseName close="notEmptyDialogClosed"}} -{{/if}} - -{{outlet}} \ No newline at end of file
