[ 
https://issues.apache.org/jira/browse/RANGER-5453?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

StarBoy1005 updated RANGER-5453:
--------------------------------
    Description: 
Once the Ranger service contains a large number of policies and a user is 
associated with many of them, deleting that user can cause threads to be 
blocked for a long time and may prevent the user from being deleted 
successfully.

For example I created 30.000 policies in my ranger,  now I delete the user from 
web ui, then got a 500 resp after about 60s. 

*1.png*

*blocked thread:*

"http-nio-6080-exec-8" #54 daemon prio=5 os_prio=0 cpu=45805.69ms 
elapsed=87423.32s tid=0x00007f87287f9800 nid=0xa4475 waiting for monitor entry 
[0x00007f86acad3000]
   java.lang.Thread.State: BLOCKED (on object monitor)
        at org.apache.ranger.biz.XUserMgr.deleteXUser(XUserMgr.java:2222)
        - waiting to lock <0x00000000c1f35cf8> (a 
org.apache.ranger.biz.XUserMgr)
        at 
org.apache.ranger.biz.XUserMgr$$FastClassBySpringCGLIB$$57c6d473.invoke(<generated>)
        at 
org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
        at 
org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)
        at 
org.apache.ranger.biz.XUserMgr$$EnhancerBySpringCGLIB$$30f8511d.deleteXUser(<generated>)
        at 
org.apache.ranger.rest.XUserREST.deleteSingleUserByUserId(XUserREST.java:1279)
        at 
org.apache.ranger.rest.XUserREST$$FastClassBySpringCGLIB$$b2a65360.invoke(<generated>)
        at 
org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
        at 
org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
        at 
org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)
        at 
org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:61)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at 
org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)
        at 
org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)
        at 
org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)
        at 
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
        at 
org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)
        at 
org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)
        at 
org.apache.ranger.rest.XUserREST$$EnhancerBySpringCGLIB$$ce896aa1.deleteSingleUserByUserId(<generated>)

*runnable thread:*

"http-nio-6080-exec-1" #47 daemon prio=5 os_prio=0 cpu=6512837.33ms 
elapsed=87423.32s tid=0x00007f8728823800 nid=0xa446e runnable 
[0x00007f86ad1da000]
   java.lang.Thread.State: RUNNABLE
        at java.lang.System.identityHashCode(Native Method)
        at java.util.IdentityHashMap.hash(IdentityHashMap.java:297)
        at java.util.IdentityHashMap.put(IdentityHashMap.java:428)
        at 
org.eclipse.persistence.internal.sessions.UnitOfWorkChangeSet.addObjectChangeSetForIdentity(UnitOfWorkChangeSet.java:275)
        at 
org.eclipse.persistence.internal.descriptors.ObjectBuilder.createObjectChangeSet(ObjectBuilder.java:2875)
        at 
org.eclipse.persistence.descriptors.changetracking.DeferredChangeDetectionPolicy.createObjectChangeSetThroughComparison(DeferredChangeDetectionPolicy.java:155)
        at 
org.eclipse.persistence.descriptors.changetracking.DeferredChangeDetectionPolicy.createObjectChangeSet(DeferredChangeDetectionPolicy.java:146)
        at 
org.eclipse.persistence.descriptors.changetracking.DeferredChangeDetectionPolicy.calculateChanges(DeferredChangeDetectionPolicy.java:91)
        at 
org.eclipse.persistence.descriptors.changetracking.DeferredChangeDetectionPolicy.calculateChangesForExistingObject(DeferredChangeDetectionPolicy.java:56)
        at 
org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.calculateChanges(UnitOfWorkImpl.java:664)
        at 
org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.writeChanges(RepeatableWriteUnitOfWork.java:438)
        at 
org.eclipse.persistence.internal.jpa.EntityManagerImpl.flush(EntityManagerImpl.java:863)
        at 
org.eclipse.persistence.internal.jpa.QueryImpl.performPreQueryFlush(QueryImpl.java:963)
        at 
org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery(QueryImpl.java:207)
        at 
org.eclipse.persistence.internal.jpa.QueryImpl.getResultList(QueryImpl.java:469)
        at 
org.apache.ranger.db.XXPolicyRefGroupDao.findUpdatedGroupNamesByPolicy(XXPolicyRefGroupDao.java:73)
        at 
org.apache.ranger.biz.RangerPolicyRetriever$RetrieverContext.<init>(RangerPolicyRetriever.java:506)
        at 
org.apache.ranger.biz.RangerPolicyRetriever.getPolicy(RangerPolicyRetriever.java:259)
        at 
org.apache.ranger.biz.RangerPolicyRetriever.getPolicy(RangerPolicyRetriever.java:233)
        at 
org.apache.ranger.service.RangerPolicyService.populateViewBean(RangerPolicyService.java:143)
        at 
org.apache.ranger.service.RangerPolicyService.populateViewBean(RangerPolicyService.java:55)
        at 
org.apache.ranger.service.RangerBaseModelService.postUpdate(RangerBaseModelService.java:256)
        at 
org.apache.ranger.service.RangerBaseModelService.update(RangerBaseModelService.java:251)
        at 
org.apache.ranger.biz.ServiceDBStore.updatePolicy(ServiceDBStore.java:2212)
        at org.apache.ranger.biz.XUserMgr.deleteXUser(XUserMgr.java:2346)
        - locked <0x00000000c1f35cf8> (a org.apache.ranger.biz.XUserMgr)
        at 
org.apache.ranger.biz.XUserMgr$$FastClassBySpringCGLIB$$57c6d473.invoke(<generated>)
        at 
org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
        at 
org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)
        at 
org.apache.ranger.biz.XUserMgr$$EnhancerBySpringCGLIB$$30f8511d.deleteXUser(<generated>)
        at 
org.apache.ranger.rest.XUserREST.deleteSingleUserByUserId(XUserREST.java:1279)
        at 
org.apache.ranger.rest.XUserREST$$FastClassBySpringCGLIB$$b2a65360.invoke(<generated>)
        at 
org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)

 

I suspect that the large number of policies is causing excessive database 
queries in this loop, which not only makes the operation very time‑consuming 
but also leads to OOM issues in the Ranger admin.

2.png

 

Pls share some solution in this situation, the number of policies can't reduce 
now.

  was:
Once the Ranger service contains a large number of policies and a user is 
associated with many of them, deleting that user can cause threads to be 
blocked for a long time and may prevent the user from being deleted 
successfully.

For example I created 30.000 policies in my ranger,  now I delete the user from 
web ui, then got a 500 resp after about 60s. 

 

 

jstack:

 

 


