protected void testCompaction(int sstableCount, int rowsPerSSTable, int colsPerRow)
      throws Exception {
    CompactionManager.instance.disableAutoCompaction();

    Table table = Table.open(TABLE1);
    ColumnFamilyStore store = table.getColumnFamilyStore("Standard1");

    ArrayList<SSTableReader> sstables = new ArrayList<SSTableReader>();
    for (int k = 0; k < sstableCount; k++) {
      SortedMap<String, ColumnFamily> rows = new TreeMap<String, ColumnFamily>();
      for (int j = 0; j < rowsPerSSTable; j++) {
        String key = String.valueOf(j);
        IColumn[] cols = new IColumn[colsPerRow];
        for (int i = 0; i < colsPerRow; i++) {
          // last sstable has highest timestamps
          cols[i] = Util.column(String.valueOf(i), String.valueOf(i), k);
        }
        rows.put(key, SSTableUtils.createCF(Long.MIN_VALUE, Integer.MIN_VALUE, cols));
      }
      SSTableReader sstable = SSTableUtils.writeSSTable(rows);
      sstables.add(sstable);
      store.addSSTable(sstable);
    }

    // give garbage collection a bit of time to catch up
    Thread.sleep(1000);

    long start = System.currentTimeMillis();
    CompactionManager.instance.doCompaction(
        store,
        sstables,
        (int) (System.currentTimeMillis() / 1000)
            - DatabaseDescriptor.getCFMetaData(TABLE1, "Standard1").gcGraceSeconds);
    System.out.println(
        String.format(
            "%s: sstables=%d rowsper=%d colsper=%d: %d ms",
            this.getClass().getName(),
            sstableCount,
            rowsPerSSTable,
            colsPerRow,
            System.currentTimeMillis() - start));
  }
 /**
  * Generates two sstables to be used to test migrating from a .json manifest to keeping the level
  * in the sstable metadata.
  *
  * <p>Do this: 1. remove @Ignore 2. comment out the @Before and @After methods above 3. run this
  * method 4. checkout trunk 5. copy the .json file from the previous version to the current one
  * (ie; test/data/migration-sstables/ic/Keyspace1/legacyleveled/legacyleveled.json) 6. update
  * LegacyLeveledManifestTest to use the new version.
  */
 @Test
 public void generateSSTable() throws IOException {
   File legacySSTableDir = getLegacySSTableDir(Descriptor.Version.current_version);
   FileUtils.createDirectory(legacySSTableDir);
   Set<String> keys = new HashSet<String>();
   for (int i = 0; i < 10; i++) {
     keys.add("key" + i);
   }
   for (int i = 0; i < 3; i++) {
     SSTableReader ssTable =
         SSTableUtils.prepare()
             .ks(KS)
             .cf(CF)
             .dest(new Descriptor(legacySSTableDir, KS, CF, i, false))
             .write(keys);
     System.out.println(ssTable);
   }
 }