You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2021/12/14 00:11:01 UTC
[hbase] 02/02: HBASE-26530 Backport HBASE-26524 Support remove coprocessor by class name via alter table command (#3908)
This is an automated email from the ASF dual-hosted git repository.
apurtell pushed a commit to branch branch-2.5
in repository https://gitbox.apache.org/repos/asf/hbase.git
commit bbdc84003fca440f2c516012c3b9dd750bbb4cd4
Author: Tak Lon (Stephen) Wu <ta...@apache.org>
AuthorDate: Fri Dec 10 10:12:30 2021 -0800
HBASE-26530 Backport HBASE-26524 Support remove coprocessor by class name via alter table command (#3908)
Signed-off-by: Ankit Singhal <an...@apache.org>
---
.../hadoop/hbase/client/TableDescriptorBuilder.java | 2 ++
.../hbase/client/TestTableDescriptorBuilder.java | 14 ++++++++++++++
hbase-shell/src/main/ruby/hbase/admin.rb | 11 +++++++++++
hbase-shell/src/main/ruby/hbase_constants.rb | 1 +
hbase-shell/src/main/ruby/shell/commands/alter.rb | 12 ++++++++++++
hbase-shell/src/test/ruby/hbase/admin_test.rb | 19 +++++++++++++++++++
6 files changed, 59 insertions(+)
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/TableDescriptorBuilder.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/TableDescriptorBuilder.java
index 01d2753..c2ca5a1 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/TableDescriptorBuilder.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/TableDescriptorBuilder.java
@@ -1600,6 +1600,8 @@ public class TableDescriptorBuilder {
// if we found a match, remove it
if (match != null) {
ModifyableTableDescriptor.this.removeValue(match);
+ } else {
+ LOG.warn("coprocessor with class name {} was not found in the table attribute", className);
}
}
diff --git a/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestTableDescriptorBuilder.java b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestTableDescriptorBuilder.java
index aa4d5a1..658ad06 100644
--- a/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestTableDescriptorBuilder.java
+++ b/hbase-client/src/test/java/org/apache/hadoop/hbase/client/TestTableDescriptorBuilder.java
@@ -159,6 +159,20 @@ public class TestTableDescriptorBuilder {
}
/**
+ * Test removing cps in the table description that does not exist
+ */
+ @Test
+ public void testRemoveNonExistingCoprocessor() throws Exception {
+ String className = "org.apache.hadoop.hbase.coprocessor.SimpleRegionObserver";
+ TableDescriptor desc = TableDescriptorBuilder
+ .newBuilder(TableName.valueOf(name.getMethodName()))
+ .build();
+ assertFalse(desc.hasCoprocessor(className));
+ desc = TableDescriptorBuilder.newBuilder(desc).removeCoprocessor(className).build();
+ assertFalse(desc.hasCoprocessor(className));
+ }
+
+ /**
* Test that we add and remove strings from settings properly.
*/
@Test
diff --git a/hbase-shell/src/main/ruby/hbase/admin.rb b/hbase-shell/src/main/ruby/hbase/admin.rb
index c1da4bb..f4cfd31 100644
--- a/hbase-shell/src/main/ruby/hbase/admin.rb
+++ b/hbase-shell/src/main/ruby/hbase/admin.rb
@@ -758,6 +758,17 @@ module Hbase
htd.remove(name)
end
hasTableUpdate = true
+ elsif method == 'table_remove_coprocessor'
+ classname = arg.delete(CLASSNAME)
+ raise(ArgumentError, 'CLASSNAME parameter missing for table_remove_coprocessor method') unless classname
+ if classname.is_a?(Array)
+ classname.each do |key|
+ htd.removeCoprocessor(key)
+ end
+ else
+ htd.removeCoprocessor(classname)
+ end
+ hasTableUpdate = true
# Unset table configuration
elsif method == 'table_conf_unset'
raise(ArgumentError, 'NAME parameter missing for table_conf_unset method') unless name
diff --git a/hbase-shell/src/main/ruby/hbase_constants.rb b/hbase-shell/src/main/ruby/hbase_constants.rb
index c7b133e..3c637b8 100644
--- a/hbase-shell/src/main/ruby/hbase_constants.rb
+++ b/hbase-shell/src/main/ruby/hbase_constants.rb
@@ -39,6 +39,7 @@ module HBaseConstants
BATCH = 'BATCH'.freeze
CACHE = 'CACHE'.freeze
CACHE_BLOCKS = 'CACHE_BLOCKS'.freeze
+ CLASSNAME = 'CLASSNAME'.freeze
CLUSTER_KEY = 'CLUSTER_KEY'.freeze
COLUMN = 'COLUMN'.freeze
COLUMNS = 'COLUMNS'.freeze
diff --git a/hbase-shell/src/main/ruby/shell/commands/alter.rb b/hbase-shell/src/main/ruby/shell/commands/alter.rb
index 93323be..9d95bff 100644
--- a/hbase-shell/src/main/ruby/shell/commands/alter.rb
+++ b/hbase-shell/src/main/ruby/shell/commands/alter.rb
@@ -82,6 +82,18 @@ You can also remove a table-scope attribute:
hbase> alter 't1', METHOD => 'table_att_unset', NAME => 'coprocessor$1'
+Other than removing coprocessor from the table-scope attribute via 'table_att_unset', you can also
+use 'table_remove_coprocessor' by specifying the class name:
+
+ hbase> alter 't1', METHOD => 'table_remove_coprocessor', CLASSNAME =>
+ 'org.apache.hadoop.hbase.coprocessor.SimpleRegionObserver'
+
+You can also remove multiple coprocessors at once:
+
+ hbase> alter 't1', METHOD => 'table_remove_coprocessor', CLASSNAME =>
+ ['org.apache.hadoop.hbase.coprocessor.SimpleRegionObserver',
+ 'org.apache.hadoop.hbase.coprocessor.Export']
+
You can also set REGION_REPLICATION:
hbase> alter 't1', {REGION_REPLICATION => 2}
diff --git a/hbase-shell/src/test/ruby/hbase/admin_test.rb b/hbase-shell/src/test/ruby/hbase/admin_test.rb
index 26793a1..e84ffd6 100644
--- a/hbase-shell/src/test/ruby/hbase/admin_test.rb
+++ b/hbase-shell/src/test/ruby/hbase/admin_test.rb
@@ -977,6 +977,25 @@ module Hbase
assert_no_match(eval("/" + key + "/"), admin.describe(@test_name))
end
+ define_test "alter should be able to remove a coprocessor by class name" do
+ drop_test_table(@test_name)
+ create_test_table(@test_name)
+
+ cp_key = "coprocessor"
+ class_name = "org.apache.hadoop.hbase.coprocessor.SimpleRegionObserver"
+ cp_value = "|" + class_name + "|12|arg1=1,arg2=2"
+
+ command(:alter, @test_name, 'METHOD' => 'table_att', cp_key => cp_value)
+ describe_text = admin.describe(@test_name)
+ assert_match(eval("/" + class_name + "/"), describe_text)
+ assert_match(eval("/" + cp_key + "\\$(\\d+)/"), describe_text)
+ assert_match(/arg1=1,arg2=2/, describe_text)
+
+ command(:alter, @test_name, 'METHOD' => 'table_remove_coprocessor', 'CLASSNAME' => class_name)
+ describe_text = admin.describe(@test_name)
+ assert_no_match(eval("/" + class_name + "/"), describe_text)
+ end
+
define_test "alter should be able to remove a list of table attributes" do
drop_test_table(@test_name)