[
https://issues.apache.org/jira/browse/HBASE-16377?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15414243#comment-15414243
]
Josh Elser commented on HBASE-16377:
------------------------------------
Ruby strings do {{==}} and {{eql?}} as value checks. Might it not be better to
make sure {{getServerNameForRegion}} always returns a Ruby string? It seems
like the meta region path might not (but I'm not sure how that works with
JRuby), while the other branch of {{getServerNameForRegion}} does return a Ruby
string:
Maybe make a change...
{code}
def getServerNameForRegion(admin, r)
return nil unless admin.isTableEnabled(r.getTableName)
if r.isMetaRegion()
# Hack
zkw =
org.apache.hadoop.hbase.zookeeper.ZooKeeperWatcher.new(admin.getConfiguration(),
"region_mover", nil)
mtl = org.apache.hadoop.hbase.zookeeper.MetaTableLocator.new()
begin
while not mtl.isLocationAvailable(zkw)
sleep 0.1
end
# Make a fake servername by appending ','
metaServer = (mtl.getMetaRegionLocation(zkw).toString() + ",").to_s
return metaServer
ensure
zkw.close()
end
end
{code}
I need to test this out some more, but the extra {{.to_s}} cal you added to
{{currentServer}} seems unnecessary to me.
It appears that {{servername}} in this method is a {{ServerName}} so calling
{{to_s}} on that object does make sense (as the {{ServerName}} instance of
passed along to the {{move}} method).
> ServerName check is ineffective in region_mover.rb
> --------------------------------------------------
>
> Key: HBASE-16377
> URL: https://issues.apache.org/jira/browse/HBASE-16377
> Project: HBase
> Issue Type: Bug
> Affects Versions: 1.1.2
> Reporter: Ted Yu
> Assignee: Ted Yu
> Attachments: 16377.branch-1.v1.txt
>
>
> The following was observed during test of region_mover.rb :
> {code}
> 2016-08-08
> 11:17:05,341|beaver.machine|INFO|352|139926954637120|MainThread|2016-08-08
> 11:17:05,340 INFO [RubyThread-9: hbase-client/bin/thread-pool.rb:28]
> region_mover: Moving region hbase:meta,,1.1588230740 (1 of 14) from
> xyz.openstacklocal,16020,1470654716593, to
> server=xyz.openstacklocal,16020,1470654716593
> {code}
> There is check that target server should not be the same as current server:
> {code}
> if currentServer and currentServer == servername
> $LOG.info("Region " + r.getRegionNameAsString() + " (" + counter.to_s +
> " of " + regions.length.to_s + ") already on target server=" +
> servername)
> counter = counter + 1
> next
> end
> {code}
> However, the check is not effective.
> See comparison between object1 and object3:
> http://www.skorks.com/2009/09/ruby-equality-and-object-comparison/
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)