From 0fe25677f35eaf17d48c2e8bc02ccff957afedbc Mon Sep 17 00:00:00 2001 From: Esteban Gutierrez Date: Fri, 31 Oct 2014 11:21:31 -0700 Subject: [PATCH] HBASE-12219 Cache more efficiently getAll() and get() in FSTableDescriptors (addendum) --- .../hadoop/hbase/util/FSTableDescriptors.java | 36 ++++++++++++++++------ 1 file changed, 26 insertions(+), 10 deletions(-) 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 getAll() throws IOException { Map htds = new TreeMap(); - List 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 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; } -- 1.8.4