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; } /**
