Repository: hbase Updated Branches: refs/heads/branch-1 a46425b2a -> 1f18d706a
HBASE-12219 Cache more efficiently getAll() and get() in FSTableDescriptors (addendum) Signed-off-by: stack <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/hbase/repo Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/1f18d706 Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/1f18d706 Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/1f18d706 Branch: refs/heads/branch-1 Commit: 1f18d706a8da51641776c33a594391e69003da3a Parents: a46425b Author: Esteban Gutierrez <[email protected]> Authored: Fri Oct 31 11:21:31 2014 -0700 Committer: stack <[email protected]> Committed: Fri Oct 31 11:33:33 2014 -0700 ---------------------------------------------------------------------- .../hadoop/hbase/util/FSTableDescriptors.java | 36 ++++++++++++++------ 1 file changed, 26 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hbase/blob/1f18d706/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSTableDescriptors.java ---------------------------------------------------------------------- diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSTableDescriptors.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSTableDescriptors.java index 37e2d21..30ebc7d 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSTableDescriptors.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/util/FSTableDescriptors.java @@ -186,17 +186,33 @@ public class FSTableDescriptors implements TableDescriptors { public Map<String, HTableDescriptor> getAll() throws IOException { Map<String, HTableDescriptor> htds = new TreeMap<String, HTableDescriptor>(); - List<Path> tableDirs = FSUtils.getTableDirs(fs, rootdir); - for (Path d: tableDirs) { - HTableDescriptor htd = null; - try { - htd = get(FSUtils.getTableName(d)); - } catch (FileNotFoundException fnfe) { - // inability of retrieving one HTD shouldn't stop getting the remaining - LOG.warn("Trouble retrieving htd", fnfe); + + if (fsvisited && usecache) { + for (Map.Entry<TableName, HTableDescriptor> entry: this.cache.entrySet()) { + htds.put(entry.getKey().toString(), entry.getValue()); + } + // add hbase:meta to the response + htds.put(HTableDescriptor.META_TABLEDESC.getTableName().getNameAsString(), + HTableDescriptor.META_TABLEDESC); + } else { + LOG.debug("Fetching table descriptors from the filesystem."); + boolean allvisited = true; + for (Path d : FSUtils.getTableDirs(fs, rootdir)) { + HTableDescriptor htd = null; + try { + htd = get(FSUtils.getTableName(d)); + } catch (FileNotFoundException fnfe) { + // inability of retrieving one HTD shouldn't stop getting the remaining + LOG.warn("Trouble retrieving htd", fnfe); + } + if (htd == null) { + allvisited = false; + continue; + } else { + htds.put(htd.getTableName().getNameAsString(), htd); + } + fsvisited = allvisited; } - if (htd == null) continue; - htds.put(htd.getTableName().getNameAsString(), htd); } return htds; }
