[ 
https://issues.apache.org/jira/browse/SENTRY-1422?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15447654#comment-15447654
 ] 

Alexander Kolbasov commented on SENTRY-1422:
--------------------------------------------

I saw another test failure which may be related to this one, but with a 
different suspects involved in it.

{code}
[Controller 1001]: preferred replicas by broker Map()
2016-08-22 19:08:39,159 (pool-11-thread-20) [ERROR - 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyProcessor.requestHandle(SentryGenericPolicyProcessor.java:222)]
 Unknown error:Iteration request failed : SELECT 
'org.apache.sentry.provider.db.service.model.MSentryGMPrivilege' AS 
NUCLEUS_TYPE,A1."ACTION",A1.COMPONENT_NAME,A1.CREATE_TIME,A1.WITH_GRANT_OPTION,A1.RESOURCE_NAME_0,A1.RESOURCE_NAME_1,A1.RESOURCE_NAME_2,A1.RESOURCE_NAME_3,A1.RESOURCE_TYPE_0,A1.RESOURCE_TYPE_1,A1.RESOURCE_TYPE_2,A1.RESOURCE_TYPE_3,A1."SCOPE",A1.SERVICE_NAME,A1.GM_PRIVILEGE_ID,A0.ROLE_ID
 FROM SENTRY_ROLE_GM_PRIVILEGE_MAP A0 INNER JOIN SENTRY_GM_PRIVILEGE A1 ON 
A0.GM_PRIVILEGE_ID = A1.GM_PRIVILEGE_ID WHERE EXISTS (SELECT 
'org.apache.sentry.provider.db.service.model.MSentryRole' AS 
NUCLEUS_TYPE,A0_SUB.ROLE_ID AS DN_DATASTOREID FROM SENTRY_ROLE A0_SUB WHERE 
A0_SUB.ROLE_NAME = ? AND A0.ROLE_ID = A0_SUB.ROLE_ID)
javax.jdo.JDODataStoreException: Iteration request failed : SELECT 
'org.apache.sentry.provider.db.service.model.MSentryGMPrivilege' AS 
NUCLEUS_TYPE,A1."ACTION",A1.COMPONENT_NAME,A1.CREATE_TIME,A1.WITH_GRANT_OPTION,A1.RESOURCE_NAME_0,A1.RESOURCE_NAME_1,A1.RESOURCE_NAME_2,A1.RESOURCE_NAME_3,A1.RESOURCE_TYPE_0,A1.RESOURCE_TYPE_1,A1.RESOURCE_TYPE_2,A1.RESOURCE_TYPE_3,A1."SCOPE",A1.SERVICE_NAME,A1.GM_PRIVILEGE_ID,A0.ROLE_ID
 FROM SENTRY_ROLE_GM_PRIVILEGE_MAP A0 INNER JOIN SENTRY_GM_PRIVILEGE A1 ON 
A0.GM_PRIVILEGE_ID = A1.GM_PRIVILEGE_ID WHERE EXISTS (SELECT 
'org.apache.sentry.provider.db.service.model.MSentryRole' AS 
NUCLEUS_TYPE,A0_SUB.ROLE_ID AS DN_DATASTOREID FROM SENTRY_ROLE A0_SUB WHERE 
A0_SUB.ROLE_NAME = ? AND A0.ROLE_ID = A0_SUB.ROLE_ID)
        at 
org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:451)
        at org.datanucleus.api.jdo.JDOQuery.execute(JDOQuery.java:252)
        at 
org.apache.sentry.provider.db.service.persistent.SentryStore.getMSentryRole(SentryStore.java:310)
        at 
org.apache.sentry.provider.db.generic.service.persistent.DelegateSentryStore.getRole(DelegateSentryStore.java:104)
        at 
org.apache.sentry.provider.db.generic.service.persistent.DelegateSentryStore.getPrivilegesByProvider(DelegateSentryStore.java:430)
        at 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyProcessor$10.handle(SentryGenericPolicyProcessor.java:618)
        at 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyProcessor.requestHandle(SentryGenericPolicyProcessor.java:199)
        at 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyProcessor.list_sentry_privileges_by_role(SentryGenericPolicyProcessor.java:607)
        at 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyService$Processor$list_sentry_privileges_by_role.getResult(SentryGenericPolicyService.java:977)
        at 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyService$Processor$list_sentry_privileges_by_role.getResult(SentryGenericPolicyService.java:962)
        at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39)
        at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39)
        at 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyProcessorWrapper.process(SentryGenericPolicyProcessorWrapper.java:37)
        at 
org.apache.thrift.TMultiplexedProcessor.process(TMultiplexedProcessor.java:123)
        at 
org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:285)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
NestedThrowablesStackTrace:
java.sql.SQLTransactionRollbackException: A lock could not be obtained due to a 
deadlock, cycle of locks and waiters is:
Lock : ROW, SENTRY_ROLE_GM_PRIVILEGE_MAP, (1,7)
  Waiting XID : {665, S} , SENTRY, SELECT 
'org.apache.sentry.provider.db.service.model.MSentryGMPrivilege' AS 
NUCLEUS_TYPE,A1."ACTION",A1.COMPONENT_NAME,A1.CREATE_TIME,A1.WITH_GRANT_OPTION,A1.RESOURCE_NAME_0,A1.RESOURCE_NAME_1,A1.RESOURCE_NAME_2,A1.RESOURCE_NAME_3,A1.RESOURCE_TYPE_0,A1.RESOURCE_TYPE_1,A1.RESOURCE_TYPE_2,A1.RESOURCE_TYPE_3,A1."SCOPE",A1.SERVICE_NAME,A1.GM_PRIVILEGE_ID,A0.ROLE_ID
 FROM SENTRY_ROLE_GM_PRIVILEGE_MAP A0 INNER JOIN SENTRY_GM_PRIVILEGE A1 ON 
A0.GM_PRIVILEGE_ID = A1.GM_PRIVILEGE_ID WHERE EXISTS (SELECT 
'org.apache.sentry.provider.db.service.model.MSentryRole' AS 
NUCLEUS_TYPE,A0_SUB.ROLE_ID AS DN_DATASTOREID FROM SENTRY_ROLE A0_SUB WHERE 
A0_SUB.ROLE_NAME = ? AND A0.ROLE_ID = A0_SUB.ROLE_ID)
  Granted XID : {654, X} 
