docs: private Deferred<Map<String, String>> resolveTags(final ByteMap<byte[]> tag_uids) {
      if (tags != null) {
        return Deferred.fromResult(null);
      }
      tags = new HashMap<String, String>(tag_uids.size());
      
      final List<Deferred<Object>> deferreds = 
          new ArrayList<Deferred<Object>>(tag_uids.size());
      
      /** Dumps the pairs into the map in the correct order */
      final class PairCB implements Callback<Object, ArrayList<String>> {
        @Override
        public Object call(final ArrayList<String> pair) throws Exception {
          tags.put(pair.get(0), pair.get(1));
          return null;
        }
      }
      
      /** Callback executed once all of the pairs are resolved and stored in the map */
      final class GroupCB implements Callback<Map<String, String>, ArrayList<Object>> {
        @Override
        public Map<String, String> call(final ArrayList<Object> group) 
            throws Exception {
          return tags;
        }
      }
      
      for (Map.Entry<byte[], byte[]> tag_pair : tag_uids.entrySet()) {
        final List<Deferred<String>> resolve_pair = 
            new ArrayList<Deferred<String>>(2);
        resolve_pair.add(tsdb.tag_names.getNameAsync(tag_pair.getKey()));
        resolve_pair.add(tsdb.tag_values.getNameAsync(tag_pair.getValue()));
        deferreds.add(Deferred.groupInOrder(resolve_pair).addCallback(new PairCB()));
      }
      
      return Deferred.group(deferreds).addCallback(new GroupCB());
    }