You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by bu...@apache.org on 2018/04/06 18:17:39 UTC

[1/2] hbase git commit: HBASE-20276 restore original shell REPL functionality where commands can return results

Repository: hbase
Updated Branches:
  refs/heads/branch-1 2f683cd43 -> b9ca1cc15
  refs/heads/branch-1.4 382c5f079 -> cd9407d94


HBASE-20276 restore original shell REPL functionality where commands can return results

* makes commands always pass any results back to hirb
* print warning if hirb is given the --return-values flag
* add some docs on how to avoid the console clutter that HBASE-15965 sought to address
* add an upgrade section note about this change.
* cleanup where the get_splits command does its printing so there's a building block that doesn't print
* some rubocop suggested tweaks and opt-out for classlength check on table and shell classes.

Signed-off-by: Mike Drob <md...@apache.org>

 Conflicts:
	src/main/asciidoc/_chapters/upgrading.adoc

* backport leaves off refguide change about upgrading.

 Conflicts:
	hbase-shell/src/main/ruby/hbase/table.rb
	hbase-shell/src/main/ruby/shell/commands/get_splits.rb


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/b9ca1cc1
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/b9ca1cc1
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/b9ca1cc1

Branch: refs/heads/branch-1
Commit: b9ca1cc152620e035b8abf727ce59cb4cf45901f
Parents: 2f683cd
Author: Sean Busbey <bu...@apache.org>
Authored: Wed Apr 4 09:37:27 2018 -0500
Committer: Sean Busbey <bu...@apache.org>
Committed: Fri Apr 6 13:15:56 2018 -0500

----------------------------------------------------------------------
 bin/hirb.rb                                           |  8 +++-----
 hbase-shell/src/main/ruby/hbase/table.rb              | 12 ++++++++----
 hbase-shell/src/main/ruby/shell.rb                    | 14 ++++----------
 .../src/main/ruby/shell/commands/get_splits.rb        |  7 +++++--
 .../src/test/ruby/shell/noninteractive_test.rb        |  2 +-
 hbase-shell/src/test/ruby/test_helper.rb              |  2 +-
 src/main/asciidoc/_chapters/shell.adoc                |  8 ++++++++
 7 files changed, 30 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/b9ca1cc1/bin/hirb.rb
----------------------------------------------------------------------
diff --git a/bin/hirb.rb b/bin/hirb.rb
index 984cfe2..04097b4 100644
--- a/bin/hirb.rb
+++ b/bin/hirb.rb
@@ -59,15 +59,12 @@ Usage: shell [OPTIONS] [SCRIPTFILE [ARGUMENTS]]
  -n | --noninteractive          Do not run within an IRB session
                                 and exit with non-zero status on
                                 first error.
- -r | --return-values           Include return values from commands
-                                executed in the shell.
 HERE
 found = []
 script2run = nil
 log_level = org.apache.log4j.Level::ERROR
 @shell_debug = false
 interactive = true
-return_values = false
 for arg in ARGV
   if arg == '-h' || arg == '--help'
     puts cmdline_help
@@ -82,7 +79,8 @@ for arg in ARGV
     interactive = false
     found.push(arg)
   elsif arg == '-r' || arg == '--return-values'
-    return_values = true
+    warn '[INFO] the -r | --return-values option is ignored. we always behave '\
+         'as though it was given.'
     found.push(arg)
   else
     # Presume it a script. Save it off for running later below
@@ -118,7 +116,7 @@ require 'shell/formatter'
 @hbase = Hbase::Hbase.new
 
 # Setup console
-@shell = Shell::Shell.new(@hbase, interactive, return_values)
+@shell = Shell::Shell.new(@hbase, interactive)
 @shell.debug = @shell_debug
 
 # Add commands to this namespace

http://git-wip-us.apache.org/repos/asf/hbase/blob/b9ca1cc1/hbase-shell/src/main/ruby/hbase/table.rb
----------------------------------------------------------------------
diff --git a/hbase-shell/src/main/ruby/hbase/table.rb b/hbase-shell/src/main/ruby/hbase/table.rb
index 37e4d63..3e3fb8e 100644
--- a/hbase-shell/src/main/ruby/hbase/table.rb
+++ b/hbase-shell/src/main/ruby/hbase/table.rb
@@ -19,9 +19,12 @@
 
 include Java
 
+java_import org.apache.hadoop.hbase.util.Bytes
+
 # Wrapper for org.apache.hadoop.hbase.client.Table
 
 module Hbase
