[
https://issues.apache.org/jira/browse/HBASE-15835?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15338882#comment-15338882
]
Daniel Vimont commented on HBASE-15835:
---------------------------------------
Yes, the relation between the archetypes and this issue is NOT obvious -- only
became apparent to me after a number of weeks of working with archetypes.
Ultimately, I took the complete beginner's point of view, imagining them (a)
installing and starting up a local standalone version of HBase 1.3, then (b)
running {{mvn archetype:generate}} to automatically generate a new Maven
project for them (which is populated with fully-functioning sample code to run
against HBase AND sample test code which runs via an instance of
HBaseTestingUtility), and then (c) opening the project in their IDE and running
"clean install". At this point, the test phase of the Maven "clean install"
process goes kerblooey, giving our HBase beginner the mysterious-to-them
RuntimeException saying "HMasterAddress already in use", referring explicitly
to the default master info port (16010).
"Oh no, what did I do wrong?", our poor beginner asks. Hopefully, they will go
to the new section of the Reference Guide on using Maven Archetypes, in which I
will have put a note to tell them that they have to modify the code which
instantiates their HBaseTestingUtility instance, so as to set the two ports in
question to "-1".
> HBaseTestingUtility#startMiniCluster throws "HMasterAddress already in use"
> RuntimeException when a local instance of HBase is running
> --------------------------------------------------------------------------------------------------------------------------------------
>
> Key: HBASE-15835
> URL: https://issues.apache.org/jira/browse/HBASE-15835
> Project: HBase
> Issue Type: Bug
> Components: API
> Affects Versions: 2.0.0
> Reporter: Daniel Vimont
> Assignee: Daniel Vimont
> Labels: easyfix
> Fix For: 2.0.0, 1.4.0, 1.3.1
>
> Attachments: HBASE-15835-v1.patch, HBASE-15835-v2.patch,
> HBASE-15835-v3.patch
>
>
> When a MiniCluster is being started with the
> {{HBaseTestUtility#startMiniCluster}} method (most typically in the context
> of JUnit testing), if a local HBase instance is already running (or for that
> matter, another thread with another MiniCluster is already running), the
> startup will fail with a RuntimeException saying "HMasterAddress already in
> use", referring explicitly to contention for the same default master info
> port (16010).
> This problem most recently came up in conjunction with HBASE-14876 and its
> sub-JIRAs (development of new HBase-oriented Maven archetypes), but this is
> apparently a known issue to veteran developers, who tend to set up the
> @BeforeClass sections of their test modules with code similar to the
> following:
> {code}
> UTIL = HBaseTestingUtility.createLocalHTU();
> // disable UI's on test cluster.
> UTIL.getConfiguration().setInt("hbase.master.info.port", -1);
> UTIL.getConfiguration().setInt("hbase.regionserver.info.port", -1);
> UTIL.startMiniCluster();
> {code}
> A comprehensive solution modeled on this should be put directly into
> HBaseTestUtility's main constructor, using one of the following options:
> OPTION 1 (always force random port assignment):
> {code}
> this.getConfiguration().setInt(HConstants.MASTER_INFO_PORT, -1);
> this.getConfiguration().setInt(HConstants.REGIONSERVER_PORT, -1);
> {code}
> OPTION 2 (always force random port assignment if user has not explicitly
> defined alternate port):
> {code}
> Configuration conf = this.getConfiguration();
> if (conf.getInt(HConstants.MASTER_INFO_PORT,
> HConstants.DEFAULT_MASTER_INFOPORT)
> == HConstants.DEFAULT_MASTER_INFOPORT) {
> conf.setInt(HConstants.MASTER_INFO_PORT, -1);
> }
> if (conf.getInt(HConstants.REGIONSERVER_PORT,
> HConstants.DEFAULT_REGIONSERVER_PORT)
> == HConstants.DEFAULT_REGIONSERVER_PORT) {
> conf.setInt(HConstants.REGIONSERVER_PORT, -1);
> }
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)