hbase-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From te...@apache.org
Subject hbase git commit: HBASE-18129 truncate_preserve fails when the truncate method doesn't exist on the master
Date Wed, 31 May 2017 09:33:04 GMT
Repository: hbase
Updated Branches:
  refs/heads/branch-1 e670be690 -> 50b201668


HBASE-18129 truncate_preserve fails when the truncate method doesn't exist on the master

Signed-off-by: tedyu <yuzhihong@gmail.com>


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

Branch: refs/heads/branch-1
Commit: 50b201668b571b05e82d40d36949d1ba6c57717b
Parents: e670be6
Author: Guangxu Cheng <guangxucheng@gmail.com>
Authored: Wed May 31 12:51:31 2017 +0800
Committer: tedyu <yuzhihong@gmail.com>
Committed: Wed May 31 02:32:57 2017 -0700

----------------------------------------------------------------------
 hbase-shell/src/main/ruby/hbase/admin.rb      | 17 ++++++++++++++++-
 hbase-shell/src/test/ruby/hbase/admin_test.rb | 17 +++++++++++++++++
 2 files changed, 33 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/50b20166/hbase-shell/src/main/ruby/hbase/admin.rb
----------------------------------------------------------------------
diff --git a/hbase-shell/src/main/ruby/hbase/admin.rb b/hbase-shell/src/main/ruby/hbase/admin.rb
index 41f53dc..c71d641 100644
--- a/hbase-shell/src/main/ruby/hbase/admin.rb
+++ b/hbase-shell/src/main/ruby/hbase/admin.rb
@@ -36,6 +36,7 @@ module Hbase
       @connection = connection
       # Java Admin instance
       @admin = @connection.getAdmin
+      @conf = connection.getConfiguration
     end
 
     def close
@@ -482,8 +483,9 @@ module Hbase
       locator = @connection.getRegionLocator(TableName.valueOf(table_name))
       begin
         splits = locator.getAllRegionLocations().
-            map{|i| Bytes.toString(i.getRegionInfo().getStartKey)}.
+            map{|i| Bytes.toStringBinary(i.getRegionInfo().getStartKey)}.
             delete_if{|k| k == ""}.to_java :String
+        splits = org.apache.hadoop.hbase.util.Bytes.toBinaryByteArrays(splits)
       ensure
         locator.close()
       end
@@ -494,6 +496,10 @@ module Hbase
 
       begin
         yield 'Truncating table...' if block_given?
+        #just for test
+        unless conf.getBoolean("hbase.client.truncatetable.support", true)
+          raise UnsupportedMethodException.new('truncateTable')
+        end
         @admin.truncateTable(org.apache.hadoop.hbase.TableName.valueOf(table_name), true)
       rescue => e
         # Handle the compatibility case, where the truncate method doesn't exists on the
Master
@@ -512,6 +518,15 @@ module Hbase
       end
     end
 
+    class UnsupportedMethodException < StandardError
+      def initialize(name)
+        @method_name = name
+      end
+      def cause
+        return org.apache.hadoop.hbase.DoNotRetryIOException.new("#@method_name is not support")
+      end
+    end
+
     #----------------------------------------------------------------------------------------------
     # Check the status of alter command (number of regions reopened)
     def alter_status(table_name)

http://git-wip-us.apache.org/repos/asf/hbase/blob/50b20166/hbase-shell/src/test/ruby/hbase/admin_test.rb
----------------------------------------------------------------------
diff --git a/hbase-shell/src/test/ruby/hbase/admin_test.rb b/hbase-shell/src/test/ruby/hbase/admin_test.rb
index e53c6be..172aad3 100644
--- a/hbase-shell/src/test/ruby/hbase/admin_test.rb
+++ b/hbase-shell/src/test/ruby/hbase/admin_test.rb
@@ -271,6 +271,23 @@ module Hbase
       end
       assert(!logs.empty?)
     end
+
+    define_test "truncate_preserve should maintain the previous region boundaries" do
+      drop_test_table(@create_test_name)
+      admin.create(@create_test_name, 'a', {NUMREGIONS => 10, SPLITALGO => 'HexStringSplit'})
+      splits = table(@create_test_name)._get_splits_internal()
+      admin.truncate_preserve(@create_test_name)
+      assert_equal(splits, table(@create_test_name)._get_splits_internal())
+    end
+
+    define_test "truncate_preserve should be fine when truncateTable method doesn't support"
do
+      drop_test_table(@create_test_name)
+      admin.create(@create_test_name, 'a', {NUMREGIONS => 10, SPLITALGO => 'HexStringSplit'})
+      splits = table(@create_test_name)._get_splits_internal()
+      $TEST_CLUSTER.getConfiguration.setBoolean("hbase.client.truncatetable.support", false)
+      admin.truncate_preserve(@create_test_name, $TEST_CLUSTER.getConfiguration)
+      assert_equal(splits, table(@create_test_name)._get_splits_internal())
+    end
   end
 
  # Simple administration methods tests


Mime
View raw message