[
https://issues.apache.org/jira/browse/HBASE-7817?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Vasu Mariyala updated HBASE-7817:
---------------------------------
Attachment: HBASE-7817.patch
Background of the issue:
Initializing the common configuration and setting up the environment variables
is done by hbase-config.sh. This file in turn sources hbase-env.sh to set up
the environment variables. For few environment variables which contain multiple
configurations, new content is appended to the existing content.
Example:
export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS $HBASE_JMX_BASE
-Dcom.sun.management.jmxremote.port=10101"
export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -Xdebug
-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8070"
Since most of the scripts like hbase-daemons.sh, hbase-daemon.sh can be run
independently by the users, all of these scripts source the hbase-config.sh. As
a result, hbase-config.sh and there by hbase-env.sh are invoked multiple times
in a flow. Due to this, few environment variables like HBASE_MASTER_OPTS
contain duplicate data. In the scenarios like the jdwp debug options, the
duplicate content would not let hbase start successfully.
In addition to the above, there is a cyclic dependency between hbase-env.sh and
hbase-daemon.sh
a) HBase-env.sh can export HBASE_USE_GC_LOGFILE
export HBASE_USE_GC_LOGFILE=true
b) HBase-Daemon.sh sets HBASE_GC_OPTS
if [ "$HBASE_USE_GC_LOGFILE" = "true" ]; then
export HBASE_GC_OPTS=" -Xloggc:${loggc}"
fi
c) Back in HBase-env.sh, we have the SERVER_GC_OPTS and CLIENT_GC_OPTS depend
on the HBASE_GC_OPTS set in HBase-daemon.sh as below
export SERVER_GC_OPTS="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps
$HBASE_GC_OPTS"
export CLIENT_GC_OPTS="-verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps
$HBASE_GC_OPTS"
The patch fixes the issue mentioned in this jia and also removes the cyclic
dependency between these scripts.
> Suggested JDWP debug options in hbase-env.sh are wrong
> ------------------------------------------------------
>
> Key: HBASE-7817
> URL: https://issues.apache.org/jira/browse/HBASE-7817
> Project: HBase
> Issue Type: Bug
> Reporter: Ian Varley
> Priority: Minor
> Fix For: 0.95.0, 0.98.0, 0.94.7
>
> Attachments: HBASE-7817.patch
>
>
> In the default hbase-env.sh in trunk, there's a section for lines you can
> uncomment to enable JDWP remote debugging:
> {code:none}
> # Enable remote JDWP debugging of major HBase processes. Meant for Core
> Developers
> # export HBASE_MASTER_OPTS=" -Xdebug
> -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8070"
> # export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -Xdebug
> -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8071"
> # export HBASE_THRIFT_OPTS="$HBASE_THRIFT_OPTS -Xdebug
> -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8072"
> # export HBASE_ZOOKEEPER_OPTS="$HBASE_ZOOKEEPER_OPTS -Xdebug
> -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8073"
> {code}
> However, this is wrong (at least, if you're starting from local source),
> because somewhere in the chain of start-hbase.sh, it sources hbase-env.sh
> more than once, which has the effect of including these options twice, which
> makes the JVM barf on startup, saying
> "ERROR: Cannot load this JVM TI agent twice, check your java command line for
> duplicate jdwp options. Error occurred during initialization of VM; agent
> library failed to init: jdwp".
> Removing the first re-included instance of $HBASE_MASTER_OPTS (etc.) solves
> the problem. This should either be changed in the default or these scripts
> shouldn't source hbase-env.sh multiple times I think.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira