AMBARI-18964. unable to add users permission for tez view. (dipayanb)

Change-Id: I9b8beb57e6bc744d10000ebb3a49bd4d8354ae20


Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/503aa980
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/503aa980
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/503aa980

Branch: refs/heads/AMBARI-2.4.2.16
Commit: 503aa9809d4890e6c54b219fda1aa3444dbb5597
Parents: 640b471
Author: Dipayan Bhowmick <[email protected]>
Authored: Wed Nov 23 02:39:16 2016 +0530
Committer: Dipayan Bhowmick <[email protected]>
Committed: Wed Nov 23 02:39:16 2016 +0530

----------------------------------------------------------------------
 .../apache/ambari/server/view/ViewRegistry.java | 45 ++++++++++++++------
 1 file changed, 33 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/503aa980/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java
----------------------------------------------------------------------
diff --git 
a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java 
b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java
index 7f58485..31a66d1 100644
--- 
a/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java
+++ 
b/ambari-server/src/main/java/org/apache/ambari/server/view/ViewRegistry.java
@@ -708,25 +708,46 @@ public class ViewRegistry {
     LOG.debug("Copy all privileges from " + sourceInstanceEntity.getName() + " 
to " +
               targetInstanceEntity.getName());
     List<PrivilegeEntity> targetInstancePrivileges = 
privilegeDAO.findByResourceId(targetInstanceEntity.getResource().getId());
+    List<PrivilegeEntity> sourceInstancePrivileges = 
privilegeDAO.findByResourceId(sourceInstanceEntity.getResource().getId());
+
+    // Do not run migration when the target Instance has already got some 
privileges.
+    // This means that the upgrade process would have already run during the 
first start of ambari after upgrade
     if (targetInstancePrivileges.size() > 0) {
-      LOG.warn("Target instance {} already has privileges assigned, these will 
not be deleted. Manual clean up may be needed",targetInstanceEntity.getName());
+      return;
     }
 
-    List<PrivilegeEntity> sourceInstancePrivileges = 
privilegeDAO.findByResourceId(sourceInstanceEntity.getResource().getId());
     for (PrivilegeEntity sourcePrivilege : sourceInstancePrivileges) {
-      PrivilegeEntity targetPrivilege = new PrivilegeEntity();
-      targetPrivilege.setPrincipal(sourcePrivilege.getPrincipal());
-      targetPrivilege.setResource(targetInstanceEntity.getResource());
-      targetPrivilege.setPermission(sourcePrivilege.getPermission());
-      try {
-        privilegeDAO.create(targetPrivilege);
-        targetPrivilege.getPrincipal().getPrivileges().add(sourcePrivilege);
-      } catch (Exception e){
-        LOG.warn("Could not migrate privilege {} ",targetPrivilege);
-        LOG.error("Caught exception",e);
+      if (checkAdditionOfPrivilegesRequired(sourcePrivilege, 
targetInstancePrivileges)) {
+        PrivilegeEntity targetPrivilege = new PrivilegeEntity();
+        targetPrivilege.setPrincipal(sourcePrivilege.getPrincipal());
+        targetPrivilege.setResource(targetInstanceEntity.getResource());
+        targetPrivilege.setPermission(sourcePrivilege.getPermission());
+        try {
+          privilegeDAO.create(targetPrivilege);
+          targetPrivilege.getPrincipal().getPrivileges().add(sourcePrivilege);
+        } catch (Exception e){
+          LOG.warn("Could not migrate privilege {} ",targetPrivilege);
+          LOG.error("Caught exception",e);
+        }
       }
+    }
+
+  }
 
+  /**
+   * Checks if the all the targetPrivileges are different than the 
sourcePrivilege
+   * @param sourcePrivilege - Source privilege
+   * @param targetInstancePrivileges - target privileges
+   * @return true if the sourcePrivilege is different than all the 
targetPrivileges
+   */
+  private boolean checkAdditionOfPrivilegesRequired(PrivilegeEntity 
sourcePrivilege, List<PrivilegeEntity> targetInstancePrivileges) {
+    for (PrivilegeEntity targetPrivilege : targetInstancePrivileges) {
+      if 
(targetPrivilege.getPermission().getId().equals(sourcePrivilege.getPermission().getId())
 &&
+          
targetPrivilege.getPrincipal().getId().equals(sourcePrivilege.getPrincipal().getId()))
 {
+        return false;
+      }
     }
+    return true;
   }
 
   /**

Reply via email to