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

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

It is interesting to look at the use of SENTRY_ROLE_DB_PRIVILEGE_MAP and 
CENTRY_DB_PRIVILEGE. 

I only see references to SENTRY_ROLE_DB_PRIVILEGE_MAP for joins as part of the 
definition of MSentryRole - no one uses it directly except 
removeOrphanedPrivileges():

{code}
private void removeOrphanedPrivileges() throws SentryStandbyException {
  final String privDB = "SENTRY_DB_PRIVILEGE";
  final String privId = "DB_PRIVILEGE_ID";
  final String mapDB = "SENTRY_ROLE_DB_PRIVILEGE_MAP";
  final String privFilter =
          "select " + privId +
          " from " + privDB + " p" +
          " where not exists (" +
              " select 1 from " + mapDB + " d" +
              " where p." + privId + " != d." + privId +
          " )";
{code}

This is used here:

{code}
transaction.begin();
transaction.setRollbackOnly();  // Makes the tx read-only
act.checkSqlFencing(pm);
Query query = pm.newQuery("javax.jdo.query.SQL", privFilter);
query.setClass(MSentryPrivilege.class);
List<MSentryPrivilege> results = (List<MSentryPrivilege>) query.execute();
{code}

The definition for MSentryPrivilege has “privileges” field which does join with 
SENTRY_ROLE_DB_PRIVILEGE_MAP.
Can this cause our deadlock troubles?

If we look at potential holders of SENTRY_ROLE_DB_PRIVILEGE_MAP we can see that 
outside of the use abovew it is only used indirectly in joins (see package.jdo 
file).

I also see the following interesting thing:

MSentryRole does join with SENTRY_ROLE_DB_PRIVILEGE_MAP. It also references 
collection of MSentryPrivilege objects which has “roles” fields which is a 
collection of MSentryRole objects. This looks somewhat suspicious -  like a 
circular dependency - can this cause any deadlocks?

Here is the package.jdo file for references:

{code}

    <class name="MSentryRole" identity-type="datastore" table="SENTRY_ROLE" 
detachable="true">
      <datastore-identity>
        <column name="ROLE_ID"/>
      </datastore-identity>
      <field name="roleName">
        <column name="ROLE_NAME" length="128" jdbc-type="VARCHAR"/>
        <index name="SentryRoleName" unique="true"/>
      </field>
      <field name = "createTime">
        <column name = "CREATE_TIME" jdbc-type="BIGINT"/>
      </field>
      <field name = "privileges" table="SENTRY_ROLE_DB_PRIVILEGE_MAP" 
default-fetch-group="true">
        <collection 
element-type="org.apache.sentry.provider.db.service.model.MSentryPrivilege"/>
            <join>
                <column name="ROLE_ID"/>
            </join>
            <element>
                <column name="DB_PRIVILEGE_ID"/>
            </element>
      </field>

      <field name = "gmPrivileges" table="SENTRY_ROLE_GM_PRIVILEGE_MAP" 
default-fetch-group="true">
        <collection 
element-type="org.apache.sentry.provider.db.service.model.MSentryGMPrivilege"/>
            <join>
                <column name="ROLE_ID"/>
            </join>
            <element>
                <column name="GM_PRIVILEGE_ID"/>
            </element>
      </field>

      <field name = "groups" table="SENTRY_ROLE_GROUP_MAP" 
default-fetch-group="true">
        <collection 
element-type="org.apache.sentry.provider.db.service.model.MSentryGroup"/>
            <join>
                <column name="ROLE_ID"/>
            </join>
            <element>
                <column name="GROUP_ID"/>
            </element>
      </field>

      <field name = "users" table="SENTRY_ROLE_USER_MAP" 
default-fetch-group="true">
        <collection 
element-type="org.apache.sentry.provider.db.service.model.MSentryUser"/>
            <join>
                <column name="ROLE_ID"/>
            </join>
            <element>
                <column name="USER_ID"/>
            </element>
      </field>
    </class>

    <class name="MSentryPrivilege" identity-type="datastore" 
table="SENTRY_DB_PRIVILEGE" detachable="true">
      <datastore-identity>
        <column name="DB_PRIVILEGE_ID"/>
      </datastore-identity>
      <index name="PRIVILEGE_INDEX" unique="true">
        <field name="serverName"/>
        <field name="dbName"/>
        <field name="tableName"/>
        <field name="columnName"/>
        <field name="URI"/>
        <field name="action"/>
        <field name="grantOption"/>
      </index>
      <field name="privilegeScope">
        <column name="PRIVILEGE_SCOPE" length="40" jdbc-type="VARCHAR"/>
      </field>
      <field name="serverName">
        <column name="SERVER_NAME" length="4000" jdbc-type="VARCHAR"/>
      </field>
      <field name="dbName">
        <column name="DB_NAME" length="4000" jdbc-type="VARCHAR"/>
      </field>
      <field name="tableName">
        <column name="TABLE_NAME" length="4000" jdbc-type="VARCHAR"/>
      </field>
      <field name="columnName">
        <column name="COLUMN_NAME" length="4000" jdbc-type="VARCHAR"/>
      </field>
      <field name="URI">
        <column name="URI" length="4000" jdbc-type="VARCHAR"/>
      </field>
      <field name="action">
        <column name="ACTION" length="40" jdbc-type="VARCHAR"/>
      </field>
      <field name = "createTime">
        <column name = "CREATE_TIME" jdbc-type="BIGINT"/>
      </field>
      <field name="grantOption">
        <column name="WITH_GRANT_OPTION" length="1" jdbc-type="CHAR"/>
      </field>
      <field name="roles" mapped-by="privileges">
         <collection 
element-type="org.apache.sentry.provider.db.service.model.MSentryRole"/>
      </field>
    </class>

    <class name="MSentryGMPrivilege" identity-type="datastore" 
table="SENTRY_GM_PRIVILEGE" detachable="true">
      <datastore-identity>
        <column name="GM_PRIVILEGE_ID"/>
      </datastore-identity>
      <index name="GM_PRIVILEGE_INDEX" unique="true">
        <field name="componentName"/>
        <field name="serviceName"/>
        <field name="resourceName0"/>
        <field name="resourceType0"/>
        <field name="resourceName1"/>
        <field name="resourceType1"/>
        <field name="resourceName2"/>
        <field name="resourceType2"/>
        <field name="resourceName3"/>
        <field name="resourceType3"/>
        <field name="action"/>
        <field name="grantOption"/>
      </index>
      <field name="componentName">
        <column name="COMPONENT_NAME" length="100" jdbc-type="VARCHAR"/>
      </field>
      <field name="serviceName">
        <column name="SERVICE_NAME" length="100" jdbc-type="VARCHAR"/>
      </field>
      <field name="resourceName0">
        <column name="RESOURCE_NAME_0" length="100" jdbc-type="VARCHAR"/>
      </field>
      <field name="resourceType0">
        <column name="RESOURCE_TYPE_0" length="100" jdbc-type="VARCHAR"/>
      </field>
      <field name="resourceName1">
        <column name="RESOURCE_NAME_1" length="100" jdbc-type="VARCHAR"/>
      </field>
      <field name="resourceType1">
        <column name="RESOURCE_TYPE_1" length="100" jdbc-type="VARCHAR"/>
      </field>
      <field name="resourceName2">
        <column name="RESOURCE_NAME_2" length="100" jdbc-type="VARCHAR"/>
      </field>
      <field name="resourceType2">
        <column name="RESOURCE_TYPE_2" length="100" jdbc-type="VARCHAR"/>
      </field>
      <field name="resourceName3">
        <column name="RESOURCE_NAME_3" length="100" jdbc-type="VARCHAR"/>
      </field>
      <field name="resourceType3">
        <column name="RESOURCE_TYPE_3" length="100" jdbc-type="VARCHAR"/>
      </field>
      <field name="action">
        <column name="ACTION" length="100" jdbc-type="VARCHAR"/>
      </field>
      <field name="scope">
        <column name="SCOPE" length="100" jdbc-type="VARCHAR"/>
      </field>
      <field name = "createTime">
        <column name = "CREATE_TIME" jdbc-type="BIGINT"/>
      </field>
      <field name="grantOption">
        <column name="WITH_GRANT_OPTION" length="1" jdbc-type="CHAR"/>
      </field>
      <field name="roles" mapped-by="gmPrivileges">
        <collection 
element-type="org.apache.sentry.provider.db.service.model.MSentryRole"/>
      </field>
    </class>

    <class name="MSentryVersion" table="SENTRY_VERSION" 
identity-type="datastore" detachable="true">
      <datastore-identity>
        <column name="VER_ID"/>
      </datastore-identity>
      <field name ="schemaVersion">
        <column name="SCHEMA_VERSION" length="127" jdbc-type="VARCHAR" 
allows-null="false"/>
      </field>
      <field name ="versionComment">
        <column name="VERSION_COMMENT" length="255" jdbc-type="VARCHAR" 
allows-null="false"/>
      </field>
     </class>

     <class name="MAuthzPathsMapping" identity-type="datastore" 
table="AUTHZ_PATHS_MAPPING" detachable="true">
       <datastore-identity>
         <column name="AUTHZ_OBJ_ID"/>
       </datastore-identity>
       <!--
         authzObjName is composed by hive database name, and table name. e.g. 
"default.tb1". Since
         both hive database name, and table name have restrictions to be at 
most 128 characters long,
         384 characters length should be enough for AUTHZ_OBJ_NAM.
       -->
       <field name="authzObjName">
         <column name="AUTHZ_OBJ_NAME" length="384" jdbc-type="VARCHAR"/>
         <index name="AuthzObjName" unique="true"/>
       </field>
       <field name="createTimeMs">
         <column name="CREATE_TIME_MS" jdbc-type="BIGINT"/>
       </field>
       <field name = "paths">
         <collection element-type="java.lang.String"/>
             <join/>
             <element>
                 <column name="PATHS"/>
             </element>
       </field>
     </class>

  </package>
</jdo>
{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