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/077f9ea4
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/077f9ea4
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/077f9ea4

Branch: refs/heads/0.98
Commit: 077f9ea4b0e276960a7171c005faad56a06812c4
Parents: 65f9442
Author: Andrew Purtell <[email protected]>
Authored: Thu Jan 22 13:11:31 2015 -0800
Committer: Andrew Purtell <[email protected]>
Committed: Thu Jan 22 13:12:12 2015 -0800

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


http://git-wip-us.apache.org/repos/asf/hbase/blob/077f9ea4/bin/region_mover.rb
----------------------------------------------------------------------
diff --git a/bin/region_mover.rb b/bin/region_mover.rb
index 2ee4bcd..de25170 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 .META.
 def isSameServer(admin, r, original)
   server = getServerNameForRegion(admin, r)
@@ -113,17 +78,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
@@ -134,23 +102,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
 
@@ -519,5 +486,3 @@ case ARGV[0]
     puts optparse
     exit 3
 end
-
-closeTables()

Reply via email to