From 2e277233a01307d9c7b83c99d389577de64728f0 Mon Sep 17 00:00:00 2001 From: Reid Chan Date: Mon, 12 Feb 2018 17:28:50 +0800 Subject: [PATCH] HBASE-19844 Shell should support to flush by regionserver --- hbase-shell/src/main/ruby/hbase/admin.rb | 15 ++++++++++----- hbase-shell/src/main/ruby/shell/commands/flush.rb | 5 ++++- hbase-shell/src/test/ruby/hbase/admin_test.rb | 6 ++++++ 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/hbase-shell/src/main/ruby/hbase/admin.rb b/hbase-shell/src/main/ruby/hbase/admin.rb index 01021186b1..54b673d155 100644 --- a/hbase-shell/src/main/ruby/hbase/admin.rb +++ b/hbase-shell/src/main/ruby/hbase/admin.rb @@ -50,12 +50,17 @@ module Hbase end #---------------------------------------------------------------------------------------------- - # Requests a table or region flush - def flush(table_or_region_name) - @admin.flushRegion(table_or_region_name.to_java_bytes) - rescue java.lang.IllegalArgumentException => e + # Requests a table or region or region server flush + def flush(table_or_region_name_or_region_server_name) + @admin.flushRegion(table_or_region_name_or_region_server_name.to_java_bytes) + rescue java.lang.IllegalArgumentException # Unknown region. Try table. - @admin.flush(TableName.valueOf(table_or_region_name)) + begin + @admin.flush(TableName.valueOf(table_or_region_name_or_region_server_name)) + rescue java.lang.IllegalArgumentException + # Unknown table. Try region server. + @admin.flushRegionServer(ServerName.valueOf(table_or_region_name_or_region_server_name)) + end end #---------------------------------------------------------------------------------------------- diff --git a/hbase-shell/src/main/ruby/shell/commands/flush.rb b/hbase-shell/src/main/ruby/shell/commands/flush.rb index 4165b84e38..1f6b3105a1 100644 --- a/hbase-shell/src/main/ruby/shell/commands/flush.rb +++ b/hbase-shell/src/main/ruby/shell/commands/flush.rb @@ -23,11 +23,14 @@ module Shell def help <<-EOF Flush all regions in passed table or pass a region row to -flush an individual region. For example: +flush an individual region or a region server name whose format +is 'host,port,startcode', to flush all its regions. +For example: hbase> flush 'TABLENAME' hbase> flush 'REGIONNAME' hbase> flush 'ENCODED_REGIONNAME' + hbase> flush 'REGION_SERVER_NAME' EOF end diff --git a/hbase-shell/src/test/ruby/hbase/admin_test.rb b/hbase-shell/src/test/ruby/hbase/admin_test.rb index cbeb8b626f..b2d8602ba4 100644 --- a/hbase-shell/src/test/ruby/hbase/admin_test.rb +++ b/hbase-shell/src/test/ruby/hbase/admin_test.rb @@ -101,6 +101,12 @@ module Hbase define_test "flush should work" do command(:flush, 'hbase:meta') + status = @admin.getClusterStatus + assert_not_nil status + assert_not_nil status.getServers + for server in status.getServers + command(:flush, server) + end end #------------------------------------------------------------------------------- -- 2.15.0