[ 
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)

Reply via email to