Alexander Kolbasov created SENTRY-1579:
------------------------------------------
Summary: Sentry should avoid using Proxy
Key: SENTRY-1579
URL: https://issues.apache.org/jira/browse/SENTRY-1579
Project: Sentry
Issue Type: Improvement
Components: Sentry
Affects Versions: 1.8.0, sentry-ha-redesign
Reporter: Alexander Kolbasov
Priority: Minor
Sentry code uses Java java.lang.Reflect.Proxy class in several places:
{code}SentryHDFSServiceClientFactory{code} uses this to modify behavior in HA
case.
{code}SentryServiceClientFactory{code} uses it to modify behavior in connection
pool or Ha case:
{code}
public static SentryPolicyServiceClient create(Configuration conf) throws
Exception {
boolean haEnabled = conf.getBoolean(ClientConfig.SERVER_HA_ENABLED, false);
boolean pooled = conf.getBoolean(ClientConfig.SENTRY_POOL_ENABLED, false);
if (pooled) {
return (SentryPolicyServiceClient) Proxy
.newProxyInstance(SentryPolicyServiceClientDefaultImpl.class.getClassLoader(),
SentryPolicyServiceClientDefaultImpl.class.getInterfaces(),
new PoolClientInvocationHandler(conf));
} else if (haEnabled) {
return (SentryPolicyServiceClient) Proxy
.newProxyInstance(SentryPolicyServiceClientDefaultImpl.class.getClassLoader(),
SentryPolicyServiceClientDefaultImpl.class.getInterfaces(),
new HAClientInvocationHandler(conf));
} else {
return new SentryPolicyServiceClientDefaultImpl(conf);
}
}
{code}
{code}SentryServiceClientPoolFactory{code} uses it to modify behavior in HA
case.
This seems to be an abuse of the Proxy interface and some simpler solution
should be possible. We should investigate.
Note that in sentry-ha-redesign branch there is only one use in
{code}SentryPolicyServiceClient{code} that is used to adjust behavior for
pooled vs retry behaviors:
{code}
public static SentryPolicyServiceClient create(Configuration conf) throws
Exception {
boolean pooled = conf.getBoolean(
ClientConfig.SENTRY_POOL_ENABLED,
ClientConfig.SENTRY_POOL_ENABLED_DEFAULT);
if (pooled) {
return (SentryPolicyServiceClient) Proxy
.newProxyInstance(SentryPolicyServiceClientDefaultImpl.class.getClassLoader(),
SentryPolicyServiceClientDefaultImpl.class.getInterfaces(),
new PoolClientInvocationHandler(conf));
} else {
return (SentryPolicyServiceClient) Proxy
.newProxyInstance(SentryPolicyServiceClientDefaultImpl.class.getClassLoader(),
SentryPolicyServiceClientDefaultImpl.class.getInterfaces(),
new RetryClientInvocationHandler(conf));
}
}
{code}
Again, a more straightforward solution should be possible.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)