You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by la...@apache.org on 2014/09/28 22:07:48 UTC

git commit: HBASE-12113 Backport to 0.94: HBASE-5525 Truncate and preserve region boundaries option. (Sean Busbey, original patch by Kevin Odell)

Repository: hbase
Updated Branches:
  refs/heads/0.94 baccf6c9d -> ec6ea58df


HBASE-12113 Backport to 0.94: HBASE-5525 Truncate and preserve region boundaries option. (Sean Busbey, original patch by Kevin Odell)


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

Branch: refs/heads/0.94
Commit: ec6ea58df0361cb3f8bb62ed8a55240032957b8c
Parents: baccf6c
Author: Lars Hofhansl <la...@apache.org>
Authored: Sun Sep 28 13:07:57 2014 -0700
Committer: Lars Hofhansl <la...@apache.org>
Committed: Sun Sep 28 13:07:57 2014 -0700

----------------------------------------------------------------------
 src/main/ruby/hbase/admin.rb                    | 19 ++++++++++
 src/main/ruby/shell.rb                          |  1 +
 .../ruby/shell/commands/truncate_preserve.rb    | 38 ++++++++++++++++++++
 3 files changed, 58 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/ec6ea58d/src/main/ruby/hbase/admin.rb
----------------------------------------------------------------------
diff --git a/src/main/ruby/hbase/admin.rb b/src/main/ruby/hbase/admin.rb
index df2c69d..266f1ff 100644
--- a/src/main/ruby/hbase/admin.rb
+++ b/src/main/ruby/hbase/admin.rb
@@ -21,6 +21,7 @@
 include Java
 java_import org.apache.hadoop.hbase.util.Pair
 java_import org.apache.hadoop.hbase.util.RegionSplitter
+java_import org.apache.hadoop.hbase.util.Bytes
 java_import org.apache.hadoop.hbase.protobuf.generated.HBaseProtos::SnapshotDescription
 
 # Wrapper for org.apache.hadoop.hbase.client.HBaseAdmin
@@ -325,6 +326,24 @@ module Hbase
       @admin.createTable(table_description)
     end
 
+    #----------------------------------------------------------------------------------------------
+    # Truncates table while maintaing region boundaries (deletes all records by recreating the table)
+    def truncate_preserve(table_name, conf = @conf)
+      h_table = org.apache.hadoop.hbase.client.HTable.new(conf, table_name)
+      splits = h_table.getRegionLocations().keys().map{|i| Bytes.toString(i.getStartKey)}.delete_if{|k| k == ""}.to_java :String
+      splits = org.apache.hadoop.hbase.util.Bytes.toByteArrays(splits)
+      table_description = h_table.getTableDescriptor()
+      yield 'Disabling table...' if block_given?
+      disable(table_name)
+
+      yield 'Dropping table...' if block_given?
+      drop(table_name)
+
+      yield 'Creating table with region boundaries...' if block_given?
+      @admin.createTable(table_description, splits)
+    end
+
+    #----------------------------------------------------------------------------------------------
     # Check the status of alter command (number of regions reopened)
     def alter_status(table_name)
       # Table name should be a string

http://git-wip-us.apache.org/repos/asf/hbase/blob/ec6ea58d/src/main/ruby/shell.rb
----------------------------------------------------------------------
diff --git a/src/main/ruby/shell.rb b/src/main/ruby/shell.rb
index 1330b7e..29b08f6 100644
--- a/src/main/ruby/shell.rb
+++ b/src/main/ruby/shell.rb
@@ -251,6 +251,7 @@ Shell.load_command_group(
     put
     scan
     truncate
+    truncate_preserve
   ]
 )
 

http://git-wip-us.apache.org/repos/asf/hbase/blob/ec6ea58d/src/main/ruby/shell/commands/truncate_preserve.rb
----------------------------------------------------------------------
diff --git a/src/main/ruby/shell/commands/truncate_preserve.rb b/src/main/ruby/shell/commands/truncate_preserve.rb
new file mode 100644
index 0000000..918b232
--- /dev/null
+++ b/src/main/ruby/shell/commands/truncate_preserve.rb
@@ -0,0 +1,38 @@
+#
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+module Shell
+  module Commands
+    class TruncatePreserve < Command
+      def help
+        return <<-EOF
+  Disables, drops and recreates the specified table while still maintaing the previous region boundaries.
+EOF
+      end
+
+      def command(table)
+        format_simple_command do
+          puts "Truncating '#{table}' table (it may take a while):"
+          admin.truncate_preserve(table) { |log| puts " - #{log}" }
+        end
+      end
+
+    end
+  end
+end