> Once the Ranger service contains a large number of policies and a user is 
> associated with many of them, deleting that user can cause threads to be 
> blocked for a long time and may prevent the user from being deleted 
> successfully.
> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: RANGER-5453
>                 URL: https://issues.apache.org/jira/browse/RANGER-5453
>             Project: Ranger
>          Issue Type: Improvement
>          Components: admin
>    Affects Versions: 2.3.0
>            Reporter: StarBoy1005
>            Priority: Major
>         Attachments: 1.png
>
>
> Once the Ranger service contains a large number of policies and a user is 
> associated with many of them, deleting that user can cause threads to be 
> blocked for a long time and may prevent the user from being deleted 
> successfully.
> For example I created 30.000 policies in my ranger,  now I delete the user 
> from web ui, then got a 500 resp after about 60s. 
> *1.png*
> *blocked thread:*
> "http-nio-6080-exec-8" #54 daemon prio=5 os_prio=0 cpu=45805.69ms 
> elapsed=87423.32s tid=0x00007f87287f9800 nid=0xa4475 waiting for monitor 
> entry [0x00007f86acad3000]
>    java.lang.Thread.State: BLOCKED (on object monitor)
>         at org.apache.ranger.biz.XUserMgr.deleteXUser(XUserMgr.java:2222)
>         - waiting to lock <0x00000000c1f35cf8> (a 
> org.apache.ranger.biz.XUserMgr)
>         at 
> org.apache.ranger.biz.XUserMgr$$FastClassBySpringCGLIB$$57c6d473.invoke(<generated>)
>         at 
> org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
>         at 
> org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)
>         at 
> org.apache.ranger.biz.XUserMgr$$EnhancerBySpringCGLIB$$30f8511d.deleteXUser(<generated>)
>         at 
> org.apache.ranger.rest.XUserREST.deleteSingleUserByUserId(XUserREST.java:1279)
>         at 
> org.apache.ranger.rest.XUserREST$$FastClassBySpringCGLIB$$b2a65360.invoke(<generated>)
>         at 
> org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
>         at 
> org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:783)
>         at 
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
>         at 
> org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)
>         at 
> org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:61)
>         at 
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
>         at 
> org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)
>         at 
> org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)
>         at 
> org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)
>         at 
> org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)
>         at 
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
>         at 
> org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:753)
>         at 
> org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:698)
>         at 
> org.apache.ranger.rest.XUserREST$$EnhancerBySpringCGLIB$$ce896aa1.deleteSingleUserByUserId(<generated>)
> *runnable thread:*
> "http-nio-6080-exec-1" #47 daemon prio=5 os_prio=0 cpu=6512837.33ms 
> elapsed=87423.32s tid=0x00007f8728823800 nid=0xa446e runnable 
> [0x00007f86ad1da000]
>    java.lang.Thread.State: RUNNABLE
>         at java.lang.System.identityHashCode(Native Method)
>         at java.util.IdentityHashMap.hash(IdentityHashMap.java:297)
>         at java.util.IdentityHashMap.put(IdentityHashMap.java:428)
>         at 
> org.eclipse.persistence.internal.sessions.UnitOfWorkChangeSet.addObjectChangeSetForIdentity(UnitOfWorkChangeSet.java:275)
>         at 
> org.eclipse.persistence.internal.descriptors.ObjectBuilder.createObjectChangeSet(ObjectBuilder.java:2875)
>         at 
> org.eclipse.persistence.descriptors.changetracking.DeferredChangeDetectionPolicy.createObjectChangeSetThroughComparison(DeferredChangeDetectionPolicy.java:155)
>         at 
> org.eclipse.persistence.descriptors.changetracking.DeferredChangeDetectionPolicy.createObjectChangeSet(DeferredChangeDetectionPolicy.java:146)
>         at 
> org.eclipse.persistence.descriptors.changetracking.DeferredChangeDetectionPolicy.calculateChanges(DeferredChangeDetectionPolicy.java:91)
>         at 
> org.eclipse.persistence.descriptors.changetracking.DeferredChangeDetectionPolicy.calculateChangesForExistingObject(DeferredChangeDetectionPolicy.java:56)
>         at 
> org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.calculateChanges(UnitOfWorkImpl.java:664)
>         at 
> org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.writeChanges(RepeatableWriteUnitOfWork.java:438)
>         at 
> org.eclipse.persistence.internal.jpa.EntityManagerImpl.flush(EntityManagerImpl.java:863)
>         at 
> org.eclipse.persistence.internal.jpa.QueryImpl.performPreQueryFlush(QueryImpl.java:963)
>         at 
> org.eclipse.persistence.internal.jpa.QueryImpl.executeReadQuery(QueryImpl.java:207)
>         at 
> org.eclipse.persistence.internal.jpa.QueryImpl.getResultList(QueryImpl.java:469)
>         at 
> org.apache.ranger.db.XXPolicyRefGroupDao.findUpdatedGroupNamesByPolicy(XXPolicyRefGroupDao.java:73)
>         at 
> org.apache.ranger.biz.RangerPolicyRetriever$RetrieverContext.<init>(RangerPolicyRetriever.java:506)
>         at 
> org.apache.ranger.biz.RangerPolicyRetriever.getPolicy(RangerPolicyRetriever.java:259)
>         at 
> org.apache.ranger.biz.RangerPolicyRetriever.getPolicy(RangerPolicyRetriever.java:233)
>         at 
> org.apache.ranger.service.RangerPolicyService.populateViewBean(RangerPolicyService.java:143)
>         at 
> org.apache.ranger.service.RangerPolicyService.populateViewBean(RangerPolicyService.java:55)
>         at 
> org.apache.ranger.service.RangerBaseModelService.postUpdate(RangerBaseModelService.java:256)
>         at 
> org.apache.ranger.service.RangerBaseModelService.update(RangerBaseModelService.java:251)
>         at 
> org.apache.ranger.biz.ServiceDBStore.updatePolicy(ServiceDBStore.java:2212)
>         at org.apache.ranger.biz.XUserMgr.deleteXUser(XUserMgr.java:2346)
>         - locked <0x00000000c1f35cf8> (a org.apache.ranger.biz.XUserMgr)
>         at 
> org.apache.ranger.biz.XUserMgr$$FastClassBySpringCGLIB$$57c6d473.invoke(<generated>)
>         at 
> org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
>         at 
> org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)
>         at 
> org.apache.ranger.biz.XUserMgr$$EnhancerBySpringCGLIB$$30f8511d.deleteXUser(<generated>)
>         at 
> org.apache.ranger.rest.XUserREST.deleteSingleUserByUserId(XUserREST.java:1279)
>         at 
> org.apache.ranger.rest.XUserREST$$FastClassBySpringCGLIB$$b2a65360.invoke(<generated>)
>         at 
> org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
>  
> I suspect that the large number of policies is causing excessive database 
> queries in this loop, which not only makes the operation very time‑consuming 
> but also leads to OOM issues in the Ranger admin.
> 2.png
>  
> Pls share some solution in this situation, the number of policies can't 
> reduce now.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to