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()