Lock : ROW, SENTRY_ROLE, (1,7)
  Waiting XID : {654, X} , SENTRY, DELETE FROM SENTRY_ROLE WHERE ROLE_ID=?
  Granted XID : {665, S} 
. The selected victim is XID : 665.
        at 
org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source)
        at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown 
Source)
        at 
org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown 
Source)
        at 
org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown 
Source)
        at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown 
Source)
        at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown 
Source)
        at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown 
Source)
        at 
org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(Unknown 
Source)
        at 
org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeQuery(Unknown Source)
        at 
com.jolbox.bonecp.PreparedStatementHandle.executeQuery(PreparedStatementHandle.java:172)
        at 
org.datanucleus.store.rdbms.ParamLoggingPreparedStatement.executeQuery(ParamLoggingPreparedStatement.java:381)
        at 
org.datanucleus.store.rdbms.SQLController.executeStatementQuery(SQLController.java:559)
        at 
org.datanucleus.store.rdbms.query.JDOQLQuery.performExecute(JDOQLQuery.java:724)
        at org.datanucleus.store.query.Query.executeQuery(Query.java:1786)
        at org.datanucleus.store.query.Query.executeWithArray(Query.java:1672)
        at org.datanucleus.api.jdo.JDOQuery.execute(JDOQuery.java:243)
        at 
org.apache.sentry.provider.db.service.persistent.SentryStore.getMSentryRole(SentryStore.java:310)
        at 
org.apache.sentry.provider.db.generic.service.persistent.DelegateSentryStore.getRole(DelegateSentryStore.java:104)
        at 
org.apache.sentry.provider.db.generic.service.persistent.DelegateSentryStore.getPrivilegesByProvider(DelegateSentryStore.java:430)
        at 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyProcessor$10.handle(SentryGenericPolicyProcessor.java:618)
        at 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyProcessor.requestHandle(SentryGenericPolicyProcessor.java:199)
        at 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyProcessor.list_sentry_privileges_by_role(SentryGenericPolicyProcessor.java:607)
        at 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyService$Processor$list_sentry_privileges_by_role.getResult(SentryGenericPolicyService.java:977)
        at 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyService$Processor$list_sentry_privileges_by_role.getResult(SentryGenericPolicyService.java:962)
        at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39)
        at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39)
        at 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyProcessorWrapper.process(SentryGenericPolicyProcessorWrapper.java:37)
        at 
org.apache.thrift.TMultiplexedProcessor.process(TMultiplexedProcessor.java:123)
        at 
org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:285)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.sql.SQLException: A lock could not be obtained due to a 
deadlock, cycle of locks and waiters is:
Lock : ROW, SENTRY_ROLE_GM_PRIVILEGE_MAP, (1,7)
  Waiting XID : {665, S} , SENTRY, SELECT 
'org.apache.sentry.provider.db.service.model.MSentryGMPrivilege' AS 
NUCLEUS_TYPE,A1."ACTION",A1.COMPONENT_NAME,A1.CREATE_TIME,A1.WITH_GRANT_OPTION,A1.RESOURCE_NAME_0,A1.RESOURCE_NAME_1,A1.RESOURCE_NAME_2,A1.RESOURCE_NAME_3,A1.RESOURCE_TYPE_0,A1.RESOURCE_TYPE_1,A1.RESOURCE_TYPE_2,A1.RESOURCE_TYPE_3,A1."SCOPE",A1.SERVICE_NAME,A1.GM_PRIVILEGE_ID,A0.ROLE_ID
 FROM SENTRY_ROLE_GM_PRIVILEGE_MAP A0 INNER JOIN SENTRY_GM_PRIVILEGE A1 ON 
A0.GM_PRIVILEGE_ID = A1.GM_PRIVILEGE_ID WHERE EXISTS (SELECT 
'org.apache.sentry.provider.db.service.model.MSentryRole' AS 
NUCLEUS_TYPE,A0_SUB.ROLE_ID AS DN_DATASTOREID FROM SENTRY_ROLE A0_SUB WHERE 
A0_SUB.ROLE_NAME = ? AND A0.ROLE_ID = A0_SUB.ROLE_ID)
  Granted XID : {654, X} 
Lock : ROW, SENTRY_ROLE, (1,7)
  Waiting XID : {654, X} , SENTRY, DELETE FROM SENTRY_ROLE WHERE ROLE_ID=?
  Granted XID : {665, S} 
. The selected victim is XID : 665.
        at 
org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
        at 
org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown
 Source)
        ... 32 more
Caused by: ERROR 40001: A lock could not be obtained due to a deadlock, cycle 
of locks and waiters is:
Lock : ROW, SENTRY_ROLE_GM_PRIVILEGE_MAP, (1,7)
  Waiting XID : {665, S} , SENTRY, SELECT 
'org.apache.sentry.provider.db.service.model.MSentryGMPrivilege' AS 
NUCLEUS_TYPE,A1."ACTION",A1.COMPONENT_NAME,A1.CREATE_TIME,A1.WITH_GRANT_OPTION,A1.RESOURCE_NAME_0,A1.RESOURCE_NAME_1,A1.RESOURCE_NAME_2,A1.RESOURCE_NAME_3,A1.RESOURCE_TYPE_0,A1.RESOURCE_TYPE_1,A1.RESOURCE_TYPE_2,A1.RESOURCE_TYPE_3,A1."SCOPE",A1.SERVICE_NAME,A1.GM_PRIVILEGE_ID,A0.ROLE_ID
 FROM SENTRY_ROLE_GM_PRIVILEGE_MAP A0 INNER JOIN SENTRY_GM_PRIVILEGE A1 ON 
A0.GM_PRIVILEGE_ID = A1.GM_PRIVILEGE_ID WHERE EXISTS (SELECT 
'org.apache.sentry.provider.db.service.model.MSentryRole' AS 
NUCLEUS_TYPE,A0_SUB.ROLE_ID AS DN_DATASTOREID FROM SENTRY_ROLE A0_SUB WHERE 
A0_SUB.ROLE_NAME = ? AND A0.ROLE_ID = A0_SUB.ROLE_ID)
  Granted XID : {654, X} 
Lock : ROW, SENTRY_ROLE, (1,7)
  Waiting XID : {654, X} , SENTRY, DELETE FROM SENTRY_ROLE WHERE ROLE_ID=?
  Granted XID : {665, S} 
