Bug: graceful_stop cannot take previous balancer status by incompatibility of hbase shell prompt
Status: Open | Priority: Major | Resolution: 
Created: 03/Jun/22 11:01
Affects Version/s: 2.4.10

{code:java}
graceful_stop.sh --failfast $(hostname -f)
2022-06-03T20:04:34 Set failfast, will exit immediately if any command exits with non-zero status
2022-06-03T20:04:34 Disabling load balancer
2022-06-03T20:04:42 Previous balancer state was hbase:002:0>
2022-06-03T20:04:42 Unloading myregionserver.example.com region(s)
2022-06-03T20:04:46 Unloaded myregionserver.example.com region(s)
2022-06-03T20:04:46 Stopping regionserver on myregionserver.example.com
running regionserver, logging to /var/log/hbase/hbase-hbase-regionserver.out
stopping regionserver.
2022-06-03T20:04:47 Restoring balancer state to hbase:002:0>
{code}

You can see wrong previous balancer state

{code:java}
2022-06-03T20:04:42 Previous balancer state was hbase:002:0>
{code}

this should be either of true or false, but it's "hbase:002:0>"

This is because of the incompatibility of hbase shell prompt behavior.

graceful_stop perform `echo 'balance_switch false' | "$bin"/hbase --config "${HBASE_CONF_DIR}" shell -n | tail -1`
https://github.com/apache/hbase/blob/d57159f31cb7be4d9ced0d7b95e2c78c43d160a1/bin/graceful_stop.sh#L118

However, hbase shell now always set prompt mode to CUSTOM.
https://github.com/apache/hbase/blob/d57159f31cb7be4d9ced0d7b95e2c78c43d160a1/hbase-shell/src/main/ruby/jar-bootstrap.rb#L206

(this breaking change is introduced in https://github.com/apache/hbase/pull/4018 in hbase2.4.10, https://issues.apache.org/jira/browse/HBASE-26469)

So the prompt is always shown even when `hbase shell -n` or just piping stdin.

{code:java}
$ echo "balance_switch false" | hbase shell
HBase Shell
Use "help" to get list of supported commands.
Use "exit" to quit this interactive shell.
For Reference, please visit: http://hbase.apache.org/2.0/book.html#shell
Version 2.4.12-xxx
Took 0.0022 seconds                                                                                                                                                         
hbase:001:0> balance_switch false
Previous balancer state : false                                                                                                                                             
Took 0.4308 seconds                                                                                                                                                         
=> false
hbase:002:0> 

$ echo "balance_switch false" | hbase shell -n
hbase:001:0> balance_switch false
Previous balancer state : false                                                                                                                                             
Took 0.5207 seconds                                                                                                                                                         
=> false
hbase:002:0> 
{code}

This is incompatible from old version.

{code:java}
hbase 1.4.x version:

$ echo "balance_switch false" | hbase shell
HBase Shell
Use "help" to get list of supported commands.
Use "exit" to quit this interactive shell.
Version 1.4.13-xxx

balance_switch false
false                                                                                                                                                                                                                                                                                                                                                       
0 row(s) in 0.3310 seconds

$ echo "balance_switch false" | hbase shell -n
false                                                                                                                                                                                                                                                                                                                                                       
0 row(s) in 0.4240 seconds

nil
{code}


{code:java}
hbase-2.4.9

$ echo "balance_switch false" | bin/hbase shell -n
Previous balancer state : false                                                                                                                                                                                                                                                                                                                             
Took 0.4340 seconds                                                                                                                                                                                                                                                                                                                                         
false

{code}

(TODO check old hbase-2 case)

In old version, :NULL is used for prompt_mode
{code:java}
$ echo "irb_context.prompt_mode" | hbase shell
HBase Shell
Use "help" to get list of supported commands.
Use "exit" to quit this interactive shell.
Version 1.4.13-xxx

irb_context.prompt_mode
:NULL
{code}

But it's now :CUSTOM

{code:java}
$ echo "irb_context.prompt_mode" | hbase shell
HBase Shell
Use "help" to get list of supported commands.
Use "exit" to quit this interactive shell.
For Reference, please visit: http://hbase.apache.org/2.0/book.html#shell
Version 2.4.12-xxx
Took 0.0028 seconds                                                                                                                                                         
hbase:001:0> irb_context.prompt_mode
=> :CUSTOM
hbase:002:0> 
{code}

We should keep using NULL prompt_mode for such case respecting previous behavior?