Repository: ambari Updated Branches: refs/heads/trunk b314e8db0 -> 1b71e10c3
AMBARI-11855. Capacity scheduler view, wrong queue rename behavior (Erik Bergenholtz via rlevas) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/1b71e10c Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/1b71e10c Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/1b71e10c Branch: refs/heads/trunk Commit: 1b71e10c34f06d5a03749daa3b005c0691be38e7 Parents: b314e8d Author: Erik Bergenholtz <[email protected]> Authored: Thu Jun 11 11:05:29 2015 -0400 Committer: Robert Levas <[email protected]> Committed: Thu Jun 11 11:05:29 2015 -0400 ---------------------------------------------------------------------- .../main/resources/ui/app/controllers/queue.js | 47 +++++++++++++++++--- .../src/main/resources/ui/app/store.js | 9 ++-- 2 files changed, 48 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/1b71e10c/contrib/views/capacity-scheduler/src/main/resources/ui/app/controllers/queue.js ---------------------------------------------------------------------- diff --git a/contrib/views/capacity-scheduler/src/main/resources/ui/app/controllers/queue.js b/contrib/views/capacity-scheduler/src/main/resources/ui/app/controllers/queue.js index 1720e56..77f8889 100644 --- a/contrib/views/capacity-scheduler/src/main/resources/ui/app/controllers/queue.js +++ b/contrib/views/capacity-scheduler/src/main/resources/ui/app/controllers/queue.js @@ -42,6 +42,7 @@ App.QueueController = Ember.ObjectController.extend({ store = this.get('store'), queuesController = this.get('controllers.queues'), parentPath = queue.get('parentPath'), + skeletons = [], name, renamedQueueBackup; if (opt == 'ask') { @@ -65,16 +66,28 @@ App.QueueController = Ember.ObjectController.extend({ if (queue.get('isNewQueue')) { renamedQueueBackup = this.get('store').buildDeletedQueue(queue); + + if (!Em.isEmpty(queue.get('queuesArray'))) { + this.recurceCreateChildrenSkeletons(queue,skeletons); + } } store.recurceRemoveQueue(queue).then(function (queue) { return (queue.get('isNewQueue')) ? renamedQueueBackup : store.get('deletedQueues').findBy('path',queue.get('path')); - }).then(function (deletedQueue) { - var targetDeleted = store.get('deletedQueues').findBy('path',[parentPath,name].join('.')), - queuePrototype = (targetDeleted) ? store.createFromDeleted(targetDeleted) : store.copyFromDeleted(deletedQueue,parentPath,name); + }) + .then(function (skeleton) { + return this.createQueueFromSkeleton(parentPath,name,skeleton); + }.bind(this)) + .then(function (queue) { + this.transitionToRoute('queue',queue); + return queue; + }.bind(this)) + .then(function (newParent) { + skeletons.forEach(function (skeleton) { + this.createQueueFromSkeleton(skeleton.parentPath.split('.').replace(newParent.get('depth'),1,newParent.get('name')).join('.'),skeleton.name,skeleton); + }.bind(this)); + }.bind(this)); - return store.saveAndUpdateQueue(queuePrototype,deletedQueue); - }).then(Em.run.bind(this,'transitionToRoute','queue')); } }, @@ -84,6 +97,30 @@ App.QueueController = Ember.ObjectController.extend({ } }, + createQueueFromSkeleton: function(parentPath,name,skeleton){ + var targetDeleted = this.store.get('deletedQueues').findBy('path',[parentPath,name].join('.')), + queueToSave = (targetDeleted) ? this.store.createFromDeleted(targetDeleted) : this.store.copyFromDeleted(skeleton,parentPath,name); + + return this.store.saveAndUpdateQueue(queueToSave,skeleton); + }, + + recurceCreateChildrenSkeletons: function(queue,skeletonArray) { + if (!skeletonArray) { + return; + } + var childrenNames = queue.get('queuesArray'); + + childrenNames.forEach(function (childName) { + var queueRecord = queue.store.getById('queue',[queue.get('id'),childName.toLowerCase()].join('.')); + + skeletonArray.push(queue.store.buildDeletedQueue(queueRecord)); + + if (!Em.isEmpty(queueRecord.get('queuesArray'))) { + this.recurceCreateChildrenSkeletons(queueRecord,skeletonArray); + } + }.bind(this)); + }, + /** * Collection of modified fields in queue. * @type {Object} - { [fileldName] : {Boolean} } http://git-wip-us.apache.org/repos/asf/ambari/blob/1b71e10c/contrib/views/capacity-scheduler/src/main/resources/ui/app/store.js ---------------------------------------------------------------------- diff --git a/contrib/views/capacity-scheduler/src/main/resources/ui/app/store.js b/contrib/views/capacity-scheduler/src/main/resources/ui/app/store.js index 61aa2db..c7a7e6a 100644 --- a/contrib/views/capacity-scheduler/src/main/resources/ui/app/store.js +++ b/contrib/views/capacity-scheduler/src/main/resources/ui/app/store.js @@ -150,12 +150,14 @@ App.ApplicationStore = DS.Store.extend({ recurceRemoveQueue: function (queue) { if (Em.isEmpty(queue)) { return; - } else if (!queue.get('isNewQueue') && !queue.get('isNew')) { + } else { queue.get('queuesArray').forEach(function (queueName) { this.recurceRemoveQueue(this.getById('queue',[queue.get('path'),queueName].join('.').toLowerCase())); }.bind(this)); - this.get('deletedQueues').pushObject(this.buildDeletedQueue(queue)); + if (!queue.get('isNewQueue')){ + this.get('deletedQueues').pushObject(this.buildDeletedQueue(queue)); + } } this.all('queue').findBy('path',queue.get('parentPath')).set('queuesArray',{'exclude':queue.get('name')}); @@ -315,7 +317,8 @@ App.ApplicationStore = DS.Store.extend({ notLabel = false, isDeleteOperation = false; - if (pending.length == 1) { + + if (pending.length == 1 || pending.isEvery('firstObject.isNew',true)) { this._super(); return; }