+  # rubocop:disable Metrics/ClassLength
   class Table
     include HBaseConstants
 
@@ -717,11 +720,12 @@ EOF
     # Get the split points for the table
     def _get_splits_internal()
       locator = @table.getRegionLocator()
-      splits = locator.getAllRegionLocations().
-          map{|i| Bytes.toStringBinary(i.getRegionInfo().getStartKey)}.delete_if{|k| k == ""}
+      locator.getAllRegionLocations()
+             .map { |i| Bytes.toStringBinary(i.getRegionInfo().getStartKey) }
+             .delete_if { |k| k == "" }
+    ensure
       locator.close()
-      puts("Total number of splits = %s" % [splits.size + 1])
-      return splits
     end
   end
+  # rubocop:enable Metrics/ClassLength
 end

http://git-wip-us.apache.org/repos/asf/hbase/blob/b9ca1cc1/hbase-shell/src/main/ruby/shell.rb
----------------------------------------------------------------------
diff --git a/hbase-shell/src/main/ruby/shell.rb b/hbase-shell/src/main/ruby/shell.rb
index 99ba768..a6b5b4f 100644
--- a/hbase-shell/src/main/ruby/shell.rb
+++ b/hbase-shell/src/main/ruby/shell.rb
@@ -68,22 +68,18 @@ module Shell
   end
 
   #----------------------------------------------------------------------
+  # rubocop:disable Metrics/ClassLength
   class Shell
     attr_accessor :hbase
     attr_accessor :interactive
-    attr_accessor :return_values
     alias interactive? interactive
-    alias return_values? return_values
 
     @debug = false
     attr_accessor :debug
 
-    def initialize(hbase, interactive = true, return_values = !interactive)
+    def initialize(hbase, interactive = true)
       self.hbase = hbase
       self.interactive = interactive
-      self.return_values = return_values
-      # If we're in non-interactive mode, force return_values
-      self.return_values = true unless self.interactive
     end
 
     def hbase_admin
@@ -139,11 +135,8 @@ module Shell
     end
 
     # call the method 'command' on the specified command
-    # If return_values is false, then we suppress the return value. The command
-    # should have printed relevant output.
     def command(command, *args)
-      ret = internal_command(command, :command, *args)
-      ret if return_values
+      internal_command(command, :command, *args)
     end
 
     # call a specific internal method in the command instance
@@ -244,6 +237,7 @@ For more on the HBase Shell, see http://hbase.apache.org/book.html
       HERE
     end
   end
+  # rubocop:enable Metrics/ClassLength
 end
 
 # Load commands base class

http://git-wip-us.apache.org/repos/asf/hbase/blob/b9ca1cc1/hbase-shell/src/main/ruby/shell/commands/get_splits.rb
----------------------------------------------------------------------
diff --git a/hbase-shell/src/main/ruby/shell/commands/get_splits.rb b/hbase-shell/src/main/ruby/shell/commands/get_splits.rb
index 8b6ae82..26be15f 100644
--- a/hbase-shell/src/main/ruby/shell/commands/get_splits.rb
+++ b/hbase-shell/src/main/ruby/shell/commands/get_splits.rb
@@ -37,10 +37,13 @@ EOF
       end
 
       def get_splits(table)
-        table._get_splits_internal()
+        splits = table._get_splits_internal()
+        puts(format('Total number of splits = %<numsplits>d',
+                    numsplits: (splits.size + 1)))
+        splits
       end
     end
   end
 end
 
-::Hbase::Table.add_shell_command("get_splits")
\ No newline at end of file
+::Hbase::Table.add_shell_command("get_splits")

http://git-wip-us.apache.org/repos/asf/hbase/blob/b9ca1cc1/hbase-shell/src/test/ruby/shell/noninteractive_test.rb
----------------------------------------------------------------------
diff --git a/hbase-shell/src/test/ruby/shell/noninteractive_test.rb b/hbase-shell/src/test/ruby/shell/noninteractive_test.rb
index 4fcdee2..65c0dad 100644
--- a/hbase-shell/src/test/ruby/shell/noninteractive_test.rb
+++ b/hbase-shell/src/test/ruby/shell/noninteractive_test.rb
@@ -20,7 +20,7 @@ require 'shell'
 class NonInteractiveTest < Test::Unit::TestCase
   def setup
     @hbase = ::Hbase::Hbase.new($TEST_CLUSTER.getConfiguration)
