HBASE-12904 Threading issues in region_mover.rb

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

Branch: refs/heads/branch-1
Commit: 44fa36b425aadc7806512758b5bbe258b82e03ed
Parents: 0bec3a7
Author: Andrew Purtell <[email protected]>
Authored: Thu Jan 22 13:11:31 2015 -0800
Committer: Andrew Purtell <[email protected]>
Committed: Thu Jan 22 13:11:40 2015 -0800

----------------------------------------------------------------------
 bin/region_mover.rb | 81 ++++++++++++++----------------------------------
 1 file changed, 23 insertions(+), 58 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/44fa36b4/bin/region_mover.rb
----------------------------------------------------------------------
diff --git a/bin/region_mover.rb b/bin/region_mover.rb
index 7dfedd1..7a09854 100644
--- a/bin/region_mover.rb
+++ b/bin/region_mover.rb
@@ -43,41 +43,6 @@ import org.apache.hadoop.hbase.HRegionInfo
 # Name of this script
 NAME = "region_mover"
 
-# Get meta table reference
-def getMetaTable(config)
-  # Keep meta reference in ruby global
-  if not $META
-    $META = HTable.new(config, HConstants::META_TABLE_NAME)
-  end
-  return $META
-end
-
-# Get table instance.
-# Maintains cache of table instances.
-def getTable(config, name)
-  # Keep dictionary of tables in ruby global
-  if not $TABLES
-    $TABLES = {}
-  end
-  key = name.toString()
-  if not $TABLES[key]
-    $TABLES[key] = HTable.new(config, name)
-  end
-  return $TABLES[key]
-end
-
-def closeTables()
-  if not $TABLES
-    return
-  end
-
-  $LOG.info("Close all tables")
-  $TABLES.each do |name, table|
-    $TABLES.delete(name)
-    table.close()
-  end
-end
-
 # Returns true if passed region is still on 'original' when we look at 
hbase:meta.
 def isSameServer(admin, r, original)
   server = getServerNameForRegion(admin, r)
@@ -111,17 +76,20 @@ def getServerNameForRegion(admin, r)
       zkw.close()
     end
   end
-  table = nil
-  table = getMetaTable(admin.getConfiguration())
-  g = Get.new(r.getRegionName())
-  g.addColumn(HConstants::CATALOG_FAMILY, HConstants::SERVER_QUALIFIER)
-  g.addColumn(HConstants::CATALOG_FAMILY, HConstants::STARTCODE_QUALIFIER)
-  result = table.get(g)
-  return nil unless result
-  server = result.getValue(HConstants::CATALOG_FAMILY, 
HConstants::SERVER_QUALIFIER)
-  startcode = result.getValue(HConstants::CATALOG_FAMILY, 
HConstants::STARTCODE_QUALIFIER)
-  return nil unless server
-  return java.lang.String.new(Bytes.toString(server)).replaceFirst(":", ",")  
+ "," + Bytes.toLong(startcode).to_s
+  table = HTable.new(admin.getConfiguration(), HConstants::META_TABLE_NAME)
+  begin
+    g = Get.new(r.getRegionName())
+    g.addColumn(HConstants::CATALOG_FAMILY, HConstants::SERVER_QUALIFIER)
+    g.addColumn(HConstants::CATALOG_FAMILY, HConstants::STARTCODE_QUALIFIER)
+    result = table.get(g)
+    return nil unless result
+    server = result.getValue(HConstants::CATALOG_FAMILY, 
HConstants::SERVER_QUALIFIER)
+    startcode = result.getValue(HConstants::CATALOG_FAMILY, 
HConstants::STARTCODE_QUALIFIER)
+    return nil unless server
+    return java.lang.String.new(Bytes.toString(server)).replaceFirst(":", ",") 
 + "," + Bytes.toLong(startcode).to_s
+  ensure
+    table.close()
+  end
 end
 
 # Trys to scan a row from passed region
@@ -132,23 +100,22 @@ def isSuccessfulScan(admin, r)
   scan.setCaching(1)
   scan.setFilter(FirstKeyOnlyFilter.new()) 
   begin
-    table = getTable(admin.getConfiguration(), r.getTableName())
+    table = HTable.new(admin.getConfiguration(), r.getTableName())
     scanner = table.getScanner(scan)
+    begin
+      results = scanner.next() 
+      # We might scan into next region, this might be an empty table.
+      # But if no exception, presume scanning is working.
+    ensure
+      scanner.close()
+    end
   rescue org.apache.hadoop.hbase.TableNotFoundException,
       org.apache.hadoop.hbase.TableNotEnabledException => e
     $LOG.warn("Region " + r.getEncodedName() + " belongs to recently " +
       "deleted/disabled table. Skipping... " + e.message)
     return
-  end
-  begin
-    results = scanner.next() 
-    # We might scan into next region, this might be an empty table.
-    # But if no exception, presume scanning is working.
   ensure
-    scanner.close()
-    # Do not close the htable. It is cached in $TABLES and 
-    # may be reused in moving another region of same table. 
-    # table.close()
+    table.close() unless table.nil?
   end
 end
 
@@ -517,5 +484,3 @@ case ARGV[0]
     puts optparse
     exit 3
 end
-
-closeTables()

Reply via email to