[
https://issues.apache.org/jira/browse/RANGER-5453?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
StarBoy1005 updated RANGER-5453:
--------------------------------
Attachment: 2.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.
> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> 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, 2.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)