[ 
https://issues.apache.org/jira/browse/HBASE-5209?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13209146#comment-13209146
 ] 

jirapos...@reviews.apache.org commented on HBASE-5209:
------------------------------------------------------


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/3892/
-----------------------------------------------------------

(Updated 2012-02-16 06:30:31.996701)


Review request for hbase.


Changes
-------

Addressed Stack's comments:

Bumped version and compatibility handling for new client - old server.  Changed 
Set to List for backupMasters in HMaster.

Note that old clients get an error when running against new servers, because 
the old readFields() code in ClusterStatus does not handle exceptions of any 
kind.  This is not solvable, at least in the scope of this change.

12/02/15 15:15:38 INFO zookeeper.ClientCnxn: Session establishment complete on 
server haus02.sf.cloudera.com/172.29.5.33:30181, sessionid = 0x135834c75e20008, 
negotiated timeout = 5000
12/02/15 15:15:39 ERROR io.HbaseObjectWritable: Error in readFields
A record version mismatch occured. Expecting v2, found v3
        at 
org.apache.hadoop.io.VersionedWritable.readFields(VersionedWritable.java:46)
        at 
org.apache.hadoop.hbase.ClusterStatus.readFields(ClusterStatus.java:247)
        at 
org.apache.hadoop.hbase.io.HbaseObjectWritable.readObject(HbaseObjectWritable.java:583)
        at 
org.apache.hadoop.hbase.io.HbaseObjectWritable.readFields(HbaseObjectWritable.java:297)


Summary
-------

Problem:
There is no method in the HBase client-facing APIs to determine which of the 
masters is currently active.  This can be especially useful in setups with 
multiple backup masters.

Solution:
Augment ClusterStatus to return the currently active master and the list of 
backup masters.

Notes:
* I uncovered a race condition in ActiveMasterManager, between when it 
determines that it did not win the original race to be the active master, and 
when it reads the ServerName of the active master.  If the active master goes 
down in that time, the read to determine the active master's ServerName will 
fail ungracefully and the candidate master will abort.  The solution 
incorporated in this patch is to check to see if the read of the ServerName 
succeeded before trying to use it.
* I fixed some minor formatting issues while going through the code.  I can 
take these changes out if it is considered improper to commit such non-related 
changes with the main changes.


This addresses bug HBASE-5209.
    https://issues.apache.org/jira/browse/HBASE-5209


Diffs (updated)
-----

  src/main/java/org/apache/hadoop/hbase/ClusterStatus.java b849429 
  src/main/java/org/apache/hadoop/hbase/master/ActiveMasterManager.java 2f60b23 
  src/main/java/org/apache/hadoop/hbase/master/HMaster.java 9d21903 
  src/main/java/org/apache/hadoop/hbase/util/HBaseFsck.java f6f3f71 
  src/main/java/org/apache/hadoop/hbase/zookeeper/ZKUtil.java 111f76e 
  src/main/java/org/apache/hadoop/hbase/zookeeper/ZooKeeperWatcher.java 3e3d131 
  src/test/java/org/apache/hadoop/hbase/master/TestActiveMasterManager.java 
16e4744 
  src/test/java/org/apache/hadoop/hbase/master/TestMasterFailover.java bc98fb0 

Diff: https://reviews.apache.org/r/3892/diff


Testing (updated)
-------

* Ran mvn -P localTests test multiple times - no new tests fail
* Ran mvn -P localTests -Dtest=TestActiveMasterManager test multiple runs - no 
failures
* Ran mvn -P localTests -Dtest=TestMasterFailover test multiple runs - no 
failures
* Started active and multiple backup masters, then killed active master, then 
brought it back up (will now be a backup master)
  * Did the following before and after killing
    * hbase hbck -details - checked output to see that active and backup 
masters are reported properly
    * zk_dump - checked that active and backup masters are reported properly
* Started cluster with no backup masters to make sure change operates correctly 
that way
* Tested build with this diff vs. build without this diff, in all combinations 
of client and server
  * Verified that new client can run against old servers without incident and 
with the defaults applied.
  * Note that old clients get an error when running against new servers, 
because the old readFields() code in ClusterStatus does not handle exceptions 
of any kind.  This is not solvable, at least in the scope of this change.

12/02/15 15:15:38 INFO zookeeper.ClientCnxn: Session establishment complete on 
server haus02.sf.cloudera.com/172.29.5.33:30181, sessionid = 0x135834c75e20008, 
negotiated timeout = 5000
12/02/15 15:15:39 ERROR io.HbaseObjectWritable: Error in readFields
A record version mismatch occured. Expecting v2, found v3
        at 
org.apache.hadoop.io.VersionedWritable.readFields(VersionedWritable.java:46)
        at 
org.apache.hadoop.hbase.ClusterStatus.readFields(ClusterStatus.java:247)
        at 
org.apache.hadoop.hbase.io.HbaseObjectWritable.readObject(HbaseObjectWritable.java:583)
        at 
org.apache.hadoop.hbase.io.HbaseObjectWritable.readFields(HbaseObjectWritable.java:297)

* Ran dev-support/test-patch.sh - no new issues fail:

-1 overall.

    +1 @author.  The patch does not contain any @author tags.

    +1 tests included.  The patch appears to include 7 new or modified tests.

    -1 javadoc.  The javadoc tool appears to have generated -136 warning 
messages.  

    +1 javac.  The applied patch does not increase the total number of javac 
compiler warnings.

    +1 findbugs.  The patch does not introduce any new Findbugs (version ) 
warnings.

    +1 release audit.  The applied patch does not increase the total number of 
release audit warnings.


Thanks,

David


                
> HConnection/HMasterInterface should allow for way to get hostname of 
> currently active master in multi-master HBase setup
> ------------------------------------------------------------------------------------------------------------------------
>
>                 Key: HBASE-5209
>                 URL: https://issues.apache.org/jira/browse/HBASE-5209
>             Project: HBase
>          Issue Type: Improvement
>          Components: master
>    Affects Versions: 0.94.0, 0.90.5, 0.92.0
>            Reporter: Aditya Acharya
>            Assignee: David S. Wang
>             Fix For: 0.94.0, 0.90.7, 0.92.1
>
>         Attachments: HBASE-5209-v0.diff, HBASE-5209-v1.diff
>
>
> I have a multi-master HBase set up, and I'm trying to programmatically 
> determine which of the masters is currently active. But the API does not 
> allow me to do this. There is a getMaster() method in the HConnection class, 
> but it returns an HMasterInterface, whose methods do not allow me to find out 
> which master won the last race. The API should have a 
> getActiveMasterHostname() or something to that effect.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to