-    @shell = Shell::Shell.new(@hbase, false, true)
+    @shell = Shell::Shell.new(@hbase, false)
   end
 
   define_test "Shell::Shell noninteractive mode should throw" do

http://git-wip-us.apache.org/repos/asf/hbase/blob/b9ca1cc1/hbase-shell/src/test/ruby/test_helper.rb
----------------------------------------------------------------------
diff --git a/hbase-shell/src/test/ruby/test_helper.rb b/hbase-shell/src/test/ruby/test_helper.rb
index 8dca199..b4bec90 100644
--- a/hbase-shell/src/test/ruby/test_helper.rb
+++ b/hbase-shell/src/test/ruby/test_helper.rb
@@ -43,7 +43,7 @@ module Hbase
 
     def setup_hbase
       hbase = ::Hbase::Hbase.new($TEST_CLUSTER.getConfiguration)
-      @shell = ::Shell::Shell.new(hbase, interactive = false, return_values = true)
+      @shell = ::Shell::Shell.new(hbase, interactive = false)
     end
     
     def shutdown

http://git-wip-us.apache.org/repos/asf/hbase/blob/b9ca1cc1/src/main/asciidoc/_chapters/shell.adoc
----------------------------------------------------------------------
diff --git a/src/main/asciidoc/_chapters/shell.adoc b/src/main/asciidoc/_chapters/shell.adoc
index 237089e..000cb4e 100644
--- a/src/main/asciidoc/_chapters/shell.adoc
+++ b/src/main/asciidoc/_chapters/shell.adoc
@@ -318,6 +318,7 @@ hbase(main):017:0> tables.map { |t| disable t ; drop  t}
 hbase(main):018:0>
 ----
 
+[[irbrc]]
 === _irbrc_
 
 Create an _.irbrc_ file for yourself in your home directory.
@@ -331,6 +332,13 @@ IRB.conf[:SAVE_HISTORY] = 100
 IRB.conf[:HISTORY_FILE] = "#{ENV['HOME']}/.irb-save-history"
 ----
 
+If you'd like to avoid printing the result of evaluting each expression to stderr, for example the array of tables returned from the "list" command:
+
+[source,bash]
+----
+$ echo "IRB.conf[:ECHO] = false" >>~/.irbrc
+----
+
 See the `ruby` documentation of _.irbrc_ to learn about other possible configurations.
 
 === LOG data to timestamp


[2/2] hbase git commit: HBASE-20276 restore original shell REPL functionality where commands can return results

Posted by bu...@apache.org.
HBASE-20276 restore original shell REPL functionality where commands can return results

* makes commands always pass any results back to hirb
* print warning if hirb is given the --return-values flag
* add some docs on how to avoid the console clutter that HBASE-15965 sought to address
* add an upgrade section note about this change.
* cleanup where the get_splits command does its printing so there's a building block that doesn't print
* some rubocop suggested tweaks and opt-out for classlength check on table and shell classes.

Signed-off-by: Mike Drob <md...@apache.org>

 Conflicts:
	src/main/asciidoc/_chapters/upgrading.adoc

* backport leaves off refguide change about upgrading.

 Conflicts:
	hbase-shell/src/main/ruby/hbase/table.rb
	hbase-shell/src/main/ruby/shell/commands/get_splits.rb


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/cd9407d9
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/cd9407d9
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/cd9407d9

Branch: refs/heads/branch-1.4
Commit: cd9407d9488d474ad8b583b04f24ace54c642afc
Parents: 382c5f0
Author: Sean Busbey <bu...@apache.org>
Authored: Wed Apr 4 09:37:27 2018 -0500
Committer: Sean Busbey <bu...@apache.org>
Committed: Fri Apr 6 13:17:12 2018 -0500

----------------------------------------------------------------------
 bin/hirb.rb                                           |  8 +++-----
 hbase-shell/src/main/ruby/hbase/table.rb              | 12 ++++++++----
 hbase-shell/src/main/ruby/shell.rb                    | 14 ++++----------
 .../src/main/ruby/shell/commands/get_splits.rb        |  7 +++++--
 .../src/test/ruby/shell/noninteractive_test.rb        |  2 +-
 hbase-shell/src/test/ruby/test_helper.rb              |  2 +-
 src/main/asciidoc/_chapters/shell.adoc                |  8 ++++++++
 7 files changed, 30 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/cd9407d9/bin/hirb.rb
