You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@accumulo.apache.org by "Christopher Tubbs (JIRA)" <ji...@apache.org> on 2017/01/11 21:40:16 UTC
[jira] [Commented] (ACCUMULO-4549) Remove duplicate init functions
in TabletBalancer
[ https://issues.apache.org/jira/browse/ACCUMULO-4549?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15819263#comment-15819263 ]
Christopher Tubbs commented on ACCUMULO-4549:
---------------------------------------------
I briefly looked into this. It's actually kinda frustrating, because the {{ServerConfigurationFactory}} really shouldn't be the base object used here. As an interim solution, we can deprecate the old method with {{ServerConfiguration}} but it really should be injecting the {{Master}} context, or a dedicated configuration object available for balancers. If we're going to treat the {{TabletBalancer}} as API, we're going to need to ensure we treat any method parameter types as public API, too, and that's way out of scope for {{ServerConfigurationFactory}}.
It looks like the main reason this is even needed in the {{TabletBalancer}} is to construct a context, which carries the RPC credentials, so the balancer can do thrift calls to get online tablets lists. It seems to me that this isn't really necessary, because the {{Master}} should have that information. However, it's also used to get {{TableConfiguration}} instances in some subclasses.
In short, we can deprecate one of them, but this is a really terrible API, with tons of scope creep on these server configuration objects, which will have to be improved significantly before promoting the balancer to "public API".
> Remove duplicate init functions in TabletBalancer
> -------------------------------------------------
>
> Key: ACCUMULO-4549
> URL: https://issues.apache.org/jira/browse/ACCUMULO-4549
> Project: Accumulo
> Issue Type: Improvement
> Reporter: Adam J Shook
> Priority: Minor
> Fix For: 2.0.0
>
>
> There are two {{init}} functions with similar signatures in the {{TabletLoadBalancer}} class that could result in an end-user overriding the wrong function and their object may never be initialized.
> {{Master}} (1) calls the {{TabletBalancer#init(ServerConfigurationFactory)}} which is not what the regex load balancer is overriding (2), and the {{TabletBalancer}} doesn't call the other init function (3).
> Come up with a plan for compatibility and remove the duplicate functions.
> (1) https://github.com/apache/accumulo/blob/1.7/server/master/src/main/java/org/apache/accumulo/master/Master.java#L589
> (2) https://github.com/apache/accumulo/blob/1.7/server/base/src/main/java/org/apache/accumulo/server/master/balancer/HostRegexTableLoadBalancer.java#L257
> (3) https://github.com/apache/accumulo/blob/1.7/server/base/src/main/java/org/apache/accumulo/server/master/balancer/TabletBalancer.java#L57
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)