Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
0.90.1, 0.90.2, 0.90.3
-
None
-
Reviewed
Description
When a RS has uppercase letter in its hostname, e.g. Harpertown08-15.sh.intel.com. Then, there will be two RS entries in master report, they are
harpertown08-15.sh.intel.com
Harpertown08-15.sh.intel.com
This leads to wrong region allocation.
This problem is caused by the implementation of java.net.InetSocketAddress.
The logic is:
1. RS Harpertown08-15.sh.intel.com sends its DNS resolved hostname harpertown08-15.sh.intel.com to master for registration in HRegionServer.reportForDuty().
2. Master handles it and returns harpertown08-15.sh.intel.com via HServerAddress object to RS to notify it this new name (actually the same as the one reported by RS).
3. HServerAddress deserialize this object by first read out hostname as string ("harpertown08-15.sh.intel.com") and construct a InetSocketAddress object.
4. RS get the new name by call this InetSocketAddress.getHostName() method which returns Harpertown08-15.sh.intel.com instead.
5. In latter hearbeat communication (HRegionServer.tryRegionServerReport()), RS uses this new name (Harpertown08-15.sh.intel.com) to report to master and master regard it as a new RS. Thus, two RS entries exist.