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);
+                                                               }
+                                                       }
+                                               });
                                        }
                                });
                        }

Reply via email to