Return-Path: X-Original-To: archive-asf-public@cust-asf.ponee.io Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id A2295166C56 for ; Tue, 22 Aug 2017 13:47:37 +0200 (CEST) Received: (qmail 55335 invoked by uid 500); 22 Aug 2017 11:47:34 -0000 Mailing-List: contact commits-help@ambari.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: ambari-dev@ambari.apache.org Delivered-To: mailing list commits@ambari.apache.org Received: (qmail 52645 invoked by uid 99); 22 Aug 2017 11:47:32 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 22 Aug 2017 11:47:32 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 4D66CF5F16; Tue, 22 Aug 2017 11:47:30 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: lpuskas@apache.org To: commits@ambari.apache.org Date: Tue, 22 Aug 2017 11:48:05 -0000 Message-Id: In-Reply-To: <69ba2ab3390747f5a40ef2186d8d0fb1@git.apache.org> References: <69ba2ab3390747f5a40ef2186d8d0fb1@git.apache.org> X-Mailer: ASF-Git Admin Mailer Subject: [37/51] [abbrv] ambari git commit: AMBARI-21718. Unable to remove ZooKeeper on heartbeat lost hosts. (Ishan Bhatt via Jaimin) AMBARI-21718. Unable to remove ZooKeeper on heartbeat lost hosts. (Ishan Bhatt via Jaimin) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/d6908446 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/d6908446 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/d6908446 Branch: refs/heads/feature-branch-AMBARI-21307 Commit: d69084461998ad33c233bb33734b7935681df086 Parents: 15aa037 Author: Jaimin Jetly Authored: Mon Aug 21 12:12:50 2017 -0700 Committer: Jaimin Jetly Committed: Mon Aug 21 12:14:13 2017 -0700 ---------------------------------------------------------------------- ambari-web/app/controllers/main/host/details.js | 32 ++++++++--- ambari-web/app/messages.js | 4 +- .../test/controllers/main/host/details_test.js | 59 ++++++++++++++------ 3 files changed, 69 insertions(+), 26 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/d6908446/ambari-web/app/controllers/main/host/details.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/controllers/main/host/details.js b/ambari-web/app/controllers/main/host/details.js index abf7673..cf223d7 100644 --- a/ambari-web/app/controllers/main/host/details.js +++ b/ambari-web/app/controllers/main/host/details.js @@ -2490,6 +2490,8 @@ App.MainHostDetailsController = Em.Controller.extend(App.SupportClientConfigsDow zkServerInstalled: false, lastComponents: [], masterComponents: [], + nonAddableMasterComponents: [], + lastMasterComponents: [], runningComponents: [], nonDeletableComponents: [], unknownComponents: [], @@ -2500,12 +2502,22 @@ App.MainHostDetailsController = Em.Controller.extend(App.SupportClientConfigsDow if (cInstance.get('componentName') === 'ZOOKEEPER_SERVER') { container.zkServerInstalled = true; } + var isLastComponent = false; if (this.getTotalComponent(cInstance) === 1) { container.lastComponents.push(cInstance.get('displayName')); + isLastComponent = true; } var workStatus = cInstance.get('workStatus'); + if (cInstance.get('isMaster')) { - container.masterComponents.push(cInstance.get('displayName')); + var displayName = cInstance.get('displayName') + container.masterComponents.push(displayName); + if (!App.StackServiceComponent.find(cInstance.get('componentName')).get('isMasterAddableInstallerWizard')) { + container.nonAddableMasterComponents.push(displayName); + } + if(isLastComponent) { + container.lastMasterComponents.push(displayName); + } } if (stoppedStates.indexOf(workStatus) < 0) { container.runningComponents.push(cInstance.get('displayName')); @@ -2650,16 +2662,20 @@ App.MainHostDetailsController = Em.Controller.extend(App.SupportClientConfigsDow validateAndDeleteHost: function () { var container = this.getHostComponentsInfo(); - if (container.masterComponents.length > 0) { - this.raiseDeleteComponentsError(container, 'masterList'); - return; - } else if (container.nonDeletableComponents.length > 0) { + if (container.nonDeletableComponents.length > 0) { this.raiseDeleteComponentsError(container, 'nonDeletableList'); return; + } else if (container.nonAddableMasterComponents.length > 0) { + this.raiseDeleteComponentsError(container, 'masterList'); + return; } else if (container.runningComponents.length > 0) { this.raiseDeleteComponentsError(container, 'runningList'); return; + } else if(container.lastMasterComponents.length > 0) { + this.raiseDeleteComponentsError(container, 'lastMasterList'); + return; } + if (container.zkServerInstalled) { var self = this; return App.showConfirmationPopup(function () { @@ -2680,17 +2696,19 @@ App.MainHostDetailsController = Em.Controller.extend(App.SupportClientConfigsDow App.ModalPopup.show({ header: Em.I18n.t('hosts.cant.do.popup.title'), type: type, - showBodyEnd: Em.computed.existsIn('type', ['runningList', 'masterList']), + showBodyEnd: Em.computed.existsIn('type', ['runningList', 'masterList', 'lastMasterList']), container: container, components: function(){ var container = this.get('container'); switch (this.get('type')) { case 'masterList': - return container.masterComponents; + return container.nonAddableMasterComponents; case 'nonDeletableList': return container.nonDeletableComponents; case 'runningList': return container.runningComponents; + case 'lastMasterList': + return container.lastMasterComponents; } }.property('type'), componentsStr: function () { http://git-wip-us.apache.org/repos/asf/ambari/blob/d6908446/ambari-web/app/messages.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js index f75d801..87a5e97 100644 --- a/ambari-web/app/messages.js +++ b/ambari-web/app/messages.js @@ -2761,11 +2761,13 @@ Em.I18n.translations = { 'hosts.delete.popup.unknownComponents':'The following components have unknown status:', 'hosts.cant.do.popup.title':'Unable to Delete Host', 'hosts.cant.do.popup.masterList.body':'This host cannot be deleted since it has the following master components:', - 'hosts.cant.do.popup.masterList.body.end':'To delete this host, you must first move or delete all the master components listed above.', + 'hosts.cant.do.popup.masterList.body.end':'To delete this host, you must first move all the master components listed above.', 'hosts.cant.do.popup.nonDeletableList.body':'Deletion of the following {0} components is not supported. ', 'hosts.cant.do.popup.runningList.body':'This host cannot be deleted since the following components are running:', 'hosts.cant.do.popup.runningList.body.end':'To delete this host, you must first stop all the running components listed above. ' + 'If this host has a {0}, it should be decommissioned first to prevent data loss.', + 'hosts.cant.do.popup.lastMasterList.body':'This host cannot be deleted since the following master components do not have any other instances:', + 'hosts.cant.do.popup.lastMasterList.body.end':'To delete this host, you must first add all the components listed above to other hosts', 'hosts.add.header':'Add Host Wizard', 'hosts.add.exit.header':'Exit', 'hosts.add.exit.body':'Do you really want to exit Add Host Wizard?', http://git-wip-us.apache.org/repos/asf/ambari/blob/d6908446/ambari-web/test/controllers/main/host/details_test.js ---------------------------------------------------------------------- diff --git a/ambari-web/test/controllers/main/host/details_test.js b/ambari-web/test/controllers/main/host/details_test.js index 34794f7..f9df36d 100644 --- a/ambari-web/test/controllers/main/host/details_test.js +++ b/ambari-web/test/controllers/main/host/details_test.js @@ -1994,6 +1994,8 @@ describe('App.MainHostDetailsController', function () { zkServerInstalled: false, lastComponents: [], masterComponents: [], + nonAddableMasterComponents: [], + lastMasterComponents: [], runningComponents: [], nonDeletableComponents: [], unknownComponents: [], @@ -2118,82 +2120,103 @@ describe('App.MainHostDetailsController', function () { controller.confirmDeleteHost.restore(); }); - it('masterComponents exist', function () { + it('nonDeletableComponents exist', function () { controller.set('mockHostComponentsInfo', { - masterComponents: [ + nonDeletableComponents: [ {} ] }); controller.validateAndDeleteHost(); - expect(controller.raiseDeleteComponentsError.calledWith({masterComponents: [ - {} - ]}, 'masterList')).to.be.true; - }); - it('nonDeletableComponents exist', function () { - controller.set('mockHostComponentsInfo', { - masterComponents: [], + expect(controller.raiseDeleteComponentsError.calledWith({ nonDeletableComponents: [ {} ] + }, 'nonDeletableList')).to.be.true; + }); + it('nonAddableMasterComponents exist', function () { + controller.set('mockHostComponentsInfo', { + nonDeletableComponents: [], + nonAddableMasterComponents: [ + {} + ] }); controller.validateAndDeleteHost(); expect(controller.raiseDeleteComponentsError.calledWith({ - masterComponents: [], - nonDeletableComponents: [ + nonDeletableComponents: [], + nonAddableMasterComponents: [ {} ] - }, 'nonDeletableList')).to.be.true; + }, 'masterList')).to.be.true; }); it('runningComponents exist', function () { controller.set('mockHostComponentsInfo', { - masterComponents: [], + nonAddableMasterComponents: [], nonDeletableComponents: [], runningComponents: [{}] }); controller.validateAndDeleteHost(); expect(controller.raiseDeleteComponentsError.calledWith({ - masterComponents: [], + nonAddableMasterComponents: [], nonDeletableComponents: [], runningComponents: [{}] }, 'runningList')).to.be.true; }); + it('lastMasterComponents exist', function () { + controller.set('mockHostComponentsInfo', { + nonAddableMasterComponents: [], + nonDeletableComponents: [], + runningComponents: [], + lastMasterComponents: [{}] + }); + controller.validateAndDeleteHost(); + expect(controller.raiseDeleteComponentsError.calledWith({ + nonAddableMasterComponents: [], + nonDeletableComponents: [], + runningComponents: [], + lastMasterComponents: [{}] + }, 'lastMasterList')).to.be.true; + }); it('zkServerInstalled = true', function () { controller.set('mockHostComponentsInfo', { - masterComponents: [], + nonAddableMasterComponents: [], nonDeletableComponents: [], runningComponents: [], unknownComponents: [], lastComponents: [], + lastMasterComponents: [], zkServerInstalled: true }); var popup = controller.validateAndDeleteHost(); expect(App.showConfirmationPopup.calledOnce).to.be.true; popup.onPrimary(); expect(controller.confirmDeleteHost.calledWith({ - masterComponents: [], + nonAddableMasterComponents: [], nonDeletableComponents: [], runningComponents: [], unknownComponents: [], lastComponents: [], + lastMasterComponents: [], zkServerInstalled: true })).to.be.true; }); it('zkServerInstalled = false', function () { controller.set('mockHostComponentsInfo', { - masterComponents: [], + nonAddableMasterComponents: [], nonDeletableComponents: [], runningComponents: [], unknownComponents: [], lastComponents: [], + lastMasterComponents: [], zkServerInstalled: false }); controller.validateAndDeleteHost(); expect(controller.confirmDeleteHost.calledWith({ - masterComponents: [], + nonAddableMasterComponents: [], nonDeletableComponents: [], runningComponents: [], unknownComponents: [], lastComponents: [], + lastMasterComponents: [], zkServerInstalled: false })).to.be.true; });