----------------------------------------------------------------------
diff --git a/bin/hirb.rb b/bin/hirb.rb
index 984cfe2..04097b4 100644
--- a/bin/hirb.rb
+++ b/bin/hirb.rb
@@ -59,15 +59,12 @@ Usage: shell [OPTIONS] [SCRIPTFILE [ARGUMENTS]]
  -n | --noninteractive          Do not run within an IRB session
                                 and exit with non-zero status on
                                 first error.
- -r | --return-values           Include return values from commands
-                                executed in the shell.
 HERE
 found = []
 script2run = nil
 log_level = org.apache.log4j.Level::ERROR
 @shell_debug = false
 interactive = true
-return_values = false
 for arg in ARGV
   if arg == '-h' || arg == '--help'
     puts cmdline_help
@@ -82,7 +79,8 @@ for arg in ARGV
     interactive = false
     found.push(arg)
   elsif arg == '-r' || arg == '--return-values'
-    return_values = true
+    warn '[INFO] the -r | --return-values option is ignored. we always behave '\
+         'as though it was given.'
     found.push(arg)
   else
     # Presume it a script. Save it off for running later below
@@ -118,7 +116,7 @@ require 'shell/formatter'
 @hbase = Hbase::Hbase.new
 
 # Setup console
-@shell = Shell::Shell.new(@hbase, interactive, return_values)
+@shell = Shell::Shell.new(@hbase, interactive)
 @shell.debug = @shell_debug
 
 # Add commands to this namespace

http://git-wip-us.apache.org/repos/asf/hbase/blob/cd9407d9/hbase-shell/src/main/ruby/hbase/table.rb
----------------------------------------------------------------------
diff --git a/hbase-shell/src/main/ruby/hbase/table.rb b/hbase-shell/src/main/ruby/hbase/table.rb
index 37e4d63..3e3fb8e 100644
--- a/hbase-shell/src/main/ruby/hbase/table.rb
+++ b/hbase-shell/src/main/ruby/hbase/table.rb
@@ -19,9 +19,12 @@
 
 include Java
 
+java_import org.apache.hadoop.hbase.util.Bytes
+
 # Wrapper for org.apache.hadoop.hbase.client.Table
 
 module Hbase
+  # rubocop:disable Metrics/ClassLength
   class Table
     include HBaseConstants
 
@@ -717,11 +720,12 @@ EOF
     # Get the split points for the table
     def _get_splits_internal()
       locator = @table.getRegionLocator()
-      splits = locator.getAllRegionLocations().
-          map{|i| Bytes.toStringBinary(i.getRegionInfo().getStartKey)}.delete_if{|k| k == ""}
+      locator.getAllRegionLocations()
+             .map { |i| Bytes.toStringBinary(i.getRegionInfo().getStartKey) }
+             .delete_if { |k| k == "" }
+    ensure
       locator.close()
-      puts("Total number of splits = %s" % [splits.size + 1])
-      return splits
     end
   end
+  # rubocop:enable Metrics/ClassLength
 end

http://git-wip-us.apache.org/repos/asf/hbase/blob/cd9407d9/hbase-shell/src/main/ruby/shell.rb
----------------------------------------------------------------------
diff --git a/hbase-shell/src/main/ruby/shell.rb b/hbase-shell/src/main/ruby/shell.rb
index 99ba768..a6b5b4f 100644
--- a/hbase-shell/src/main/ruby/shell.rb
+++ b/hbase-shell/src/main/ruby/shell.rb
@@ -68,22 +68,18 @@ module Shell
   end
 
   #----------------------------------------------------------------------
+  # rubocop:disable Metrics/ClassLength
   class Shell
     attr_accessor :hbase
     attr_accessor :interactive
-    attr_accessor :return_values
     alias interactive? interactive
-    alias return_values? return_values
 
     @debug = false
     attr_accessor :debug
 
-    def initialize(hbase, interactive = true, return_values = !interactive)
+    def initialize(hbase, interactive = true)
       self.hbase = hbase
       self.interactive = interactive
-      self.return_values = return_values
-      # If we're in non-interactive mode, force return_values
-      self.return_values = true unless self.interactive
     end
 
     def hbase_admin
@@ -139,11 +135,8 @@ module Shell
     end
 
     # call the method 'command' on the specified command
-    # If return_values is false, then we suppress the return value. The command
-    # should have printed relevant output.
     def command(command, *args)
-      ret = internal_command(command, :command, *args)
-      ret if return_values
+      internal_command(command, :command, *args)
     end
 
     # call a specific internal method in the command instance
