[ https://issues.apache.org/jira/browse/SENTRY-1881?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Alexander Kolbasov updated SENTRY-1881: --------------------------------------- Status: Patch Available (was: Open) > PrivilegeOperatePersistence throws wrong type of exceptions > ----------------------------------------------------------- > > Key: SENTRY-1881 > URL: https://issues.apache.org/jira/browse/SENTRY-1881 > Project: Sentry > Issue Type: New Feature > Components: Sentry > Affects Versions: 1.8.0, 2.0.0 > Reporter: Alexander Kolbasov > Assignee: Sergio Peña > Attachments: SENTRY-1881.01.patch > > Original Estimate: 24h > Remaining Estimate: 24h > > The PrivilegeOperatePersistenc class uses wrong exceptions to throw, e.g.: > {code} > private BitFieldAction getAction(String component, String name) { > BitFieldActionFactory actionFactory = getActionFactory(component); > BitFieldAction action = actionFactory.getActionByName(name); > if (action == null) { > throw new RuntimeException("can't get BitFieldAction for name:" + name); > } > return action; > } > {code} > Notice that it throws RuntimeException (which is a completely wrong exception > to throw here). The problem is that these exceptions are retried at the > TransactionManager level and never succeed so we are just waisting time. This > particular bit is triggered by a test > {{org.apache.sentry.provider.db.generic.service.thrift.TestAuditLogForSentryGenericService}} > and we get the following exception which is retried many times: > {code} > java.lang.RuntimeException: can't get BitFieldAction for name:invalidaction > at > org.apache.sentry.provider.db.generic.service.persistent.PrivilegeOperatePersistence.getAc > tion(PrivilegeOperatePersistence.java:523) > at > org.apache.sentry.provider.db.generic.service.persistent.PrivilegeOperatePersistence.grant > RolePartial(PrivilegeOperatePersistence.java:191) > at > org.apache.sentry.provider.db.generic.service.persistent.PrivilegeOperatePersistence.grant > Privilege(PrivilegeOperatePersistence.java:181) > at > org.apache.sentry.provider.db.generic.service.persistent.DelegateSentryStore$1.execute(Del > egateSentryStore.java:132) > at > org.apache.sentry.provider.db.service.persistent.TransactionManager.executeTransaction(Tra > nsactionManager.java:123) > at > org.apache.sentry.provider.db.service.persistent.TransactionManager$1.call(TransactionMana > ger.java:192) > at > org.apache.sentry.provider.db.service.persistent.TransactionManager$ExponentialBackoff.exe > cute(TransactionManager.java:233) > at > org.apache.sentry.provider.db.service.persistent.TransactionManager.executeTransactionWith > Retry(TransactionManager.java:188) > at > org.apache.sentry.provider.db.generic.service.persistent.DelegateSentryStore.alterRoleGran > tPrivilege(DelegateSentryStore.java:119) > at > org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyProcessor$5.handle > (SentryGenericPolicyProcessor.java:435) > at > org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyProcessor.requestH > andle(SentryGenericPolicyProcessor.java:183) > at > org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyProcessor.alter_se > ntry_role_grant_privilege(SentryGenericPolicyProcessor.java:431) > at > org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyService$Processor$ > alter_sentry_role_grant_privilege.getResult(SentryGenericPolicyService.java:877) > at > org.apache.sentry.provider.db.generic.service.thrift.SentryGenericPolicyService$Processor$ > alter_sentry_role_grant_privilege.getResult(SentryGenericPolicyService.java:862) > 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.p > rocess(SentryGenericPolicyProcessorWrapper.java:37) > 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:1142) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) > at java.lang.Thread.run(Thread.java:745) > {code) > Not only it is wrong, but also it sometimes triggers test failures because we > may retry for longer then the test allocated time. We should use Sentry > exceptions which are not retried by TransactionManager instead. -- This message was sent by Atlassian JIRA (v6.4.14#64029)