docs: public Deferred<ByteMap<Long>> getLastWriteTimes() {
      class ResolutionCB implements Callback<Deferred<ByteMap<Long>>, Object> {
        @Override
        public Deferred<ByteMap<Long>> call(Object arg0) throws Exception {
          final Scanner scanner = getScanner();
          scanner.setQualifier(TSMeta.COUNTER_QUALIFIER());
          final Deferred<ByteMap<Long>> results = new Deferred<ByteMap<Long>>();
          final ByteMap<Long> tsuids = new ByteMap<Long>();
          
          final class ErrBack implements Callback<Object, Exception> {
            @Override
            public Object call(final Exception e) throws Exception {
              results.callback(e);
              return null;
            }
            @Override
            public String toString() {
              return "Error callback";
            }
          }
          
          /**
           * Scanner callback that will call itself while iterating through the 
           * tsdb-meta table
           */
          final class ScannerCB implements Callback<Object,
            ArrayList<ArrayList<KeyValue>>> {
            
            /**
             * Starts the scanner and is called recursively to fetch the next set of
             * rows from the scanner.
             * @return The map of spans if loaded successfully, null if no data was
             * found
             */
            public Object scan() {
              return scanner.nextRows().addCallback(this).addErrback(new ErrBack());
            }
            
            /**
             * Loops through each row of the scanner results and parses out data
             * points and optional meta data
             * @return null if no rows were found, otherwise the TreeMap with spans
             */
            @Override
            public Object call(final ArrayList<ArrayList<KeyValue>> rows)
              throws Exception {
              try {
                if (rows == null) {
                  results.callback(tsuids);
                  return null;
                }
                
                for (final ArrayList<KeyValue> row : rows) {
                  final byte[] tsuid = row.get(0).key();
                  tsuids.put(tsuid, row.get(0).timestamp());
                }
                return scan();
              } catch (Exception e) {
                results.callback(e);
                return null;
              }
            }
          }
          
          new ScannerCB().scan();
          return results;
        }
        @Override
        public String toString() {
          return "Last counter time callback";
        }
      }
      
      if (metric_uid == null) {
        return resolveMetric().addCallbackDeferring(new ResolutionCB());
      }
      try {
        return new ResolutionCB().call(null);
      } catch (Exception e) {
        return Deferred.fromError(e);
      }
    }