[
https://issues.apache.org/jira/browse/HBASE-7091?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jesse Yates resolved HBASE-7091.
--------------------------------
Resolution: Fixed
Committed to both 0.94 and 0.96
> support custom GC options in hbase-env.sh
> -----------------------------------------
>
> Key: HBASE-7091
> URL: https://issues.apache.org/jira/browse/HBASE-7091
> Project: HBase
> Issue Type: Bug
> Components: scripts
> Affects Versions: 0.94.4
> Reporter: Jesse Yates
> Assignee: Jesse Yates
> Labels: newbie
> Fix For: 0.96.0, 0.94.4
>
> Attachments: hbase-7091-v1.patch
>
>
> When running things like bin/start-hbase and bin/hbase-daemon.sh start
> [master|regionserver|etc] we end up setting HBASE_OPTS property a couple
> times via calling hbase-env.sh. This is generally not a problem for most
> cases, but when you want to set your own GC log properties, one would think
> you should set HBASE_GC_OPTS, which get added to HBASE_OPTS.
> NOPE! That would make too much sense.
> Running bin/hbase-daemons.sh will run bin/hbase-daemon.sh with the daemons it
> needs to start. Each time through hbase-daemon.sh we also call bin/hbase.
> This isn't a big deal except for each call to hbase-daemon.sh, we also source
> hbase-env.sh twice (once in the script and once in bin/hbase). This is
> important for my next point.
> Note that to turn on GC logging, you uncomment:
> {code}
> # export HBASE_OPTS="$HBASE_OPTS -verbose:gc -XX:+PrintGCDetails
> -XX:+PrintGCDateStamps $HBASE_GC_OPTS"
> {code}
> and then to log to a gc file for each server, you then uncomment:
> {code}
> # export HBASE_USE_GC_LOGFILE=true
> {code}
> in hbase-env.sh
> On the first pass through hbase-daemon.sh, HBASE_GC_OPTS isn't set, so
> HBASE_OPTS doesn't get anything funky, but we set HBASE_USE_GC_LOGFILE, which
> then sets HBASE_GC_OPTS to the log file (-Xloggc:...). Then in bin/hbase we
> again run hbase-env.sh, which now hs HBASE_GC_OPTS set, adding the GC file.
> This isn't a general problem because HBASE_OPTS is set without prefixing the
> existing HBASE_OPTS (eg. HBASE_OPTS="$HBASE_OPTS ..."), allowing easy
> updating. However, GC OPTS don't work the same and this is really odd
> behavior when you want to set your own GC opts, which can include turning on
> GC log rolling (yes, yes, they really are jvm opts, but they ought to support
> their own param, to help minimize clutter).
> The simple version of this patch will just add an idempotent GC option to
> hbase-env.sh and some comments that uncommenting
> {code}
> # export HBASE_USE_GC_LOGFILE=true
> {code}
> will lead to a custom gc log file per server (along with an example name), so
> you don't need to set "-Xloggc".
> The more complex solution does the above and also solves the multiple calls
> to hbase-env.sh so we can be sane about how all this works. Note that to fix
> this, hbase-daemon.sh just needs to read in HBASE_USE_GC_LOGFILE after
> sourcing hbase-env.sh and then update HBASE_OPTS. Oh and also not source
> hbase-env.sh in bin/hbase.
> Even further, we might want to consider adding options just for cases where
> we don't need gc logging - i.e. the shell, the config reading tool, hcbk,
> etc. This is the hardest version to handle since the first couple will
> willy-nilly apply the gc options.
--
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