. The selected victim is XID : 665.
        at org.apache.derby.iapi.error.StandardException.newException(Unknown 
Source)
        at org.apache.derby.impl.services.locks.Deadlock.buildException(Unknown 
Source)
        at 
org.apache.derby.impl.services.locks.ConcurrentLockSet.lockObject(Unknown 
Source)
        at 
org.apache.derby.impl.services.locks.ConcurrentLockSet.zeroDurationLockObject(Unknown
 Source)
        at 
org.apache.derby.impl.services.locks.AbstractPool.zeroDurationlockObject(Unknown
 Source)
        at 
org.apache.derby.impl.services.locks.ConcurrentPool.zeroDurationlockObject(Unknown
 Source)
        at 
org.apache.derby.impl.store.raw.xact.RowLocking2nohold.lockRecordForRead(Unknown
 Source)
        at 
org.apache.derby.impl.store.access.heap.HeapController.lockRow(Unknown Source)
        at 
org.apache.derby.impl.store.access.heap.HeapController.lockRow(Unknown Source)
        at 
org.apache.derby.impl.store.access.btree.index.B2IRowLocking3.lockRowOnPage(Unknown
 Source)
        at 
org.apache.derby.impl.store.access.btree.index.B2IRowLocking3._lockScanRow(Unknown
 Source)
        at 
org.apache.derby.impl.store.access.btree.index.B2IRowLockingRR.lockScanRow(Unknown
 Source)
        at 
org.apache.derby.impl.store.access.btree.BTreeForwardScan.fetchRows(Unknown 
Source)
        at 
org.apache.derby.impl.store.access.btree.BTreeScan.fetchNextGroup(Unknown 
Source)
        at 
org.apache.derby.impl.sql.execute.BulkTableScanResultSet.reloadArray(Unknown 
Source)
        at 
org.apache.derby.impl.sql.execute.BulkTableScanResultSet.getNextRowCore(Unknown 
Source)
        at 
org.apache.derby.impl.sql.execute.IndexRowToBaseRowResultSet.getNextRowCore(Unknown
 Source)
        at 
org.apache.derby.impl.sql.execute.NestedLoopJoinResultSet.getNextRowCore(Unknown
 Source)
        at org.apache.derby.impl.sql.execute.JoinResultSet.openCore(Unknown 
Source)
        at 
org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.openCore(Unknown 
Source)
        at 
org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.open(Unknown Source)
        at 
org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(Unknown Source)
        at org.apache.derby.impl.sql.GenericPreparedStatement.execute(Unknown 
Source)
        ... 26 more
2016-08-22 19:08:39,161 (pool-11-thread-17) [INFO - 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyProcessor.drop_sentry_role(SentryGenericPolicyProcessor.java:444)]
 
{"serviceName":"Sentry-Service","userName":"kafka","impersonator":"","ipAddress":"/172.16.3.244","operation":"DROP_ROLE","eventTime":"1471918119160","operationText":"DROP
 ROLE role_kafka","allowed":"true","objectType":"ROLE","component":"kafka"}
2016-08-22 19:08:39,159 (Timer-2) [DEBUG - 
org.apache.sentry.provider.db.generic.UpdatableCache$1.run(UpdatableCache.java:139)]
 Loading all data.
2016-08-22 19:08:39,166 (Timer-1) [WARN - 
org.apache.sentry.provider.db.generic.UpdatableCache$1.run(UpdatableCache.java:142)]
 Exception while updating data from DB
java.lang.RuntimeException: Unknown error:Iteration request failed : SELECT 
'org.apache.sentry.provider.db.service.model.MSentryGMPrivilege' AS 
NUCLEUS_TYPE,A1."ACTION",A1.COMPONENT_NAME,A1.CREATE_TIME,A1.WITH_GRANT_OPTION,A1.RESOURCE_NAME_0,A1.RESOURCE_NAME_1,A1.RESOURCE_NAME_2,A1.RESOURCE_NAME_3,A1.RESOURCE_TYPE_0,A1.RESOURCE_TYPE_1,A1.RESOURCE_TYPE_2,A1.RESOURCE_TYPE_3,A1."SCOPE",A1.SERVICE_NAME,A1.GM_PRIVILEGE_ID,A0.ROLE_ID
 FROM SENTRY_ROLE_GM_PRIVILEGE_MAP A0 INNER JOIN SENTRY_GM_PRIVILEGE A1 ON 
A0.GM_PRIVILEGE_ID = A1.GM_PRIVILEGE_ID WHERE EXISTS (SELECT 
'org.apache.sentry.provider.db.service.model.MSentryRole' AS 
NUCLEUS_TYPE,A0_SUB.ROLE_ID AS DN_DATASTOREID FROM SENTRY_ROLE A0_SUB WHERE 
A0_SUB.ROLE_NAME = ? AND A0.ROLE_ID = A0_SUB.ROLE_ID). Server Stacktrace: 
javax.jdo.JDODataStoreException: Iteration request failed : SELECT 
'org.apache.sentry.provider.db.service.model.MSentryGMPrivilege' AS 
NUCLEUS_TYPE,A1."ACTION",A1.COMPONENT_NAME,A1.CREATE_TIME,A1.WITH_GRANT_OPTION,A1.RESOURCE_NAME_0,A1.RESOURCE_NAME_1,A1.RESOURCE_NAME_2,A1.RESOURCE_NAME_3,A1.RESOURCE_TYPE_0,A1.RESOURCE_TYPE_1,A1.RESOURCE_TYPE_2,A1.RESOURCE_TYPE_3,A1."SCOPE",A1.SERVICE_NAME,A1.GM_PRIVILEGE_ID,A0.ROLE_ID
 FROM SENTRY_ROLE_GM_PRIVILEGE_MAP A0 INNER JOIN SENTRY_GM_PRIVILEGE A1 ON 
A0.GM_PRIVILEGE_ID = A1.GM_PRIVILEGE_ID WHERE EXISTS (SELECT 
'org.apache.sentry.provider.db.service.model.MSentryRole' AS 
NUCLEUS_TYPE,A0_SUB.ROLE_ID AS DN_DATASTOREID FROM SENTRY_ROLE A0_SUB WHERE 
A0_SUB.ROLE_NAME = ? AND A0.ROLE_ID = A0_SUB.ROLE_ID)
        at 
org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:451)
        at org.datanucleus.api.jdo.JDOQuery.execute(JDOQuery.java:252)
        at 
org.apache.sentry.provider.db.service.persistent.SentryStore.getMSentryRole(SentryStore.java:310)
        at 
org.apache.sentry.provider.db.generic.service.persistent.DelegateSentryStore.getRole(DelegateSentryStore.java:104)
        at 
org.apache.sentry.provider.db.generic.service.persistent.DelegateSentryStore.getPrivilegesByProvider(DelegateSentryStore.java:430)
        at 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyProcessor$10.handle(SentryGenericPolicyProcessor.java:618)
        at 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyProcessor.requestHandle(SentryGenericPolicyProcessor.java:199)
        at 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyProcessor.list_sentry_privileges_by_role(SentryGenericPolicyProcessor.java:607)
        at 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyService$Processor$list_sentry_privileges_by_role.getResult(SentryGenericPolicyService.java:977)
        at 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyService$Processor$list_sentry_privileges_by_role.getResult(SentryGenericPolicyService.java:962)
        at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39)
        at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39)
        at 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyProcessorWrapper.process(SentryGenericPolicyProcessorWrapper.java:37)
        at 
org.apache.thrift.TMultiplexedProcessor.process(TMultiplexedProcessor.java:123)
        at 
org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:285)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
NestedThrowablesStackTrace:
java.sql.SQLTransactionRollbackException: A lock could not be obtained due to a 
deadlock, cycle of locks and waiters is:
Lock : ROW, SENTRY_ROLE_GM_PRIVILEGE_MAP, (1,7)
  Waiting XID : {665, S} , SENTRY, SELECT 
'org.apache.sentry.provider.db.service.model.MSentryGMPrivilege' AS 
NUCLEUS_TYPE,A1."ACTION",A1.COMPONENT_NAME,A1.CREATE_TIME,A1.WITH_GRANT_OPTION,A1.RESOURCE_NAME_0,A1.RESOURCE_NAME_1,A1.RESOURCE_NAME_2,A1.RESOURCE_NAME_3,A1.RESOURCE_TYPE_0,A1.RESOURCE_TYPE_1,A1.RESOURCE_TYPE_2,A1.RESOURCE_TYPE_3,A1."SCOPE",A1.SERVICE_NAME,A1.GM_PRIVILEGE_ID,A0.ROLE_ID
 FROM SENTRY_ROLE_GM_PRIVILEGE_MAP A0 INNER JOIN SENTRY_GM_PRIVILEGE A1 ON 
A0.GM_PRIVILEGE_ID = A1.GM_PRIVILEGE_ID WHERE EXISTS (SELECT 
'org.apache.sentry.provider.db.service.model.MSentryRole' AS 
NUCLEUS_TYPE,A0_SUB.ROLE_ID AS DN_DATASTOREID FROM SENTRY_ROLE A0_SUB WHERE 
A0_SUB.ROLE_NAME = ? AND A0.ROLE_ID = A0_SUB.ROLE_ID)
  Granted XID : {654, X} 
Lock : ROW, SENTRY_ROLE, (1,7)
  Waiting XID : {654, X} , SENTRY, DELETE FROM SENTRY_ROLE WHERE ROLE_ID=?
  Granted XID : {665, S} 
. The selected victim is XID : 665.
        at 
org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown Source)
        at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown 
Source)
        at 
org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown 
Source)
        at 
org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown 
Source)
        at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown 
Source)
        at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown 
Source)
        at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown 
Source)
        at 
org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(Unknown 
Source)
        at 
org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeQuery(Unknown Source)
        at 
com.jolbox.bonecp.PreparedStatementHandle.executeQuery(PreparedStatementHandle.java:172)
        at 
org.datanucleus.store.rdbms.ParamLoggingPreparedStatement.executeQuery(ParamLoggingPreparedStatement.java:381)
        at 
org.datanucleus.store.rdbms.SQLController.executeStatementQuery(SQLController.java:559)
        at 
org.datanucleus.store.rdbms.query.JDOQLQuery.performExecute(JDOQLQuery.java:724)
        at org.datanucleus.store.query.Query.executeQuery(Query.java:1786)
        at org.datanucleus.store.query.Query.executeWithArray(Query.java:1672)
        at org.datanucleus.api.jdo.JDOQuery.execute(JDOQuery.java:243)
        at 
org.apache.sentry.provider.db.service.persistent.SentryStore.getMSentryRole(SentryStore.java:310)
        at 
org.apache.sentry.provider.db.generic.service.persistent.DelegateSentryStore.getRole(DelegateSentryStore.java:104)
        at 
org.apache.sentry.provider.db.generic.service.persistent.DelegateSentryStore.getPrivilegesByProvider(DelegateSentryStore.java:430)
        at 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyProcessor$10.handle(SentryGenericPolicyProcessor.java:618)
        at 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyProcessor.requestHandle(SentryGenericPolicyProcessor.java:199)
        at 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyProcessor.list_sentry_privileges_by_role(SentryGenericPolicyProcessor.java:607)
        at 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyService$Processor$list_sentry_privileges_by_role.getResult(SentryGenericPolicyService.java:977)
        at 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyService$Processor$list_sentry_privileges_by_role.getResult(SentryGenericPolicyService.java:962)
        at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39)
        at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39)
        at 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyProcessorWrapper.process(SentryGenericPolicyProcessorWrapper.java:37)
        at 
org.apache.thrift.TMultiplexedProcessor.process(TMultiplexedProcessor.java:123)
        at 
org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:285)
        at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.sql.SQLException: A lock could not be obtained due to a 
deadlock, cycle of locks and waiters is:
Lock : ROW, SENTRY_ROLE_GM_PRIVILEGE_MAP, (1,7)
  Waiting XID : {665, S} , SENTRY, SELECT 
'org.apache.sentry.provider.db.service.model.MSentryGMPrivilege' AS 
NUCLEUS_TYPE,A1."ACTION",A1.COMPONENT_NAME,A1.CREATE_TIME,A1.WITH_GRANT_OPTION,A1.RESOURCE_NAME_0,A1.RESOURCE_NAME_1,A1.RESOURCE_NAME_2,A1.RESOURCE_NAME_3,A1.RESOURCE_TYPE_0,A1.RESOURCE_TYPE_1,A1.RESOURCE_TYPE_2,A1.RESOURCE_TYPE_3,A1."SCOPE",A1.SERVICE_NAME,A1.GM_PRIVILEGE_ID,A0.ROLE_ID
 FROM SENTRY_ROLE_GM_PRIVILEGE_MAP A0 INNER JOIN SENTRY_GM_PRIVILEGE A1 ON 
