Repository: incubator-ranger Updated Branches: refs/heads/master bc634846b -> 01e1d0592
RANGER-1000: Tag service deletion failure due to MySQLIntegrityConstraintViolationException Signed-off-by: Gautam Borad <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/01e1d059 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/01e1d059 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/01e1d059 Branch: refs/heads/master Commit: 01e1d05923f8ab9f6d2d36ef1e12605e8719cc54 Parents: bc63484 Author: pradeep agrawal <[email protected]> Authored: Wed Jun 1 18:36:08 2016 +0530 Committer: Gautam Borad <[email protected]> Committed: Wed Jun 1 20:10:40 2016 +0530 ---------------------------------------------------------------------- .../model/validation/RangerPolicyValidator.java | 24 +++++++++++++++----- .../org/apache/ranger/rest/ServiceREST.java | 19 ++++++++++++++++ .../views/policymanager/ServiceLayout.js | 20 +++++++++++----- 3 files changed, 51 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/01e1d059/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerPolicyValidator.java ---------------------------------------------------------------------- diff --git a/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerPolicyValidator.java b/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerPolicyValidator.java index 0bdaf87..35b2726 100644 --- a/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerPolicyValidator.java +++ b/agents-common/src/main/java/org/apache/ranger/plugin/model/validation/RangerPolicyValidator.java @@ -251,12 +251,24 @@ public class RangerPolicyValidator extends RangerValidator { RangerServiceDef serviceDef = null; int policyItemsCount = 0; - if(CollectionUtils.isNotEmpty(policy.getPolicyItems())) { - policyItemsCount += policy.getPolicyItems().size(); - } - - if(CollectionUtils.isNotEmpty(policy.getDenyPolicyItems())) { - policyItemsCount += policy.getDenyPolicyItems().size(); + int policyType=policy.getPolicyType(); + switch (policyType) { + case RangerPolicy.POLICY_TYPE_DATAMASK: + if (CollectionUtils.isNotEmpty(policy.getDataMaskPolicyItems())) + policyItemsCount += policy.getDataMaskPolicyItems().size(); + break; + case RangerPolicy.POLICY_TYPE_ROWFILTER: + if (CollectionUtils.isNotEmpty(policy.getRowFilterPolicyItems())) + policyItemsCount += policy.getRowFilterPolicyItems().size(); + break; + default: + if (CollectionUtils.isNotEmpty(policy.getPolicyItems())){ + policyItemsCount += policy.getPolicyItems().size(); + } + if(CollectionUtils.isNotEmpty(policy.getDenyPolicyItems())) { + policyItemsCount += policy.getDenyPolicyItems().size(); + } + break; } if (policyItemsCount == 0 && !isAuditEnabled) { http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/01e1d059/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java ---------------------------------------------------------------------- diff --git a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java index 1028c8d..461feb0 100644 --- a/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java +++ b/security-admin/src/main/java/org/apache/ranger/rest/ServiceREST.java @@ -22,6 +22,7 @@ package org.apache.ranger.rest; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -549,6 +550,24 @@ public class ServiceREST { // services including KMS XXService service = daoManager.getXXService().getById(id); + EmbeddedServiceDefsUtil embeddedServiceDefsUtil = EmbeddedServiceDefsUtil.instance(); + if (service.getType().equals(embeddedServiceDefsUtil.getTagServiceDefId())){ + List<XXService> referringServices=daoManager.getXXService().findByTagServiceId(id); + if(!CollectionUtils.isEmpty(referringServices)){ + Set<String> referringServiceNames=new HashSet<String>(); + for(XXService xXService:referringServices){ + referringServiceNames.add(xXService.getName()); + if(referringServiceNames.size()>=10){ + break; + } + } + if(referringServices.size()<=10){ + throw restErrorUtil.createRESTException("Tag service '" + service.getName() + "' is being referenced by " + referringServices.size() + " services: "+referringServiceNames,MessageEnums.OPER_NOT_ALLOWED_FOR_STATE); + }else{ + throw restErrorUtil.createRESTException("Tag service '" + service.getName() + "' is being referenced by " + referringServices.size() + " services: "+referringServiceNames+" and more..",MessageEnums.OPER_NOT_ALLOWED_FOR_STATE); + } + } + } XXServiceDef xxServiceDef = daoManager.getXXServiceDef().getById(service.getType()); bizUtil.hasKMSPermissions("Service", xxServiceDef.getImplclassname()); http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/01e1d059/security-admin/src/main/webapp/scripts/views/policymanager/ServiceLayout.js ---------------------------------------------------------------------- diff --git a/security-admin/src/main/webapp/scripts/views/policymanager/ServiceLayout.js b/security-admin/src/main/webapp/scripts/views/policymanager/ServiceLayout.js index aae7543..64c5f4c 100644 --- a/security-admin/src/main/webapp/scripts/views/policymanager/ServiceLayout.js +++ b/security-admin/src/main/webapp/scripts/views/policymanager/ServiceLayout.js @@ -114,12 +114,20 @@ define(function(require){ msg :'Are you sure want to delete ?', callback : function(){ XAUtil.blockUI(); - model.destroy({success: function(model, response) { - XAUtil.blockUI('unblock'); - that.services.remove(model.get('id')); - XAUtil.notifySuccess('Success', 'Service deleted successfully'); - that.render(); - }}); + model.destroy({ + success: function(model, response) { + XAUtil.blockUI('unblock'); + that.services.remove(model.get('id')); + XAUtil.notifySuccess('Success', 'Service deleted successfully'); + that.render(); + }, + error :function(model, response) { + XAUtil.blockUI('unblock'); + if(!_.isUndefined(response) && !_.isUndefined(response.responseJSON) && !_.isUndefined(response.responseJSON.msgDesc)){ + XAUtil.notifyError('Error', response.responseJSON.msgDesc); + } + } + }); } }); }
