From 8717759bfb787335cb13ffad481e8d11a683770a Mon Sep 17 00:00:00 2001 From: tedyu Date: Thu, 4 Jun 2015 11:24:35 -0700 Subject: [PATCH] HBASE-13833 LoadIncrementalHFile.doBulkLoad(Path,HTable) doesn't handle unmanaged connections when using SecureBulkLoad (Nick Dimiduk) --- .../hbase/mapreduce/LoadIncrementalHFiles.java | 28 +++++++++++++++++----- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.java index 827699b..a8d13b2 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/mapreduce/LoadIncrementalHFiles.java @@ -45,6 +45,7 @@ import org.apache.hadoop.hbase.TableNotFoundException; import org.apache.hadoop.hbase.classification.InterfaceAudience; import org.apache.hadoop.hbase.classification.InterfaceStability; import org.apache.hadoop.hbase.client.Admin; +import org.apache.hadoop.hbase.client.ClusterConnection; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.HBaseAdmin; @@ -291,15 +292,30 @@ public class LoadIncrementalHFiles extends Configured implements Tool { throws TableNotFoundException, IOException { Admin admin = null; + Table t = table; + Connection conn = table.getConnection(); + boolean closeConnWhenFinished = false; try { - try { - admin = table.getConnection().getAdmin(); - } catch (NeedUnmanagedConnectionException ex) { - admin = new HBaseAdmin(table.getConfiguration()); + if (conn instanceof ClusterConnection && ((ClusterConnection) conn).isManaged()) { + LOG.warn("managed connection cannot be used for bulkload. Creating unmanaged connection."); + // can only use unmanaged connections from here on out. + conn = ConnectionFactory.createConnection(table.getConfiguration()); + t = conn.getTable(table.getName()); + closeConnWhenFinished = true; + if (conn instanceof ClusterConnection && ((ClusterConnection) conn).isManaged()) { + throw new RuntimeException("Failed to create unmanaged connection."); + } + admin = conn.getAdmin(); + } else { + admin = conn.getAdmin(); } - doBulkLoad(hfofDir, admin, table, table.getRegionLocator()); + doBulkLoad(hfofDir, admin, t, conn.getRegionLocator(t.getName())); } finally { - admin.close(); + if (admin != null) admin.close(); + if (closeConnWhenFinished) { + t.close(); + conn.close(); + } } } -- 1.9.5 (Apple Git-50.3)