@@ -244,6 +237,7 @@ For more on the HBase Shell, see http://hbase.apache.org/book.html
       HERE
     end
   end
+  # rubocop:enable Metrics/ClassLength
 end
 
 # Load commands base class

http://git-wip-us.apache.org/repos/asf/hbase/blob/cd9407d9/hbase-shell/src/main/ruby/shell/commands/get_splits.rb
----------------------------------------------------------------------
diff --git a/hbase-shell/src/main/ruby/shell/commands/get_splits.rb b/hbase-shell/src/main/ruby/shell/commands/get_splits.rb
index 8b6ae82..26be15f 100644
--- a/hbase-shell/src/main/ruby/shell/commands/get_splits.rb
+++ b/hbase-shell/src/main/ruby/shell/commands/get_splits.rb
@@ -37,10 +37,13 @@ EOF
       end
 
       def get_splits(table)
-        table._get_splits_internal()
+        splits = table._get_splits_internal()
+        puts(format('Total number of splits = %<numsplits>d',
+                    numsplits: (splits.size + 1)))
+        splits
       end
     end
   end
 end
 
-::Hbase::Table.add_shell_command("get_splits")
\ No newline at end of file
+::Hbase::Table.add_shell_command("get_splits")

http://git-wip-us.apache.org/repos/asf/hbase/blob/cd9407d9/hbase-shell/src/test/ruby/shell/noninteractive_test.rb
----------------------------------------------------------------------
diff --git a/hbase-shell/src/test/ruby/shell/noninteractive_test.rb b/hbase-shell/src/test/ruby/shell/noninteractive_test.rb
index 4fcdee2..65c0dad 100644
--- a/hbase-shell/src/test/ruby/shell/noninteractive_test.rb
+++ b/hbase-shell/src/test/ruby/shell/noninteractive_test.rb
@@ -20,7 +20,7 @@ require 'shell'
 class NonInteractiveTest < Test::Unit::TestCase
   def setup
     @hbase = ::Hbase::Hbase.new($TEST_CLUSTER.getConfiguration)
-    @shell = Shell::Shell.new(@hbase, false, true)
+    @shell = Shell::Shell.new(@hbase, false)
   end
 
   define_test "Shell::Shell noninteractive mode should throw" do

http://git-wip-us.apache.org/repos/asf/hbase/blob/cd9407d9/hbase-shell/src/test/ruby/test_helper.rb
----------------------------------------------------------------------
diff --git a/hbase-shell/src/test/ruby/test_helper.rb b/hbase-shell/src/test/ruby/test_helper.rb
index 8dca199..b4bec90 100644
--- a/hbase-shell/src/test/ruby/test_helper.rb
+++ b/hbase-shell/src/test/ruby/test_helper.rb
@@ -43,7 +43,7 @@ module Hbase
 
     def setup_hbase
       hbase = ::Hbase::Hbase.new($TEST_CLUSTER.getConfiguration)
-      @shell = ::Shell::Shell.new(hbase, interactive = false, return_values = true)
+      @shell = ::Shell::Shell.new(hbase, interactive = false)
     end
     
     def shutdown

http://git-wip-us.apache.org/repos/asf/hbase/blob/cd9407d9/src/main/asciidoc/_chapters/shell.adoc
----------------------------------------------------------------------
diff --git a/src/main/asciidoc/_chapters/shell.adoc b/src/main/asciidoc/_chapters/shell.adoc
index 237089e..000cb4e 100644
--- a/src/main/asciidoc/_chapters/shell.adoc
+++ b/src/main/asciidoc/_chapters/shell.adoc
@@ -318,6 +318,7 @@ hbase(main):017:0> tables.map { |t| disable t ; drop  t}
 hbase(main):018:0>
 ----
 
+[[irbrc]]
 === _irbrc_
 
 Create an _.irbrc_ file for yourself in your home directory.
@@ -331,6 +332,13 @@ IRB.conf[:SAVE_HISTORY] = 100
 IRB.conf[:HISTORY_FILE] = "#{ENV['HOME']}/.irb-save-history"
 ----
 
+If you'd like to avoid printing the result of evaluting each expression to stderr, for example the array of tables returned from the "list" command:
+
+[source,bash]
+----
+$ echo "IRB.conf[:ECHO] = false" >>~/.irbrc
+----
+
 See the `ruby` documentation of _.irbrc_ to learn about other possible configurations.
 
 === LOG data to timestamp