A0.GM_PRIVILEGE_ID = A1.GM_PRIVILEGE_ID WHERE EXISTS (SELECT 
'org.apache.sentry.provider.db.service.model.MSentryRole' AS 
NUCLEUS_TYPE,A0_SUB.ROLE_ID AS DN_DATASTOREID FROM SENTRY_ROLE A0_SUB WHERE 
A0_SUB.ROLE_NAME = ? AND A0.ROLE_ID = A0_SUB.ROLE_ID)
  Granted XID : {654, X} 
Lock : ROW, SENTRY_ROLE, (1,7)
  Waiting XID : {654, X} , SENTRY, DELETE FROM SENTRY_ROLE WHERE ROLE_ID=?
  Granted XID : {665, S} 
. The selected victim is XID : 665.
        at 
org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
        at 
org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown
 Source)
        ... 32 more
Caused by: ERROR 40001: A lock could not be obtained due to a deadlock, cycle 
of locks and waiters is:
Lock : ROW, SENTRY_ROLE_GM_PRIVILEGE_MAP, (1,7)
  Waiting XID : {665, S} , SENTRY, SELECT 
'org.apache.sentry.provider.db.service.model.MSentryGMPrivilege' AS 
NUCLEUS_TYPE,A1."ACTION",A1.COMPONENT_NAME,A1.CREATE_TIME,A1.WITH_GRANT_OPTION,A1.RESOURCE_NAME_0,A1.RESOURCE_NAME_1,A1.RESOURCE_NAME_2,A1.RESOURCE_NAME_3,A1.RESOURCE_TYPE_0,A1.RESOURCE_TYPE_1,A1.RESOURCE_TYPE_2,A1.RESOURCE_TYPE_3,A1."SCOPE",A1.SERVICE_NAME,A1.GM_PRIVILEGE_ID,A0.ROLE_ID
 FROM SENTRY_ROLE_GM_PRIVILEGE_MAP A0 INNER JOIN SENTRY_GM_PRIVILEGE A1 ON 
A0.GM_PRIVILEGE_ID = A1.GM_PRIVILEGE_ID WHERE EXISTS (SELECT 
'org.apache.sentry.provider.db.service.model.MSentryRole' AS 
NUCLEUS_TYPE,A0_SUB.ROLE_ID AS DN_DATASTOREID FROM SENTRY_ROLE A0_SUB WHERE 
A0_SUB.ROLE_NAME = ? AND A0.ROLE_ID = A0_SUB.ROLE_ID)
  Granted XID : {654, X} 
Lock : ROW, SENTRY_ROLE, (1,7)
  Waiting XID : {654, X} , SENTRY, DELETE FROM SENTRY_ROLE WHERE ROLE_ID=?
  Granted XID : {665, S} 
. The selected victim is XID : 665.
        at org.apache.derby.iapi.error.StandardException.newException(Unknown 
Source)
        at org.apache.derby.impl.services.locks.Deadlock.buildException(Unknown 
Source)
        at 
org.apache.derby.impl.services.locks.ConcurrentLockSet.lockObject(Unknown 
Source)
        at 
org.apache.derby.impl.services.locks.ConcurrentLockSet.zeroDurationLockObject(Unknown
 Source)
        at 
org.apache.derby.impl.services.locks.AbstractPool.zeroDurationlockObject(Unknown
 Source)
        at 
org.apache.derby.impl.services.locks.ConcurrentPool.zeroDurationlockObject(Unknown
 Source)
        at 
org.apache.derby.impl.store.raw.xact.RowLocking2nohold.lockRecordForRead(Unknown
 Source)
        at 
org.apache.derby.impl.store.access.heap.HeapController.lockRow(Unknown Source)
        at 
org.apache.derby.impl.store.access.heap.HeapController.lockRow(Unknown Source)
        at 
org.apache.derby.impl.store.access.btree.index.B2IRowLocking3.lockRowOnPage(Unknown
 Source)
        at 
org.apache.derby.impl.store.access.btree.index.B2IRowLocking3._lockScanRow(Unknown
 Source)
        at 
org.apache.derby.impl.store.access.btree.index.B2IRowLockingRR.lockScanRow(Unknown
 Source)
        at 
org.apache.derby.impl.store.access.btree.BTreeForwardScan.fetchRows(Unknown 
Source)
        at 
org.apache.derby.impl.store.access.btree.BTreeScan.fetchNextGroup(Unknown 
Source)
        at 
org.apache.derby.impl.sql.execute.BulkTableScanResultSet.reloadArray(Unknown 
Source)
        at 
org.apache.derby.impl.sql.execute.BulkTableScanResultSet.getNextRowCore(Unknown 
Source)
        at 
org.apache.derby.impl.sql.execute.IndexRowToBaseRowResultSet.getNextRowCore(Unknown
 Source)
        at 
org.apache.derby.impl.sql.execute.NestedLoopJoinResultSet.getNextRowCore(Unknown
 Source)
        at org.apache.derby.impl.sql.execute.JoinResultSet.openCore(Unknown 
Source)
        at 
org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.openCore(Unknown 
Source)
        at 
org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.open(Unknown Source)
        at 
org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(Unknown Source)
        at org.apache.derby.impl.sql.GenericPreparedStatement.execute(Unknown 
Source)
        ... 26 more

        at org.apache.sentry.service.thrift.Status.throwIfNotOk(Status.java:109)
        at 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericServiceClientDefaultImpl.listPrivilegesByRoleName(SentryGenericServiceClientDefaultImpl.java:484)
        at 
org.apache.sentry.provider.db.generic.service.thrift.SentryGenericServiceClientDefaultImpl.listPrivilegesByRoleName(SentryGenericServiceClientDefaultImpl.java:494)
        at 
org.apache.sentry.provider.db.generic.UpdatableCache.loadFromRemote(UpdatableCache.java:102)
        at 
org.apache.sentry.provider.db.generic.UpdatableCache.reloadData(UpdatableCache.java:163)
        at 
