From e0c3fca90987946704bc1def15255400dd3a5212 Mon Sep 17 00:00:00 2001 From: xicm Date: Fri, 11 Mar 2022 15:42:56 +0800 Subject: [PATCH 1/2] HBASE-26275, ROWPREFIXFILTER doesn't work when execute deleteall with table hbase:meta --- hbase-shell/src/main/ruby/hbase/table.rb | 2 +- hbase-shell/src/test/ruby/hbase/table_test.rb | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/hbase-shell/src/main/ruby/hbase/table.rb b/hbase-shell/src/main/ruby/hbase/table.rb index 68d7349c00ae..502cefccd89c 100644 --- a/hbase-shell/src/main/ruby/hbase/table.rb +++ b/hbase-shell/src/main/ruby/hbase/table.rb @@ -243,7 +243,7 @@ def _deleteall_internal(row, column = nil, args = {}, all_version = true) # delete operation doesn't need read permission. Retaining the read check for # meta table as a part of HBASE-5837. - if is_meta_table? + if is_meta_table? and !(row.is_a?(Hash) and row.key?('ROWPREFIXFILTER')) raise ArgumentError, 'Row Not Found' if _get_internal(row).nil? end if row.is_a?(Hash) diff --git a/hbase-shell/src/test/ruby/hbase/table_test.rb b/hbase-shell/src/test/ruby/hbase/table_test.rb index ee6f0f58967b..f9aad162576c 100644 --- a/hbase-shell/src/test/ruby/hbase/table_test.rb +++ b/hbase-shell/src/test/ruby/hbase/table_test.rb @@ -194,6 +194,17 @@ def teardown assert_nil(res2) end + define_test "deleteall should work with row prefix in hbase:meta" do + @meta_table = table('hbase:meta') + @meta_table.put("test_meta_1", "table:state", "\x08\x01") + @meta_table.put("test_meta_2", "table:state", "\x08\x01") + @meta_table.deleteall({ROWPREFIXFILTER => "test_meta"}) + res1 = @test_table._get_internal('test_meta_1') + assert_nil(res1) + res2 = @test_table._get_internal('test_meta_2') + assert_nil(res2) + end + define_test "append should work with value" do @test_table.append("123", 'x:cnt2', '123') assert_equal("123123", @test_table._append_internal("123", 'x:cnt2', '123')) From 9479ab695f3b85540f7b658b34a17d53857dc161 Mon Sep 17 00:00:00 2001 From: xicm Date: Wed, 16 Mar 2022 14:40:53 +0800 Subject: [PATCH 2/2] HBASE-26275, update error message of deleteall --- hbase-shell/src/main/ruby/hbase/table.rb | 8 ++++++-- hbase-shell/src/test/ruby/hbase/table_test.rb | 14 +++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/hbase-shell/src/main/ruby/hbase/table.rb b/hbase-shell/src/main/ruby/hbase/table.rb index 502cefccd89c..dae1e106f507 100644 --- a/hbase-shell/src/main/ruby/hbase/table.rb +++ b/hbase-shell/src/main/ruby/hbase/table.rb @@ -243,8 +243,12 @@ def _deleteall_internal(row, column = nil, args = {}, all_version = true) # delete operation doesn't need read permission. Retaining the read check for # meta table as a part of HBASE-5837. - if is_meta_table? and !(row.is_a?(Hash) and row.key?('ROWPREFIXFILTER')) - raise ArgumentError, 'Row Not Found' if _get_internal(row).nil? + if is_meta_table? + if row.is_a?(Hash) and row.key?('ROWPREFIXFILTER') + raise ArgumentError, 'deleteall with ROWPREFIXFILTER in hbase:meta is not allowed.' + else + raise ArgumentError, 'Row Not Found' if _get_internal(row).nil? + end end if row.is_a?(Hash) _deleterows_internal(row, column, timestamp, args, all_version) diff --git a/hbase-shell/src/test/ruby/hbase/table_test.rb b/hbase-shell/src/test/ruby/hbase/table_test.rb index f9aad162576c..cb274f814aa9 100644 --- a/hbase-shell/src/test/ruby/hbase/table_test.rb +++ b/hbase-shell/src/test/ruby/hbase/table_test.rb @@ -194,15 +194,11 @@ def teardown assert_nil(res2) end - define_test "deleteall should work with row prefix in hbase:meta" do - @meta_table = table('hbase:meta') - @meta_table.put("test_meta_1", "table:state", "\x08\x01") - @meta_table.put("test_meta_2", "table:state", "\x08\x01") - @meta_table.deleteall({ROWPREFIXFILTER => "test_meta"}) - res1 = @test_table._get_internal('test_meta_1') - assert_nil(res1) - res2 = @test_table._get_internal('test_meta_2') - assert_nil(res2) + define_test "deleteall with row prefix in hbase:meta should not be allowed." do + assert_raise(ArgumentError) do + @meta_table = table('hbase:meta') + @meta_table.deleteall({ROWPREFIXFILTER => "test_meta"}) + end end define_test "append should work with value" do