Alexander Kolbasov created SENTRY-1855:
------------------------------------------

             Summary: PERM/PATH transactions can fail to commit to the sentry 
database under load
                 Key: SENTRY-1855
                 URL: https://issues.apache.org/jira/browse/SENTRY-1855
             Project: Sentry
          Issue Type: Sub-task
          Components: Sentry
    Affects Versions: sentry-ha-redesign
            Reporter: Alexander Kolbasov
            Assignee: Na Li


Looking at the latest stress runs, we noticed that some of the transactions 
could fail to commit to the database (with Duplicate key exception) after 
exhausting all the retries.
This problem has become more evident if we have more number of clients 
connecting to Sentry to issue the permission updates. Was able to reproduce 
consistently with 15 clients doing 100 operations each.
In the past we introduced exponential backoff (SENTRY-1821) so as part of test 
run increased the defaults to 750ms sleep and 20 retries. But even after this, 
the cluster still shows up the transaction failures. This change also increases 
the latency of every transaction in sentry.
We need to revisit this and come up with a better way to solve this problem.

{code}
2017-07-13 13:18:14,449 ERROR 
org.apache.sentry.provider.db.service.persistent.TransactionManager: The 
transaction has reached max retry number, Exception thrown when executing query
javax.jdo.JDOException: Exception thrown when executing query
        at 
org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:596)
        at org.datanucleus.api.jdo.JDOQuery.execute(JDOQuery.java:252)
        at 
org.apache.sentry.provider.db.service.persistent.SentryStore.getRole(SentryStore.java:294)
        at 
org.apache.sentry.provider.db.service.persistent.SentryStore.alterSentryRoleGrantPrivilegeCore(SentryStore.java:645)
        at 
org.apache.sentry.provider.db.service.persistent.SentryStore.access$500(SentryStore.java:101)
        at 
org.apache.sentry.provider.db.service.persistent.SentryStore$11.execute(SentryStore.java:601)
        at 
org.apache.sentry.provider.db.service.persistent.TransactionManager.executeTransaction(TransactionManager.java:159)
        at 
org.apache.sentry.provider.db.service.persistent.TransactionManager.access$100(TransactionManager.java:63)
        at 
org.apache.sentry.provider.db.service.persistent.TransactionManager$2.call(TransactionManager.java:213)
--
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:971)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3887)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3823)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2435)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2582)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2530)
        at 
com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1907)
        at 
com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2141)
        at 
com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1773)
        ... 33 more
2017-07-13 13:18:14,450 ERROR 
org.apache.sentry.provider.db.service.thrift.SentryPolicyStoreProcessor: 
Unknown error for request: 
TAlterSentryRoleGrantPrivilegeRequest(protocol_version:2, 
requestorUserName:hive, roleName:2017_07_12_15_06_38_1_2_805, 
privileges:[TSentryPrivilege(privilegeScope:DATABASE, serverName:server1, 
dbName:2017_07_12_15_06_38_1_2, tableName:, URI:, action:*, 
createTime:1499904401222, grantOption:FALSE, columnName:)]), message: The 
transaction has reached max retry number, Exception thrown when executing query
java.lang.Exception: The transaction has reached max retry number, Exception 
thrown when executing query
        at 
org.apache.sentry.provider.db.service.persistent.TransactionManager$ExponentialBackoff.execute(TransactionManager.java:255)
        at 
org.apache.sentry.provider.db.service.persistent.TransactionManager.executeTransactionBlocksWithRetry(TransactionManager.java:209)
        at 
org.apache.sentry.provider.db.service.persistent.SentryStore.execute(SentryStore.java:3330)
        at 
org.apache.sentry.provider.db.service.persistent.SentryStore.alterSentryRoleGrantPrivilege(SentryStore.java:593)
        at 
org.apache.sentry.provider.db.service.persistent.SentryStore.alterSentryRoleGrantPrivileges(SentryStore.java:633)
        at 
org.apache.sentry.provider.db.service.thrift.SentryPolicyStoreProcessor.alter_sentry_role_grant_privilege(SentryPolicyStoreProcessor.java:256)
        at 
org.apache.sentry.provider.db.service.thrift.SentryPolicyService$Processor$alter_sentry_role_grant_privilege.getResult(SentryPolicyService.java:997)
        at 
org.apache.sentry.provider.db.service.thrift.SentryPolicyService$Processor$alter_sentry_role_grant_privilege.getResult(SentryPolicyService.java:982)
        at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39)
        at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39)
{code}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to