compactionConfig.setCompactionStrategy(csc); "org.apache.accumulo.tserver.compaction.strategies.ConfigurableCompactionStrategy"); csc.setOptions(configurableCompactOpt); compactionConfig.setCompactionStrategy(csc);
compactionConfig.setCompactionStrategy(csc); "org.apache.accumulo.tserver.compaction.strategies.ConfigurableCompactionStrategy"); csc.setOptions(configurableCompactOpt); compactionConfig.setCompactionStrategy(csc);
private void testDropNone(Map<String,String> options) throws Exception { Connector c = getConnector(); String tableName = getUniqueNames(1)[0]; c.tableOperations().create(tableName); writeFlush(c, tableName, "a"); writeFlush(c, tableName, "b"); CompactionStrategyConfig csConfig = new CompactionStrategyConfig( TestCompactionStrategy.class.getName()); csConfig.setOptions(options); c.tableOperations().compact(tableName, new CompactionConfig().setWait(true).setCompactionStrategy(csConfig)); Assert.assertEquals(ImmutableSet.of("a", "b"), getRows(c, tableName)); }
@Test public void testFileSize() throws Exception { Connector c = getConnector(); String tableName = getUniqueNames(1)[0]; c.tableOperations().create(tableName); // write random data because its very unlikely it will compress writeRandomValue(c, tableName, 1 << 16); writeRandomValue(c, tableName, 1 << 16); writeRandomValue(c, tableName, 1 << 9); writeRandomValue(c, tableName, 1 << 7); writeRandomValue(c, tableName, 1 << 6); Assert.assertEquals(5, FunctionalTestUtils.countRFiles(c, tableName)); CompactionStrategyConfig csConfig = new CompactionStrategyConfig( SizeCompactionStrategy.class.getName()); csConfig.setOptions(ImmutableMap.of("size", "" + (1 << 15))); c.tableOperations().compact(tableName, new CompactionConfig().setWait(true).setCompactionStrategy(csConfig)); Assert.assertEquals(3, FunctionalTestUtils.countRFiles(c, tableName)); csConfig = new CompactionStrategyConfig(SizeCompactionStrategy.class.getName()); csConfig.setOptions(ImmutableMap.of("size", "" + (1 << 17))); c.tableOperations().compact(tableName, new CompactionConfig().setWait(true).setCompactionStrategy(csConfig)); Assert.assertEquals(1, FunctionalTestUtils.countRFiles(c, tableName)); }
@Test public void testPerTableClasspath() throws Exception { // Can't assume that a test-resource will be on the server's classpath Assume.assumeTrue(ClusterType.MINI == getClusterType()); // test per-table classpath + user specified compaction strategy final Connector c = getConnector(); final String tableName = getUniqueNames(1)[0]; File target = new File(System.getProperty("user.dir"), "target"); Assert.assertTrue(target.mkdirs() || target.isDirectory()); File destFile = installJar(target, "/TestCompactionStrat.jar"); c.tableOperations().create(tableName); c.instanceOperations().setProperty( Property.VFS_CONTEXT_CLASSPATH_PROPERTY.getKey() + "context1", destFile.toString()); c.tableOperations().setProperty(tableName, Property.TABLE_CLASSPATH.getKey(), "context1"); c.tableOperations().addSplits(tableName, new TreeSet<>(Arrays.asList(new Text("efg")))); writeFlush(c, tableName, "a"); writeFlush(c, tableName, "b"); writeFlush(c, tableName, "h"); writeFlush(c, tableName, "i"); Assert.assertEquals(4, FunctionalTestUtils.countRFiles(c, tableName)); // EfgCompactionStrat will only compact a tablet w/ end row of 'efg'. No other tablets are // compacted. CompactionStrategyConfig csConfig = new CompactionStrategyConfig( "org.apache.accumulo.test.EfgCompactionStrat"); c.tableOperations().compact(tableName, new CompactionConfig().setWait(true).setCompactionStrategy(csConfig)); Assert.assertEquals(3, FunctionalTestUtils.countRFiles(c, tableName)); c.tableOperations().compact(tableName, new CompactionConfig().setWait(true)); Assert.assertEquals(2, FunctionalTestUtils.countRFiles(c, tableName)); }
@Test public void testDropA() throws Exception { Connector c = getConnector(); String tableName = getUniqueNames(1)[0]; c.tableOperations().create(tableName); writeFlush(c, tableName, "a"); writeFlush(c, tableName, "b"); // create a file that starts with A containing rows 'a' and 'b' c.tableOperations().compact(tableName, new CompactionConfig().setWait(true)); writeFlush(c, tableName, "c"); writeFlush(c, tableName, "d"); // drop files that start with A CompactionStrategyConfig csConfig = new CompactionStrategyConfig( TestCompactionStrategy.class.getName()); csConfig.setOptions(ImmutableMap.of("dropPrefix", "A", "inputPrefix", "F")); c.tableOperations().compact(tableName, new CompactionConfig().setWait(true).setCompactionStrategy(csConfig)); Assert.assertEquals(ImmutableSet.of("c", "d"), getRows(c, tableName)); // this compaction should not drop files starting with A c.tableOperations().compact(tableName, new CompactionConfig().setWait(true)); c.tableOperations().compact(tableName, new CompactionConfig().setWait(true)); Assert.assertEquals(ImmutableSet.of("c", "d"), getRows(c, tableName)); }
@Test public void testIterators() throws Exception { // test compaction strategy + iterators Connector c = getConnector(); String tableName = getUniqueNames(1)[0]; c.tableOperations().create(tableName); writeFlush(c, tableName, "a"); writeFlush(c, tableName, "b"); // create a file that starts with A containing rows 'a' and 'b' c.tableOperations().compact(tableName, new CompactionConfig().setWait(true)); writeFlush(c, tableName, "c"); writeFlush(c, tableName, "d"); Assert.assertEquals(3, FunctionalTestUtils.countRFiles(c, tableName)); // drop files that start with A CompactionStrategyConfig csConfig = new CompactionStrategyConfig( TestCompactionStrategy.class.getName()); csConfig.setOptions(ImmutableMap.of("inputPrefix", "F")); IteratorSetting iterConf = new IteratorSetting(21, "myregex", RegExFilter.class); RegExFilter.setRegexs(iterConf, "a|c", null, null, null, false); c.tableOperations().compact(tableName, new CompactionConfig().setWait(true) .setCompactionStrategy(csConfig).setIterators(Arrays.asList(iterConf))); // compaction strategy should only be applied to one file. If its applied to both, then row 'b' // would be dropped by filter. Assert.assertEquals(ImmutableSet.of("a", "b", "c"), getRows(c, tableName)); Assert.assertEquals(2, FunctionalTestUtils.countRFiles(c, tableName)); c.tableOperations().compact(tableName, new CompactionConfig().setWait(true)); // ensure that iterator is not applied Assert.assertEquals(ImmutableSet.of("a", "b", "c"), getRows(c, tableName)); Assert.assertEquals(1, FunctionalTestUtils.countRFiles(c, tableName)); }
@Override public void compactTable(ByteBuffer login, String tableName, ByteBuffer startRow, ByteBuffer endRow, List<org.apache.accumulo.proxy.thrift.IteratorSetting> iterators, boolean flush, boolean wait, CompactionStrategyConfig compactionStrategy) throws org.apache.accumulo.proxy.thrift.AccumuloSecurityException, org.apache.accumulo.proxy.thrift.TableNotFoundException, org.apache.accumulo.proxy.thrift.AccumuloException, TException { try { CompactionConfig compactionConfig = new CompactionConfig() .setStartRow(ByteBufferUtil.toText(startRow)).setEndRow(ByteBufferUtil.toText(endRow)) .setIterators(getIteratorSettings(iterators)).setFlush(flush).setWait(wait); if (compactionStrategy != null) { // @formatter:off org.apache.accumulo.core.client.admin.CompactionStrategyConfig ccc = new org.apache.accumulo.core.client.admin.CompactionStrategyConfig( compactionStrategy.getClassName()); // @formatter:on if (compactionStrategy.options != null) ccc.setOptions(compactionStrategy.options); compactionConfig.setCompactionStrategy(ccc); } getConnector(login).tableOperations().compact(tableName, compactionConfig); } catch (Exception e) { handleExceptionTNF(e); } }