Zsombor Gegesy created RANGER-2077:
--------------------------------------

             Summary: Service deletion could fail on Oracle due to 'ORA-01000: 
maximum open cursors exceeded'
                 Key: RANGER-2077
                 URL: https://issues.apache.org/jira/browse/RANGER-2077
             Project: Ranger
          Issue Type: Bug
          Components: admin, Ranger
    Affects Versions: 0.7.1, 1.0.0
            Reporter: Zsombor Gegesy


Deleting services seems to use a lot of cursors, which could result in 
exceptions like this:
{code}
 [http-bio-6080-exec-11] ERROR org.apache.ranger.rest.ServiceREST 
(ServiceREST.java:771) - deleteService(22) failed
javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse 
Persistence Services - 2.5.2.v20140319-9ad6abd): 
org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: ORA-00604: error occurred at 
recursive SQL level 1
ORA-01000: maximum open cursors exceeded
ORA-00604: error occurred at recursive SQL level 1
ORA-01000: maximum open cursors exceeded

Error Code: 604
Call: delete from x_policy_item_group_perm where policy_item_id=99
Query: DataModifyQuery(sql="delete from x_policy_item_group_perm where 
policy_item_id=99")
        at 
org.eclipse.persistence.internal.jpa.QueryImpl.executeUpdate(QueryImpl.java:308)
        at 
org.apache.ranger.common.db.BaseDao.deletePolicyIDReference(BaseDao.java:261)
        at 
org.apache.ranger.biz.ServiceDBStore.deleteExistingPolicyItemsNative(ServiceDBStore.java:3337)
        at 
org.apache.ranger.biz.ServiceDBStore.deletePolicy(ServiceDBStore.java:2022)
        at 
org.apache.ranger.biz.ServiceDBStore.deleteService(ServiceDBStore.java:1676)
        at 
org.apache.ranger.rest.ServiceREST.deleteService(ServiceREST.java:767)
        at 
org.apache.ranger.rest.ServiceREST$$FastClassBySpringCGLIB$$92dab672.invoke(<generated>)
        at 
org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
        at 
org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:701)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
        at 
org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:64)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at 
org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96)
        at 
org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260)
        at 
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
        at 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
        at 
org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:633)
        at 
org.apache.ranger.rest.ServiceREST$$EnhancerBySpringCGLIB$$8fa8bfff.deleteService(<generated>)
        at 
org.apache.ranger.rest.PublicAPIsv2.deleteServiceByName(PublicAPIsv2.java:276)
        at 
org.apache.ranger.rest.PublicAPIsv2$$FastClassBySpringCGLIB$$b2e69455.invoke(<generated>)
        at 
org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
{code}
Or 
{code}
WARN  com.mchange.v2.c3p0.impl.NewPooledConnection 
(NewPooledConnection.java:486) - [c3p0] A PooledConnection that has already 
signalled a Connection error is still in use!
2018-04-22 05:38:13,592 [http-bio-6080-exec-18] WARN  
com.mchange.v2.c3p0.impl.NewPooledConnection (NewPooledConnection.java:487) - 
[c3p0] Another error has occurred [ java.sql.SQLException: ORA-01000: maximum 
open cursors exceeded
 ] which will not be reported to listeners!
java.sql.SQLException: ORA-01000: maximum open cursors exceeded

        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:399)
        at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1059)
        at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:522)
        at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:257)
        at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:587)
        at 
oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:225)
        at 
oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:53)
        at 
oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:774)
        at 
oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:925)
        at 
oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1111)
        at 
oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:4798)
        at 
oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:4845)
        at 
oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1501)
        at 
com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:76)
        at 
org.eclipse.persistence.internal.databaseaccess.DatabasePlatform.wasFailureCommunicationBased(DatabasePlatform.java:2849)
        at 
org.eclipse.persistence.platform.database.OraclePlatform.wasFailureCommunicationBased(OraclePlatform.java:1021)
        at 
org.eclipse.persistence.platform.server.ServerPlatformBase.wasFailureCommunicationBased(ServerPlatformBase.java:528)
        at 
org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.processExceptionForCommError(DatabaseAccessor.java:1607)
        at 
org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:898)
        at 
org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeNoSelect(DatabaseAccessor.java:962)
        at 
org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:631)
        at 
org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:558)
        at 
org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:2002)
        at 
org.eclipse.persistence.sessions.server.ClientSession.executeCall(ClientSession.java:298)
        at 
org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:242)
        at 
org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:228)
        at 
org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeNoSelectCall(DatasourceCallQueryMechanism.java:271)
        at 
org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeNoSelect(DatasourceCallQueryMechanism.java:251)
        at 
org.eclipse.persistence.queries.DataModifyQuery.executeDatabaseQuery(DataModifyQuery.java:85)
        at 
org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:899)
        at 
org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:798)
        at 
org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2896)
        at 
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1804)
        at 
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1786)
        at 
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1751)
        at 
org.eclipse.persistence.internal.jpa.QueryImpl.executeUpdate(QueryImpl.java:298)
        at 
org.apache.ranger.common.db.BaseDao.deletePolicyIDReference(BaseDao.java:261)
        at 
org.apache.ranger.biz.ServiceDBStore.deleteExistingPolicyItemsNative(ServiceDBStore.java:3336)
        at 
org.apache.ranger.biz.ServiceDBStore.deletePolicy(ServiceDBStore.java:2022)
        at 
org.apache.ranger.biz.ServiceDBStore.deleteService(ServiceDBStore.java:1676)
        at 
org.apache.ranger.rest.ServiceREST.deleteService(ServiceREST.java:767)
        at 
org.apache.ranger.rest.ServiceREST$$FastClassBySpringCGLIB$$92dab672.invoke(<generated>)
{code}

{code}
 deleteService(14) failed
javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse 
Persistence Services - 2.5.2.v20140319-9ad6abd): 
org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: ORA-01000: maximum open cursors 
exceeded

Error Code: 1000
Call: delete from x_policy_item_datamask where policy_item_id=48
Query: DataModifyQuery(sql="delete from x_policy_item_datamask where 
policy_item_id=48")
        at 
org.eclipse.persistence.internal.jpa.QueryImpl.executeUpdate(QueryImpl.java:308)
        at 
org.apache.ranger.common.db.BaseDao.deletePolicyIDReference(BaseDao.java:261)
        at 
org.apache.ranger.biz.ServiceDBStore.deleteExistingPolicyItemsNative(ServiceDBStore.java:3336)
        at 
org.apache.ranger.biz.ServiceDBStore.deletePolicy(ServiceDBStore.java:2022)
        at 
org.apache.ranger.biz.ServiceDBStore.deleteService(ServiceDBStore.java:1676)
        at 
org.apache.ranger.rest.ServiceREST.deleteService(ServiceREST.java:767)
{code}

Re-trying in a couple of seconds usually solves the issue, however it doesn't 
seem a good solution. Oracle is configured having 300 concurrent cursor open, 
so it's not clear, why this pool could be exhausted so easily)






--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to