reassign_master_routes.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391
  1. /**
  2. * Licensed to the Apache Software Foundation (ASF) under one
  3. * or more contributor license agreements. See the NOTICE file
  4. * distributed with this work for additional information
  5. * regarding copyright ownership. The ASF licenses this file
  6. * to you under the Apache License, Version 2.0 (the
  7. * "License"); you may not use this file except in compliance
  8. * with the License. You may obtain a copy of the License at
  9. *
  10. * http://www.apache.org/licenses/LICENSE-2.0
  11. *
  12. * Unless required by applicable law or agreed to in writing, software
  13. * distributed under the License is distributed on an "AS IS" BASIS,
  14. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15. * See the License for the specific language governing permissions and
  16. * limitations under the License.
  17. */
  18. var App = require('app');
  19. module.exports = App.WizardRoute.extend({
  20. route: '/service/reassign',
  21. leaveWizard: function (router, context) {
  22. var reassignMasterController = router.get('reassignMasterController');
  23. App.router.get('updateController').set('isWorking', true);
  24. reassignMasterController.finish();
  25. App.router.get('wizardWatcherController').resetUser();
  26. App.clusterStatus.setClusterStatus({
  27. clusterName: App.router.get('content.cluster.name'),
  28. clusterState: 'DEFAULT',
  29. localdb: App.db.data
  30. }, {alwaysCallback: function () {
  31. context.hide();
  32. router.transitionTo('main.index');
  33. Em.run.next(function() {
  34. location.reload();
  35. });
  36. }});
  37. },
  38. enter: function (router) {
  39. var context = this;
  40. var reassignMasterController = router.get('reassignMasterController');
  41. reassignMasterController.dataLoading().done(function () {
  42. if (App.router.get('mainHostController.hostsCountMap.TOTAL') > 1) {
  43. Em.run.next(function () {
  44. App.router.get('updateController').set('isWorking', false);
  45. var popup = App.ModalPopup.show({
  46. classNames: ['full-width-modal'],
  47. header: Em.I18n.t('services.reassign.header'),
  48. bodyClass: App.ReassignMasterView.extend({
  49. controller: reassignMasterController
  50. }),
  51. primary: Em.I18n.t('form.cancel'),
  52. showFooter: false,
  53. secondary: null,
  54. onPrimary: function () {
  55. this.hide();
  56. App.router.get('updateController').set('isWorking', true);
  57. App.router.transitionTo('main.services.index');
  58. },
  59. onClose: function () {
  60. var currStep = reassignMasterController.get('currentStep');
  61. if (parseInt(currStep) > 3) {
  62. var self = this;
  63. var step4Controller = router.get('reassignMasterWizardStep4Controller');
  64. var testDBTaskId = step4Controller.get('tasks').filterProperty('command', 'testDBConnection').get('firstObject.id');
  65. if(currStep !== "7"
  66. && testDBTaskId
  67. && reassignMasterController.get('content.tasksStatuses').get(testDBTaskId) === "FAILED")
  68. {
  69. App.showConfirmationPopup(function () {
  70. App.router.transitionTo('step7');
  71. }, Em.I18n.t('services.reassign.rollback.confirm'));
  72. } else {
  73. App.showConfirmationPopup(function () {
  74. router.get('reassignMasterWizardStep' + currStep + 'Controller').removeObserver('tasks.@each.status', this, 'onTaskStatusChange');
  75. context.leaveWizard(router, self);
  76. }, Em.I18n.t('services.reassign.closePopup').format(reassignMasterController.get('content.reassign.display_name')));
  77. }
  78. } else {
  79. context.leaveWizard(router, this);
  80. }
  81. },
  82. didInsertElement: function () {
  83. this.fitHeight();
  84. }
  85. });
  86. reassignMasterController.set('popup', popup);
  87. reassignMasterController.loadComponentToReassign();
  88. var currStep = reassignMasterController.get('currentStep');
  89. var currentClusterStatus = App.clusterStatus.get('value');
  90. if (currentClusterStatus) {
  91. switch (currentClusterStatus.clusterState) {
  92. case 'REASSIGN_MASTER_INSTALLING' :
  93. if (currentClusterStatus.localdb.ReassignMaster.currentStep !== currStep) {
  94. reassignMasterController.setCurrentStep(currentClusterStatus.localdb.ReassignMaster.currentStep);
  95. }
  96. break;
  97. }
  98. }
  99. App.router.get('wizardWatcherController').setUser(reassignMasterController.get('name'));
  100. router.transitionTo('step' + currStep);
  101. });
  102. } else {
  103. App.showAlertPopup(Em.I18n.t('common.error'), Em.I18n.t('services.reassign.error.fewHosts'), function () {
  104. router.transitionTo('main.services.index');
  105. })
  106. }
  107. });
  108. },
  109. step1: Em.Route.extend({
  110. route: '/step1',
  111. connectOutlets: function (router) {
  112. var controller = router.get('reassignMasterController');
  113. var step1Controller = router.get('reassignMasterWizardStep1Controller');
  114. controller.setCurrentStep('1');
  115. controller.dataLoading().done(function () {
  116. controller.loadAllPriorSteps();
  117. controller.connectOutlet('reassignMasterWizardStep1', controller.get('content'));
  118. step1Controller.loadConfigsTags();
  119. })
  120. },
  121. next: function (router) {
  122. var controller = router.get('reassignMasterController');
  123. App.db.setMasterComponentHosts(undefined);
  124. controller.clearMasterComponentHosts();
  125. router.transitionTo('step2');
  126. },
  127. unroutePath: function () {
  128. return false;
  129. }
  130. }),
  131. step2: Em.Route.extend({
  132. route: '/step2',
  133. connectOutlets: function (router) {
  134. var controller = router.get('reassignMasterController');
  135. controller.setCurrentStep('2');
  136. router.get('mainController').isLoading.call(router.get('clusterController'), 'isServiceContentFullyLoaded').done(function () {
  137. controller.loadAllPriorSteps();
  138. controller.connectOutlet('reassignMasterWizardStep2', controller.get('content'));
  139. })
  140. },
  141. back: Em.Router.transitionTo('step1'),
  142. next: function (router) {
  143. var controller = router.get('reassignMasterController');
  144. var reassignMasterWizardStep2 = router.get('reassignMasterWizardStep2Controller');
  145. controller.saveMasterComponentHosts(reassignMasterWizardStep2);
  146. var reassignHosts = {};
  147. var componentName = reassignMasterWizardStep2.get('content.reassign.component_name');
  148. var masterAssignmentsHosts = reassignMasterWizardStep2.get('selectedServicesMasters').filterProperty('component_name', componentName).mapProperty('selectedHost');
  149. var currentMasterHosts = App.HostComponent.find().filterProperty('componentName', componentName).mapProperty('hostName');
  150. masterAssignmentsHosts.forEach(function (host) {
  151. if (!currentMasterHosts.contains(host)) {
  152. reassignHosts.target = host;
  153. }
  154. }, this);
  155. currentMasterHosts.forEach(function (host) {
  156. if (!masterAssignmentsHosts.contains(host)) {
  157. reassignHosts.source = host;
  158. }
  159. }, this);
  160. controller.saveReassignHosts(reassignHosts);
  161. router.transitionTo('step3');
  162. },
  163. unroutePath: function () {
  164. return false;
  165. }
  166. }),
  167. step3: Em.Route.extend({
  168. route: '/step3',
  169. connectOutlets: function (router) {
  170. var controller = router.get('reassignMasterController');
  171. controller.setCurrentStep('3');
  172. controller.dataLoading().done(function () {
  173. controller.loadAllPriorSteps();
  174. controller.connectOutlet('reassignMasterWizardStep3', controller.get('content'));
  175. })
  176. },
  177. back: Em.Router.transitionTo('step2'),
  178. next: function (router) {
  179. App.db.setReassignTasksStatuses(undefined);
  180. App.db.setReassignTasksRequestIds(undefined);
  181. App.clusterStatus.setClusterStatus({
  182. clusterName: router.get('reassignMasterController.content.cluster.name'),
  183. clusterState: 'REASSIGN_MASTER_INSTALLING',
  184. wizardControllerName: 'reassignMasterController',
  185. localdb: App.db.data
  186. });
  187. router.transitionTo('step4');
  188. },
  189. unroutePath: function () {
  190. return false;
  191. }
  192. }),
  193. step4: Em.Route.extend({
  194. route: '/step4',
  195. connectOutlets: function (router) {
  196. var controller = router.get('reassignMasterController');
  197. controller.setCurrentStep('4');
  198. controller.setLowerStepsDisable(4);
  199. router.get('mainController').isLoading.call(router.get('clusterController'), 'isServiceContentFullyLoaded').done(function () {
  200. controller.loadAllPriorSteps();
  201. controller.connectOutlet('reassignMasterWizardStep4', controller.get('content'));
  202. });
  203. },
  204. next: function (router) {
  205. router.get('reassignMasterController').setCurrentStep('5');
  206. App.clusterStatus.setClusterStatus({
  207. clusterName: router.get('reassignMasterController.content.cluster.name'),
  208. clusterState: 'REASSIGN_MASTER_INSTALLING',
  209. wizardControllerName: 'reassignMasterController',
  210. localdb: App.db.data
  211. });
  212. router.transitionTo('step5');
  213. },
  214. complete: function (router) {
  215. var controller = router.get('reassignMasterController');
  216. var reassignMasterWizardStep4 = router.get('reassignMasterWizardStep4Controller');
  217. if (!reassignMasterWizardStep4.get('isSubmitDisabled')) {
  218. controller.finish();
  219. controller.get('popup').hide();
  220. App.clusterStatus.setClusterStatus({
  221. clusterName: router.get('reassignMasterController.content.cluster.name'),
  222. clusterState: 'DEFAULT',
  223. localdb: App.db.data
  224. }, {alwaysCallback: function () {
  225. controller.get('popup').hide();
  226. router.transitionTo('main.index');
  227. Em.run.next(function() {
  228. location.reload();
  229. });
  230. }});
  231. }
  232. },
  233. unroutePath: function () {
  234. return false;
  235. }
  236. }),
  237. step5: Em.Route.extend({
  238. route: '/step5',
  239. connectOutlets: function (router) {
  240. var controller = router.get('reassignMasterController');
  241. controller.setCurrentStep('5');
  242. router.get('mainController').isLoading.call(router.get('clusterController'), 'isServiceContentFullyLoaded').done(function () {
  243. controller.loadAllPriorSteps();
  244. controller.setLowerStepsDisable(5);
  245. if ((controller.get('content.reassign.component_name') === 'NAMENODE') || controller.get('content.reassign.component_name') === 'SECONDARY_NAMENODE') {
  246. controller.usersLoading().done(function () {
  247. controller.connectOutlet('reassignMasterWizardStep5', controller.get('content'));
  248. })
  249. } else {
  250. controller.connectOutlet('reassignMasterWizardStep5', controller.get('content'));
  251. }
  252. })
  253. },
  254. next: function (router) {
  255. App.showConfirmationPopup(function () {
  256. router.transitionTo('step6');
  257. }, Em.I18n.t('services.reassign.step5.confirmPopup.body'));
  258. },
  259. unroutePath: function () {
  260. return false;
  261. }
  262. }),
  263. step6: Em.Route.extend({
  264. route: '/step6',
  265. connectOutlets: function (router) {
  266. var controller = router.get('reassignMasterController');
  267. controller.setCurrentStep('6');
  268. controller.setLowerStepsDisable(6);
  269. router.get('mainController').isLoading.call(router.get('clusterController'), 'isServiceContentFullyLoaded').done(function () {
  270. controller.loadAllPriorSteps();
  271. controller.connectOutlet('reassignMasterWizardStep6', controller.get('content'));
  272. })
  273. },
  274. next: function (router) {
  275. var controller = router.get('reassignMasterController');
  276. var reassignMasterWizardStep6 = router.get('reassignMasterWizardStep6Controller');
  277. if (!reassignMasterWizardStep6.get('isSubmitDisabled')) {
  278. controller.finish();
  279. controller.get('popup').hide();
  280. App.clusterStatus.setClusterStatus({
  281. clusterName: router.get('reassignMasterController.content.cluster.name'),
  282. clusterState: 'DEFAULT',
  283. localdb: App.db.data
  284. }, {alwaysCallback: function () {
  285. controller.get('popup').hide();
  286. router.transitionTo('main.index');
  287. Em.run.next(function() {
  288. location.reload();
  289. });
  290. }});
  291. }
  292. },
  293. unroutePath: function () {
  294. return false;
  295. }
  296. }),
  297. step7: Em.Route.extend({
  298. route: '/step7',
  299. connectOutlets: function (router) {
  300. var controller = router.get('reassignMasterController');
  301. controller.setCurrentStep('7');
  302. controller.setLowerStepsDisable(7);
  303. controller.dataLoading().done(function () {
  304. controller.loadAllPriorSteps();
  305. controller.connectOutlet('reassignMasterWizardStep7', controller.get('content'));
  306. });
  307. },
  308. next: function (router) {
  309. var controller = router.get('reassignMasterController');
  310. var reassignMasterWizardStep7 = router.get('reassignMasterWizardStep7Controller');
  311. if (!reassignMasterWizardStep7.get('isSubmitDisabled')) {
  312. controller.finish();
  313. controller.get('popup').hide();
  314. App.clusterStatus.setClusterStatus({
  315. clusterName: router.get('reassignMasterController.content.cluster.name'),
  316. clusterState: 'DEFAULT',
  317. localdb: App.db.data
  318. }, {
  319. alwaysCallback: function () {
  320. controller.get('popup').hide();
  321. router.transitionTo('main.index');
  322. Em.run.next(function() {
  323. location.reload();
  324. });
  325. }
  326. });
  327. }
  328. },
  329. complete: function (router) {
  330. var controller = router.get('reassignMasterController');
  331. var reassignMasterWizardStep7 = router.get('reassignMasterWizardStep7Controller');
  332. if (!reassignMasterWizardStep7.get('isSubmitDisabled')) {
  333. controller.finish();
  334. controller.get('popup').hide();
  335. App.clusterStatus.setClusterStatus({
  336. clusterName: router.get('reassignMasterController.content.cluster.name'),
  337. clusterState: 'DEFAULT',
  338. localdb: App.db.data
  339. }, {
  340. alwaysCallback: function () {
  341. controller.get('popup').hide();
  342. router.transitionTo('main.index');
  343. Em.run.next(function() {
  344. location.reload();
  345. });
  346. }
  347. });
  348. }
  349. },
  350. unroutePath: function () {
  351. return false;
  352. }
  353. }),
  354. gotoStep7: Em.Router.transitionTo('step7'),
  355. backToServices: function (router) {
  356. App.router.get('updateController').set('isWorking', true);
  357. router.transitionTo('services');
  358. }
  359. });