From b685429c2b4950c2b41a463fb121261e6c2c96ec Mon Sep 17 00:00:00 2001 From: chenheng Date: Wed, 12 Aug 2015 10:38:01 +0800 Subject: [PATCH] HBASE-14203 remove duplicate code getTableDescriptor in HTable --- .../hbase/client/ConnectionImplementation.java | 14 +++++++++++++- .../org/apache/hadoop/hbase/client/HTable.java | 22 +++------------------- 2 files changed, 16 insertions(+), 20 deletions(-) diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java index 2754997..b337b92 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/ConnectionImplementation.java @@ -173,6 +173,10 @@ class ConnectionImplementation implements ClusterConnection, Closeable { private final ClientBackoffPolicy backoffPolicy; + private Admin admin; + + private final Object adminLock = new Object(); + /** * constructor * @param conf Configuration object @@ -359,7 +363,15 @@ class ConnectionImplementation implements ClusterConnection, Closeable { @Override public Admin getAdmin() throws IOException { - return new HBaseAdmin(this); + if (admin != null) { + return admin; + } + synchronized (adminLock) { + if (admin == null) { + admin = new HBaseAdmin(this); + } + return admin; + } } private ExecutorService getBatchPool() { diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java index 89c7893..84a55bc 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/client/HTable.java @@ -265,30 +265,14 @@ public class HTable implements HTableInterface { */ @Override public HTableDescriptor getTableDescriptor() throws IOException { - // TODO: This is the same as HBaseAdmin.getTableDescriptor(). Only keep one. - if (tableName == null) return null; - if (tableName.equals(TableName.META_TABLE_NAME)) { + if (tableName != null && tableName.equals(TableName.META_TABLE_NAME)) { return HTableDescriptor.META_TABLEDESC; } - HTableDescriptor htd = executeMasterCallable( - new MasterCallable(getConnection()) { - @Override - public HTableDescriptor call(int callTimeout) throws ServiceException { - GetTableDescriptorsResponse htds; - GetTableDescriptorsRequest req = - RequestConverter.buildGetTableDescriptorsRequest(tableName); - htds = master.getTableDescriptors(null, req); - - if (!htds.getTableSchemaList().isEmpty()) { - return HTableDescriptor.convert(htds.getTableSchemaList().get(0)); - } - return null; - } - }); + HTableDescriptor htd = this.connection.getAdmin().getTableDescriptor(tableName); if (htd != null) { return new UnmodifyableHTableDescriptor(htd); } - throw new TableNotFoundException(tableName.getNameAsString()); + return null; } private V executeMasterCallable(MasterCallable callable) throws IOException { -- 1.9.3 (Apple Git-50)