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

Reply via email to