code: public static Deferred<String> metricNameAsync(final TSDB tsdb, 
        final byte[] row) {
      if (row == null || row.length < 1) {
        throw new IllegalArgumentException("Row key cannot be null or empty");
      }
      if (row.length < Const.SALT_WIDTH() + tsdb.metrics.width()) {
        throw new IllegalArgumentException("Row key is too short"); 
      }
      final byte[] id = Arrays.copyOfRange(
          row, Const.SALT_WIDTH(), tsdb.metrics.width() + Const.SALT_WIDTH());
      return tsdb.metrics.getNameAsync(id);
    }
docs: Extracts the name of the metric ID contained in a row key.
  @param tsdb The TSDB to use.
  @param row The actual row key.
  @return A deferred to wait on that will return the name of the metric.
  @throws IllegalArgumentException if the row key is too short due to missing
  salt or metric or if it's null/empty.
  @throws NoSuchUniqueId if the UID could not resolve to a string
  @since 1.2