Alexander Kolbasov created SENTRY-1881:
------------------------------------------
Summary: 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
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)