org.apache.sentry.provider.db.generic.UpdatableCache.access$200(UpdatableCache.java:32)
        at 
org.apache.sentry.provider.db.generic.UpdatableCache$1.run(UpdatableCache.java:140)
        at java.util.TimerThread.mainLoop(Timer.java:555)
        at java.util.TimerThread.run(Timer.java:505)
{code}

> JDO deadlocks while processing grant while a background thread processes 
> Notificationlogs
> -----------------------------------------------------------------------------------------
>
>                 Key: SENTRY-1422
>                 URL: https://issues.apache.org/jira/browse/SENTRY-1422
>             Project: Sentry
>          Issue Type: Sub-task
>          Components: Hdfs Plugin
>            Reporter: Sravya Tirukkovalur
>            Assignee: Colin Ma
>             Fix For: sentry-ha-redesign
>
>         Attachments: SENTRY-1422.008-sentry-ha-redesign.patch, 
> SENTRY-1422.009-sentry-ha-redesign.patch, 
> SENTRY-1422.010-sentry-ha-redesign.patch
>
>
> As I was working on Sentry-1321. I see that test case 
> TestDbPrivilegeCleanupOnDrop#testDropObjects fails while "Granting select on 
> table" with following deadlock.
> {code}
> java.sql.SQLException: Error while processing statement: FAILED: Execution 
> Error, return code 1 from 
> org.apache.hadoop.hive.ql.exec.SentryGrantRevokeTask. Unknown error for 
> request: TAlterSentryRoleGrantPrivilegeRequest(protocol_version:2, 
> requestorUserName:admin1, roleName:select_tbl1, 
> privileges:[TSentryPrivilege(privilegeScope:TABLE, serverName:server1, 
> dbName:db_2, tableName:tb_1, URI:, action:select, createTime:1469562185573, 
> grantOption:FALSE, columnName:)]), message: Iteration request failed : SELECT 
> 'org.apache.sentry.provider.db.service.model.MSentryPrivilege' AS 
> NUCLEUS_TYPE,A1.URI,A1."ACTION",A1."COLUMN_NAME",A1.CREATE_TIME,A1.DB_NAME,A1.WITH_GRANT_OPTION,A1.PRIVILEGE_SCOPE,A1."SERVER_NAME",A1."TABLE_NAME",A1.DB_PRIVILEGE_ID
>  FROM SENTRY_ROLE_DB_PRIVILEGE_MAP A0 INNER JOIN SENTRY_DB_PRIVILEGE A1 ON 
> A0.DB_PRIVILEGE_ID = A1.DB_PRIVILEGE_ID WHERE A0.ROLE_ID = ?. Server 
> Stacktrace: javax.jdo.JDODataStoreException: Iteration request failed : 
> SELECT 'org.apache.sentry.provider.db.service.model.MSentryPrivilege' AS 
> NUCLEUS_TYPE,A1.URI,A1."ACTION",A1."COLUMN_NAME",A1.CREATE_TIME,A1.DB_NAME,A1.WITH_GRANT_OPTION,A1.PRIVILEGE_SCOPE,A1."SERVER_NAME",A1."TABLE_NAME",A1.DB_PRIVILEGE_ID
>  FROM SENTRY_ROLE_DB_PRIVILEGE_MAP A0 INNER JOIN SENTRY_DB_PRIVILEGE A1 ON 
> A0.DB_PRIVILEGE_ID = A1.DB_PRIVILEGE_ID WHERE A0.ROLE_ID = ?
>       at 
> org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:451)
>       at 
> org.datanucleus.api.jdo.JDOTransaction.commit(JDOTransaction.java:165)
>       at 
> org.apache.sentry.provider.db.service.persistent.SentryStore.commitTransaction(SentryStore.java:279)
>       at 
> org.apache.sentry.provider.db.service.persistent.SentryStore.commitUpdateTransaction(SentryStore.java:261)
>       at 
> org.apache.sentry.provider.db.service.persistent.SentryStore.alterSentryRoleGrantPrivileges(SentryStore.java:458)
>       at 
> org.apache.sentry.provider.db.service.thrift.SentryPolicyStoreProcessor.alter_sentry_role_grant_privilege(SentryPolicyStoreProcessor.java:261)
>       at 
> org.apache.sentry.provider.db.service.thrift.SentryPolicyService$Processor$alter_sentry_role_grant_privilege.getResult(SentryPolicyService.java:1237)
>       at 
> org.apache.sentry.provider.db.service.thrift.SentryPolicyService$Processor$alter_sentry_role_grant_privilege.getResult(SentryPolicyService.java:1222)
>       at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39)
>       at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39)
>       at 
> org.apache.sentry.provider.db.service.thrift.SentryProcessorWrapper.process(SentryProcessorWrapper.java:35)
>       at 
> org.apache.thrift.TMultiplexedProcessor.process(TMultiplexedProcessor.java:123)
>       at 
> org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:286)
>       at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>       at java.lang.Thread.run(Thread.java:745)
> NestedThrowablesStackTrace:
> java.sql.SQLTransactionRollbackException: A lock could not be obtained due to 
> a deadlock, cycle of locks and waiters is:
> Lock : ROW, SENTRY_ROLE_DB_PRIVILEGE_MAP, (1,10)
>   Waiting XID : {712, S} , SENTRY, SELECT 
> 'org.apache.sentry.provider.db.service.model.MSentryPrivilege' AS 
> NUCLEUS_TYPE,A1.URI,A1."ACTION",A1."COLUMN_NAME",A1.CREATE_TIME,A1.DB_NAME,A1.WITH_GRANT_OPTION,A1.PRIVILEGE_SCOPE,A1."SERVER_NAME",A1."TABLE_NAME",A1.DB_PRIVILEGE_ID
>  FROM SENTRY_ROLE_DB_PRIVILEGE_MAP A0 INNER JOIN SENTRY_DB_PRIVILEGE A1 ON 
> A0.DB_PRIVILEGE_ID = A1.DB_PRIVILEGE_ID WHERE A0.ROLE_ID = ?
>   Granted XID : {704, X} 
> Lock : ROW, SENTRY_DB_PRIVILEGE, (1,11)
>   Waiting XID : {704, S} , SENTRY, SELECT 
> 'org.apache.sentry.provider.db.service.model.MSentryPrivilege' AS 
> NUCLEUS_TYPE,A0.URI,A0."ACTION",A0."COLUMN_NAME",A0.CREATE_TIME,A0.DB_NAME,A0.WITH_GRANT_OPTION,A0.PRIVILEGE_SCOPE,A0."SERVER_NAME",A0."TABLE_NAME",A0.DB_PRIVILEGE_ID
>  FROM SENTRY_DB_PRIVILEGE A0 WHERE A0."SERVER_NAME" = 'server1' AND 
> A0.DB_NAME = 'db_2' AND A0."ACTION" = 'create'
>   Granted XID : {712, X} 
> . The selected victim is XID : 712.
>       at 
> org.apache.derby.impl.jdbc.SQLExceptionFactory40.getSQLException(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.Util.generateCsSQLException(Unknown 
> Source)
>       at 
> org.apache.derby.impl.jdbc.TransactionResourceImpl.wrapInSQLException(Unknown 
> Source)
>       at 
> org.apache.derby.impl.jdbc.TransactionResourceImpl.handleException(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedConnection.handleException(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.ConnectionChild.handleException(Unknown 
> Source)
>       at org.apache.derby.impl.jdbc.EmbedStatement.executeStatement(Unknown 
> Source)
>       at 
> org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeStatement(Unknown 
> Source)
>       at 
> org.apache.derby.impl.jdbc.EmbedPreparedStatement.executeQuery(Unknown Source)
>       at 
> com.jolbox.bonecp.PreparedStatementHandle.executeQuery(PreparedStatementHandle.java:172)
>       at 
> org.datanucleus.store.rdbms.ParamLoggingPreparedStatement.executeQuery(ParamLoggingPreparedStatement.java:381)
>       at 
> org.datanucleus.store.rdbms.SQLController.executeStatementQuery(SQLController.java:559)
>       at 
> org.datanucleus.store.rdbms.scostore.JoinSetStore.iterator(JoinSetStore.java:967)
>       at org.datanucleus.store.types.backed.Set.loadFromStore(Set.java:323)
>       at org.datanucleus.store.types.backed.Set.initialise(Set.java:272)
>       at 
> org.datanucleus.store.types.SCOUtils.createSCOWrapper(SCOUtils.java:256)
>       at 
> org.datanucleus.store.types.SCOUtils.newSCOInstance(SCOUtils.java:142)
>       at 
> org.datanucleus.store.rdbms.mapping.java.AbstractContainerMapping.replaceFieldWithWrapper(AbstractContainerMapping.java:399)
>       at 
> org.datanucleus.store.rdbms.mapping.java.AbstractContainerMapping.postFetch(AbstractContainerMapping.java:417)
>       at 
> org.datanucleus.store.rdbms.request.FetchRequest.execute(FetchRequest.java:420)
>       at 
> org.datanucleus.store.rdbms.RDBMSPersistenceHandler.fetchObject(RDBMSPersistenceHandler.java:324)
>       at 
> org.datanucleus.state.AbstractStateManager.loadFieldsFromDatastore(AbstractStateManager.java:1122)
>       at 
> org.datanucleus.state.JDOStateManager.loadUnloadedFieldsInFetchPlan(JDOStateManager.java:3000)
>       at 
> org.datanucleus.state.AbstractStateManager.loadFieldsInFetchPlan(AbstractStateManager.java:1064)
>       at 
> org.datanucleus.ExecutionContextImpl.performDetachAllOnTxnEndPreparation(ExecutionContextImpl.java:4574)
>       at 
> org.datanucleus.ExecutionContextImpl.preCommit(ExecutionContextImpl.java:4259)
>       at 
> org.datanucleus.ExecutionContextImpl.transactionPreCommit(ExecutionContextImpl.java:654)
>       at 
> org.datanucleus.TransactionImpl.internalPreCommit(TransactionImpl.java:379)
>       at org.datanucleus.TransactionImpl.commit(TransactionImpl.java:268)
>       at org.datanucleus.api.jdo.JDOTransaction.commit(JDOTransaction.java:98)
>       at 
> org.apache.sentry.provider.db.service.persistent.SentryStore.commitTransaction(SentryStore.java:279)
>       at 
> org.apache.sentry.provider.db.service.persistent.SentryStore.commitUpdateTransaction(SentryStore.java:261)
>       at 
> org.apache.sentry.provider.db.service.persistent.SentryStore.alterSentryRoleGrantPrivileges(SentryStore.java:458)
>       at 
> org.apache.sentry.provider.db.service.thrift.SentryPolicyStoreProcessor.alter_sentry_role_grant_privilege(SentryPolicyStoreProcessor.java:261)
>       at 
> org.apache.sentry.provider.db.service.thrift.SentryPolicyService$Processor$alter_sentry_role_grant_privilege.getResult(SentryPolicyService.java:1237)
>       at 
> org.apache.sentry.provider.db.service.thrift.SentryPolicyService$Processor$alter_sentry_role_grant_privilege.getResult(SentryPolicyService.java:1222)
>       at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39)
>       at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39)
>       at 
> org.apache.sentry.provider.db.service.thrift.SentryProcessorWrapper.process(SentryProcessorWrapper.java:35)
>       at 
> org.apache.thrift.TMultiplexedProcessor.process(TMultiplexedProcessor.java:123)
>       at 
> org.apache.thrift.server.TThreadPoolServer$WorkerProcess.run(TThreadPoolServer.java:286)
>       at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>       at java.lang.Thread.run(Thread.java:745)
> Caused by: java.sql.SQLException: A lock could not be obtained due to a 
> deadlock, cycle of locks and waiters is:
> Lock : ROW, SENTRY_ROLE_DB_PRIVILEGE_MAP, (1,10)
>   Waiting XID : {712, S} , SENTRY, SELECT 
> 'org.apache.sentry.provider.db.service.model.MSentryPrivilege' AS 
> NUCLEUS_TYPE,A1.URI,A1."ACTION",A1."COLUMN_NAME",A1.CREATE_TIME,A1.DB_NAME,A1.WITH_GRANT_OPTION,A1.PRIVILEGE_SCOPE,A1."SERVER_NAME",A1."TABLE_NAME",A1.DB_PRIVILEGE_ID
>  FROM SENTRY_ROLE_DB_PRIVILEGE_MAP A0 INNER JOIN SENTRY_DB_PRIVILEGE A1 ON 
> A0.DB_PRIVILEGE_ID = A1.DB_PRIVILEGE_ID WHERE A0.ROLE_ID = ?
>   Granted XID : {704, X} 
> Lock : ROW, SENTRY_DB_PRIVILEGE, (1,11)
>   Waiting XID : {704, S} , SENTRY, SELECT 
> 'org.apache.sentry.provider.db.service.model.MSentryPrivilege' AS 
> NUCLEUS_TYPE,A0.URI,A0."ACTION",A0."COLUMN_NAME",A0.CREATE_TIME,A0.DB_NAME,A0.WITH_GRANT_OPTION,A0.PRIVILEGE_SCOPE,A0."SERVER_NAME",A0."TABLE_NAME",A0.DB_PRIVILEGE_ID
>  FROM SENTRY_DB_PRIVILEGE A0 WHERE A0."SERVER_NAME" = 'server1' AND 
> A0.DB_NAME = 'db_2' AND A0."ACTION" = 'create'
>   Granted XID : {712, X} 
> . The selected victim is XID : 712.
>       at 
> org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
>       at 
> org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown
>  Source)
>       ... 44 more
> Caused by: ERROR 40001: A lock could not be obtained due to a deadlock, cycle 
> of locks and waiters is:
> Lock : ROW, SENTRY_ROLE_DB_PRIVILEGE_MAP, (1,10)
>   Waiting XID : {712, S} , SENTRY, SELECT 
> 'org.apache.sentry.provider.db.service.model.MSentryPrivilege' AS 
> NUCLEUS_TYPE,A1.URI,A1."ACTION",A1."COLUMN_NAME",A1.CREATE_TIME,A1.DB_NAME,A1.WITH_GRANT_OPTION,A1.PRIVILEGE_SCOPE,A1."SERVER_NAME",A1."TABLE_NAME",A1.DB_PRIVILEGE_ID
>  FROM SENTRY_ROLE_DB_PRIVILEGE_MAP A0 INNER JOIN SENTRY_DB_PRIVILEGE A1 ON 
> A0.DB_PRIVILEGE_ID = A1.DB_PRIVILEGE_ID WHERE A0.ROLE_ID = ?
>   Granted XID : {704, X} 
> Lock : ROW, SENTRY_DB_PRIVILEGE, (1,11)
>   Waiting XID : {704, S} , SENTRY, SELECT 
> 'org.apache.sentry.provider.db.service.model.MSentryPrivilege' AS 
> NUCLEUS_TYPE,A0.URI,A0."ACTION",A0."COLUMN_NAME",A0.CREATE_TIME,A0.DB_NAME,A0.WITH_GRANT_OPTION,A0.PRIVILEGE_SCOPE,A0."SERVER_NAME",A0."TABLE_NAME",A0.DB_PRIVILEGE_ID
>  FROM SENTRY_DB_PRIVILEGE A0 WHERE A0."SERVER_NAME" = 'server1' AND 
> A0.DB_NAME = 'db_2' AND A0."ACTION" = 'create'
>   Granted XID : {712, X} 
> . The selected victim is XID : 712.
>       at org.apache.derby.iapi.error.StandardException.newException(Unknown 
> Source)
>       at org.apache.derby.impl.services.locks.Deadlock.buildException(Unknown 
> Source)
>       at 
> org.apache.derby.impl.services.locks.ConcurrentLockSet.lockObject(Unknown 
> Source)
>       at 
> org.apache.derby.impl.services.locks.ConcurrentLockSet.zeroDurationLockObject(Unknown
>  Source)
>       at 
> org.apache.derby.impl.services.locks.AbstractPool.zeroDurationlockObject(Unknown
>  Source)
>       at 
> org.apache.derby.impl.services.locks.ConcurrentPool.zeroDurationlockObject(Unknown
>  Source)
>       at 
> org.apache.derby.impl.store.raw.xact.RowLocking2nohold.lockRecordForRead(Unknown
>  Source)
>       at 
> org.apache.derby.impl.store.access.heap.HeapController.lockRow(Unknown Source)
>       at 
> org.apache.derby.impl.store.access.heap.HeapController.lockRow(Unknown Source)
>       at 
> org.apache.derby.impl.store.access.btree.index.B2IRowLocking3.lockRowOnPage(Unknown
>  Source)
>       at 
> org.apache.derby.impl.store.access.btree.index.B2IRowLocking3._lockScanRow(Unknown
>  Source)
>       at 
> org.apache.derby.impl.store.access.btree.index.B2IRowLockingRR.lockScanRow(Unknown
>  Source)
>       at 
> org.apache.derby.impl.store.access.btree.BTreeForwardScan.fetchRows(Unknown 
> Source)
>       at 
> org.apache.derby.impl.store.access.btree.BTreeScan.fetchNextGroup(Unknown 
> Source)
>       at 
> org.apache.derby.impl.sql.execute.BulkTableScanResultSet.reloadArray(Unknown 
> Source)
>       at 
> org.apache.derby.impl.sql.execute.BulkTableScanResultSet.getNextRowCore(Unknown
>  Source)
>       at org.apache.derby.impl.sql.execute.JoinResultSet.openCore(Unknown 
> Source)
>       at 
> org.apache.derby.impl.sql.execute.ProjectRestrictResultSet.openCore(Unknown 
> Source)
>       at 
> org.apache.derby.impl.sql.execute.BasicNoPutResultSetImpl.open(Unknown Source)
>       at 
> org.apache.derby.impl.sql.GenericPreparedStatement.executeStmt(Unknown Source)
>       at org.apache.derby.impl.sql.GenericPreparedStatement.execute(Unknown 
> Source)
>       ... 38 more
>       at org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:296)
>       at 
> org.apache.sentry.tests.e2e.dbprovider.TestDbPrivilegeCleanupOnDrop.setupPrivileges(TestDbPrivilegeCleanupOnDrop.java:273)
>       at 
> org.apache.sentry.tests.e2e.dbprovider.TestDbPrivilegeCleanupOnDrop.testDropObjects(TestDbPrivilegeCleanupOnDrop.java:104)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at 
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>       at 
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>       at java.lang.reflect.Method.invoke(Method.java:606)
>       at 
> org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)
>       at 
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
>       at 
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)
>       at 
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
>       at 
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
>       at 
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:30)
>       at 
> org.junit.internal.runners.statements.FailOnTimeout$StatementThread.run(FailOnTimeout.java:62)
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to