This is an automated email from the ASF dual-hosted git repository.

ishanbha pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ambari.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 7e39765  [AMBARI-24857] UI Changes for supporting Ozone deployment. 
(#2570)
7e39765 is described below

commit 7e39765aec2df9030d3a970f58b0d53c6c2d0254
Author: Ishan Bhatt <ishanbhatt.1...@gmail.com>
AuthorDate: Mon Nov 5 07:56:43 2018 -0800

    [AMBARI-24857] UI Changes for supporting Ozone deployment. (#2570)
    
    * [AMBARI-24857] UI Changes for supporting Ozone deployment.
    
    * minor code fix
    
    * Minor code fix
    
    * Minor code fix
    
    * Minor code fix
---
 .../app/controllers/wizard/step4_controller.js     | 41 +++++++++++++++++-----
 .../app/controllers/wizard/step6_controller.js     |  5 ++-
 ambari-web/app/models/stack_service.js             | 17 ++++++++-
 ambari-web/app/views/main/host/summary.js          |  3 ++
 4 files changed, 56 insertions(+), 10 deletions(-)

diff --git a/ambari-web/app/controllers/wizard/step4_controller.js 
b/ambari-web/app/controllers/wizard/step4_controller.js
index 767147d..e2fc90b 100644
--- a/ambari-web/app/controllers/wizard/step4_controller.js
+++ b/ambari-web/app/controllers/wizard/step4_controller.js
@@ -59,11 +59,27 @@ App.WizardStep4Controller = Em.ArrayController.extend({
    */
   errorStack: [],
 
+  isAddServiceWizard: Em.computed.equal('content.controllerName', 
'addServiceController'),
+
+  isOzoneInstalled: function() {
+    let isOzone = this.findProperty('serviceName', 'OZONE');
+    return isOzone && isOzone.get('isInstalled');
+  }.property('@each.isInstalled'),
+
   /**
    * Services which are HDFS compatible
    */
   fileSystems: function() {
-    var fileSystems = this.filterProperty('isDFS', true);;
+    let fileSystems = [];
+    const self = this;
+    this.filterProperty('isDFS', true).forEach((fs) => {
+      if (self.get('isAddServiceWizard') && self.get('isOzoneInstalled') &&
+        fs.get('serviceName') === 'HDFS') {
+        return;
+      }
+      fileSystems.push(fs);
+    });
+
     return fileSystems.map(function(fs) {
       return App.FileSystem.create({content: fs, services: fileSystems});
     });
@@ -318,7 +334,7 @@ App.WizardStep4Controller = Em.ArrayController.extend({
    */
   isDFSStack: function () {
          var bDFSStack = false;
-    var dfsServices = ['HDFS', 'GLUSTERFS'];
+    var dfsServices = ['HDFS', 'GLUSTERFS', 'OZONE'];
     var availableServices = this.filterProperty('isInstalled',false);
     availableServices.forEach(function(service){
       if (dfsServices.contains(service.get('serviceName')) || 
service.get('serviceType') == 'HCFS' ) {
@@ -335,12 +351,26 @@ App.WizardStep4Controller = Em.ArrayController.extend({
    */
   fileSystemServiceValidation: function(callback) {
     if(this.isDFSStack()){
+      const self = this;
       var primaryDFS = this.findProperty('isPrimaryDFS',true);
       if (primaryDFS) {
         var primaryDfsDisplayName = 
primaryDFS.get('displayNameOnSelectServicePage');
         var primaryDfsServiceName = primaryDFS.get('serviceName');
+        //if multiple DFS are not selected, remove the related error from the 
error array
+        let removeFsError = function () {
+          let fsError = 
self.get('errorStack').findProperty('id',"multipleDFS");
+          if(fsError)
+          {
+            self.get('errorStack').removeObject(fsError);
+          }
+        };
         if (this.multipleDFSs()) {
           var dfsServices = 
this.filterProperty('isDFS',true).filterProperty('isSelected',true).mapProperty('serviceName');
+          //special case for HDFS and OZONE
+          if (dfsServices.length === 2 && dfsServices.includes('HDFS') && 
dfsServices.includes('OZONE')) {
+            removeFsError();
+            return;
+          }
           var services = dfsServices.map(function (item){
             return {
               serviceName: item,
@@ -355,12 +385,7 @@ App.WizardStep4Controller = Em.ArrayController.extend({
         }
         else
         {
-          //if multiple DFS are not selected, remove the related error from 
the error array
-          var fsError = 
this.get('errorStack').filterProperty('id',"multipleDFS");
-          if(fsError)
-          {
-             this.get('errorStack').removeObject(fsError[0]);
-          }
+          removeFsError();
         }
       }
     }
diff --git a/ambari-web/app/controllers/wizard/step6_controller.js 
b/ambari-web/app/controllers/wizard/step6_controller.js
index eb3e2cf..5952ed7 100644
--- a/ambari-web/app/controllers/wizard/step6_controller.js
+++ b/ambari-web/app/controllers/wizard/step6_controller.js
@@ -302,9 +302,11 @@ App.WizardStep6Controller = 
Em.Controller.extend(App.HostComponentValidationMixi
     else if (this.get('isAddServiceWizard')) services = 
installedServices.concat(selectedServices);
 
     var headers = Em.A([]);
+    let doHideOzoneDataNodes = !!services.findProperty('serviceName', 'HDFS');
     services.forEach(function (stackService) {
       stackService.get('serviceComponents').forEach(function 
(serviceComponent) {
-        if (serviceComponent.get('isShownOnInstallerSlaveClientPage')) {
+        let hideComponent = serviceComponent.get('componentName') === 
'OZONE_DATANODE' ? doHideOzoneDataNodes : false;
+        if (serviceComponent.get('isShownOnInstallerSlaveClientPage') && 
!hideComponent) {
           headers.pushObject(Em.Object.create({
             name: serviceComponent.get('componentName'),
             label: App.format.role(serviceComponent.get('componentName'), 
false),
@@ -339,6 +341,7 @@ App.WizardStep6Controller = 
Em.Controller.extend(App.HostComponentValidationMixi
     }
   },
 
+
   /**
    * Returns list of new hosts
    *
diff --git a/ambari-web/app/models/stack_service.js 
b/ambari-web/app/models/stack_service.js
index 618f716..b911360 100644
--- a/ambari-web/app/models/stack_service.js
+++ b/ambari-web/app/models/stack_service.js
@@ -75,9 +75,24 @@ App.FileSystem = Ember.ObjectProxy.extend({
   content: null,
   services: [],
 
+  //special case for HDFS and OZONE. They can be selected together
+  shouldAllSelectionBeCleared: function () {
+    const dfsNames = this.get('services').mapProperty('serviceName');
+    const coExistingDfs = ['HDFS', 'OZONE'],
+      selectedServices = this.get('services').filterProperty('isSelected');
+    for (let i = 0; i < selectedServices.length; i++) {
+      if (!coExistingDfs.includes(selectedServices[i].get('serviceName'))) {
+        return true;
+      }
+    }
+    return !(dfsNames.includes('HDFS') && dfsNames.includes('OZONE') && 
coExistingDfs.includes(this.get('content.serviceName')));
+  },
+
   isSelected: function(key, aBoolean) {
     if (arguments.length > 1) {
-      this.clearAllSelection();
+      if (this.shouldAllSelectionBeCleared()) {
+        this.clearAllSelection();
+      }
       this.get('content').set('isSelected', aBoolean);
     }
     return this.get('content.isSelected');
diff --git a/ambari-web/app/views/main/host/summary.js 
b/ambari-web/app/views/main/host/summary.js
index 43585d7..6397365 100644
--- a/ambari-web/app/views/main/host/summary.js
+++ b/ambari-web/app/views/main/host/summary.js
@@ -229,6 +229,9 @@ App.MainHostSummaryView = 
Em.View.extend(App.HiveInteractiveCheck, App.TimeRange
             addableComponent.get('componentName') === 
'HIVE_SERVER_INTERACTIVE' && !self.get('enableHiveInteractive')) {
             return;
           }
+          if (installedServices.includes('HDFS') && 
addableComponent.get('componentName') === 'OZONE_DATANODE') {
+            return;
+          }
           components.pushObject(self.addableComponentObject.create({
             'componentName': addableComponent.get('componentName'),
             'serviceName': addableComponent.get('serviceName')

Reply via email to