This is an automated email from the ASF dual-hosted git repository. ddanielr pushed a commit to branch elasticity in repository https://gitbox.apache.org/repos/asf/accumulo.git
The following commit(s) were added to refs/heads/elasticity by this push: new cf12b6a84a Reduce compaction properties (#4311) cf12b6a84a is described below commit cf12b6a84ad7cee506332d62af33e438f0db43ac Author: Daniel Roberts <ddani...@gmail.com> AuthorDate: Wed Feb 28 11:08:33 2024 -0500 Reduce compaction properties (#4311) Removes the "meta" and "root" compaction services and replaces them with a single "default" compaction service. Adds a constant for referencing the "default" compaction service name. Renamed the DefaultCompactionPlanner to RatioBasedCompactionPlanner. --- .../java/org/apache/accumulo/core/Constants.java | 1 + .../core/client/admin/InstanceOperations.java | 2 +- .../org/apache/accumulo/core/conf/Property.java | 47 ++++++++-------------- ...anner.java => RatioBasedCompactionPlanner.java} | 4 +- .../spi/compaction/SimpleCompactionDispatcher.java | 5 ++- .../accumulo/core/spi/compaction/package-info.java | 2 +- ...t.java => RatioBasedCompactionPlannerTest.java} | 21 +++++----- .../compaction/CompactionServicesConfigTest.java | 20 ++++----- .../miniclusterImpl/MiniAccumuloConfigImpl.java | 10 ----- .../server/conf/CheckCompactionConfig.java | 12 +++--- .../accumulo/server/init/InitialConfiguration.java | 10 +---- .../server/conf/CheckCompactionConfigTest.java | 20 ++++----- .../compaction/BadCompactionServiceConfigIT.java | 14 ++++--- .../test/compaction/CompactionConfigChangeIT.java | 4 +- .../CompactionPriorityQueueMetricsIT.java | 4 +- .../compaction/ExternalCompactionTestUtils.java | 18 ++++----- .../accumulo/test/functional/CompactionIT.java | 8 ++-- .../apache/accumulo/test/shell/ConfigSetIT.java | 5 ++- 18 files changed, 92 insertions(+), 115 deletions(-) diff --git a/core/src/main/java/org/apache/accumulo/core/Constants.java b/core/src/main/java/org/apache/accumulo/core/Constants.java index a35cf61707..a06675f846 100644 --- a/core/src/main/java/org/apache/accumulo/core/Constants.java +++ b/core/src/main/java/org/apache/accumulo/core/Constants.java @@ -124,4 +124,5 @@ public class Constants { public static final int DEFAULT_VISIBILITY_CACHE_SIZE = 1000; public static final String DEFAULT_RESOURCE_GROUP_NAME = "default"; + public static final String DEFAULT_COMPACTION_SERVICE_NAME = "default"; } diff --git a/core/src/main/java/org/apache/accumulo/core/client/admin/InstanceOperations.java b/core/src/main/java/org/apache/accumulo/core/client/admin/InstanceOperations.java index 4cb3f6d196..cc85ecc524 100644 --- a/core/src/main/java/org/apache/accumulo/core/client/admin/InstanceOperations.java +++ b/core/src/main/java/org/apache/accumulo/core/client/admin/InstanceOperations.java @@ -90,7 +90,7 @@ public interface InstanceOperations { * var planner = currProps.get("compaction.service.default.planner"); * //This code will only change the compaction planner if its currently set to default settings. * //The endsWith() function was used to make the example short, would be better to use equals(). - * if(planner != null && planner.endsWith("DefaultCompactionPlanner") { + * if(planner != null && planner.endsWith("RatioBasedCompactionPlanner") { * // tservers will eventually see these compaction planner changes and when they do they will see all of the changes at once * currProps.keySet().removeIf( * prop -> prop.startsWith("compaction.service.default.planner.opts.")); diff --git a/core/src/main/java/org/apache/accumulo/core/conf/Property.java b/core/src/main/java/org/apache/accumulo/core/conf/Property.java index f48253a812..a3057f9d36 100644 --- a/core/src/main/java/org/apache/accumulo/core/conf/Property.java +++ b/core/src/main/java/org/apache/accumulo/core/conf/Property.java @@ -18,6 +18,8 @@ */ package org.apache.accumulo.core.conf; +import static org.apache.accumulo.core.Constants.DEFAULT_COMPACTION_SERVICE_NAME; + import java.lang.annotation.Annotation; import java.util.Arrays; import java.util.EnumSet; @@ -32,7 +34,7 @@ import org.apache.accumulo.core.file.rfile.RFile; import org.apache.accumulo.core.iterators.IteratorUtil.IteratorScope; import org.apache.accumulo.core.iteratorsImpl.system.DeletingIterator; import org.apache.accumulo.core.metadata.AccumuloTable; -import org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner; +import org.apache.accumulo.core.spi.compaction.RatioBasedCompactionPlanner; import org.apache.accumulo.core.spi.compaction.SimpleCompactionDispatcher; import org.apache.accumulo.core.spi.fs.RandomVolumeChooser; import org.apache.accumulo.core.spi.scan.ScanDispatcher; @@ -49,42 +51,25 @@ public enum Property { "Both major and minor compaction properties can be included under this prefix.", "3.1.0"), COMPACTION_SERVICE_PREFIX(COMPACTION_PREFIX + "service.", null, PropertyType.PREFIX, "This prefix should be used to define all properties for the compaction services." - + "See {% jlink -f org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner %}.\n" + + "See {% jlink -f org.apache.accumulo.core.spi.compaction.RatioBasedCompactionPlanner %}.\n" + "A new external compaction service would be defined like the following:\n" + "`compaction.service.newService.planner=" - + "\"org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner\".`\n" + + "\"org.apache.accumulo.core.spi.compaction.RatioBasedCompactionPlanner\".`\n" + "`compaction.service.newService.opts.groups=\"" - + "[{\"name\": \"small\", \"maxSize\":\"32M\"}," - + "{ \"name\":\"medium\", \"maxSize\":\"512M\"},{\"name\":\"large\"}]`\n" + + "[{\"group\": \"small\", \"maxSize\":\"32M\"}," + + "{ \"group\":\"medium\", \"maxSize\":\"512M\"},{\"group\":\"large\"}]`\n" + "`compaction.service.newService.opts.maxOpen=50`.\n" + "Additional options can be defined using the `compaction.service.<service>.opts.<option>` property.", "3.1.0"), - COMPACTION_SERVICE_ROOT_PLANNER(COMPACTION_SERVICE_PREFIX + "root.planner", - DefaultCompactionPlanner.class.getName(), PropertyType.CLASSNAME, - "Compaction planner for root tablet service.", "4.0.0"), - COMPACTION_SERVICE_ROOT_MAX_OPEN(COMPACTION_SERVICE_PREFIX + "root.planner.opts.maxOpen", "30", - PropertyType.COUNT, "The maximum number of files a compaction will open.", "4.0.0"), - COMPACTION_SERVICE_ROOT_GROUPS(COMPACTION_SERVICE_PREFIX + "root.planner.opts.groups", - "[{'group':'default'}]".replaceAll("'", "\""), PropertyType.JSON, - "See {% jlink -f org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner %}.", - "4.0.0"), - COMPACTION_SERVICE_META_PLANNER(COMPACTION_SERVICE_PREFIX + "meta.planner", - DefaultCompactionPlanner.class.getName(), PropertyType.CLASSNAME, - "Compaction planner for metadata table.", "4.0.0"), - COMPACTION_SERVICE_META_MAX_OPEN(COMPACTION_SERVICE_PREFIX + "meta.planner.opts.maxOpen", "30", - PropertyType.COUNT, "The maximum number of files a compaction will open.", "4.0.0"), - COMPACTION_SERVICE_META_GROUPS(COMPACTION_SERVICE_PREFIX + "meta.planner.opts.groups", - "[{'group':'default'}]".replaceAll("'", "\""), PropertyType.JSON, - "See {% jlink -f org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner %}.", - "4.0.0"), - COMPACTION_SERVICE_DEFAULT_PLANNER(COMPACTION_SERVICE_PREFIX + "default.planner", - DefaultCompactionPlanner.class.getName(), PropertyType.CLASSNAME, + COMPACTION_SERVICE_DEFAULT_PLANNER( + COMPACTION_SERVICE_PREFIX + DEFAULT_COMPACTION_SERVICE_NAME + ".planner", + RatioBasedCompactionPlanner.class.getName(), PropertyType.CLASSNAME, "Planner for default compaction service.", "4.0.0"), - COMPACTION_SERVICE_DEFAULT_MAX_OPEN(COMPACTION_SERVICE_PREFIX + "default.planner.opts.maxOpen", - "10", PropertyType.COUNT, "The maximum number of files a compaction will open.", "4.0.0"), - COMPACTION_SERVICE_DEFAULT_GROUPS(COMPACTION_SERVICE_PREFIX + "default.planner.opts.groups", + COMPACTION_SERVICE_DEFAULT_MAX_OPEN(COMPACTION_SERVICE_DEFAULT_PLANNER + ".opts.maxOpen", "10", + PropertyType.COUNT, "The maximum number of files a compaction will open.", "4.0.0"), + COMPACTION_SERVICE_DEFAULT_GROUPS(COMPACTION_SERVICE_DEFAULT_PLANNER + ".opts.groups", ("[{'group':'default'}]").replaceAll("'", "\""), PropertyType.JSON, - "See {% jlink -f org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner %}.", + "See {% jlink -f org.apache.accumulo.core.spi.compaction.RatioBasedCompactionPlanner %}.", "4.0.0"), COMPACTION_WARN_TIME(COMPACTION_PREFIX + "warn.time", "10m", PropertyType.TIMEDURATION, "When a compaction has not made progress for this time period, a warning will be logged.", @@ -928,8 +913,8 @@ public enum Property { + " from having more RFiles than can be opened. Prior to 2.1.0 this property" + " was used to trigger merging minor compactions, but merging minor compactions" + " were removed in 2.1.0. Now this property is only used by the" - + " DefaultCompactionStrategy and the DefaultCompactionPlanner." - + " The DefaultCompactionPlanner started using this property in 2.1.3, before" + + " DefaultCompactionStrategy and the RatioBasedCompactionPlanner." + + " The RatioBasedCompactionPlanner started using this property in 2.1.3, before" + " that it did not use the property.", "1.4.0"), TABLE_MERGE_FILE_MAX("table.merge.file.max", "10000", PropertyType.COUNT, diff --git a/core/src/main/java/org/apache/accumulo/core/spi/compaction/DefaultCompactionPlanner.java b/core/src/main/java/org/apache/accumulo/core/spi/compaction/RatioBasedCompactionPlanner.java similarity index 99% rename from core/src/main/java/org/apache/accumulo/core/spi/compaction/DefaultCompactionPlanner.java rename to core/src/main/java/org/apache/accumulo/core/spi/compaction/RatioBasedCompactionPlanner.java index 0520db7304..aa5cb8d137 100644 --- a/core/src/main/java/org/apache/accumulo/core/spi/compaction/DefaultCompactionPlanner.java +++ b/core/src/main/java/org/apache/accumulo/core/spi/compaction/RatioBasedCompactionPlanner.java @@ -122,9 +122,9 @@ import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; * @see org.apache.accumulo.core.spi.compaction */ -public class DefaultCompactionPlanner implements CompactionPlanner { +public class RatioBasedCompactionPlanner implements CompactionPlanner { - private final static Logger log = LoggerFactory.getLogger(DefaultCompactionPlanner.class); + private final static Logger log = LoggerFactory.getLogger(RatioBasedCompactionPlanner.class); private static class GroupConfig { String group; diff --git a/core/src/main/java/org/apache/accumulo/core/spi/compaction/SimpleCompactionDispatcher.java b/core/src/main/java/org/apache/accumulo/core/spi/compaction/SimpleCompactionDispatcher.java index 93aff66547..bc5122abd2 100644 --- a/core/src/main/java/org/apache/accumulo/core/spi/compaction/SimpleCompactionDispatcher.java +++ b/core/src/main/java/org/apache/accumulo/core/spi/compaction/SimpleCompactionDispatcher.java @@ -18,6 +18,8 @@ */ package org.apache.accumulo.core.spi.compaction; +import static org.apache.accumulo.core.Constants.DEFAULT_COMPACTION_SERVICE_NAME; + import java.util.EnumMap; import java.util.HashMap; import java.util.Map; @@ -72,7 +74,8 @@ public class SimpleCompactionDispatcher implements CompactionDispatcher { public void init(InitParameters params) { services = new EnumMap<>(CompactionKind.class); - var defaultService = CompactionDispatch.builder().toService("default").build(); + var defaultService = + CompactionDispatch.builder().toService(DEFAULT_COMPACTION_SERVICE_NAME).build(); if (params.getOptions().containsKey("service")) { defaultService = diff --git a/core/src/main/java/org/apache/accumulo/core/spi/compaction/package-info.java b/core/src/main/java/org/apache/accumulo/core/spi/compaction/package-info.java index cb22c0dfa4..55bb627d46 100644 --- a/core/src/main/java/org/apache/accumulo/core/spi/compaction/package-info.java +++ b/core/src/main/java/org/apache/accumulo/core/spi/compaction/package-info.java @@ -45,7 +45,7 @@ * configure a compaction service. It makes decisions about which files to compact on which * compactor groups. See {@link org.apache.accumulo.core.spi.compaction.CompactionPlanner}, * {@link org.apache.accumulo.core.spi.compaction.CompactionPlanner#makePlan(org.apache.accumulo.core.spi.compaction.CompactionPlanner.PlanningParameters)}, - * and {@link org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner} + * and {@link org.apache.accumulo.core.spi.compaction.RatioBasedCompactionPlanner} * </ul> * </ul> * <ul> diff --git a/core/src/test/java/org/apache/accumulo/core/spi/compaction/DefaultCompactionPlannerTest.java b/core/src/test/java/org/apache/accumulo/core/spi/compaction/RatioBasedCompactionPlannerTest.java similarity index 97% rename from core/src/test/java/org/apache/accumulo/core/spi/compaction/DefaultCompactionPlannerTest.java rename to core/src/test/java/org/apache/accumulo/core/spi/compaction/RatioBasedCompactionPlannerTest.java index 8f2f317946..8811360b6c 100644 --- a/core/src/test/java/org/apache/accumulo/core/spi/compaction/DefaultCompactionPlannerTest.java +++ b/core/src/test/java/org/apache/accumulo/core/spi/compaction/RatioBasedCompactionPlannerTest.java @@ -60,7 +60,7 @@ import org.junit.jupiter.api.Test; import com.google.common.base.Preconditions; import com.google.gson.JsonParseException; -public class DefaultCompactionPlannerTest { +public class RatioBasedCompactionPlannerTest { private static <T> T getOnlyElement(Collection<T> c) { return c.stream().collect(onlyElement()); @@ -432,7 +432,7 @@ public class DefaultCompactionPlannerTest { @Test public void testQueueCreation() { - DefaultCompactionPlanner planner = new DefaultCompactionPlanner(); + RatioBasedCompactionPlanner planner = new RatioBasedCompactionPlanner(); String groups = "[{\"group\": \"small\", \"maxSize\":\"32M\"},{\"group\":\"midsize\"}]"; planner.init(getInitParams(defaultConf, groups)); @@ -459,7 +459,7 @@ public class DefaultCompactionPlannerTest { */ @Test public void testErrorAdditionalConfigFields() { - DefaultCompactionPlanner planner = new DefaultCompactionPlanner(); + RatioBasedCompactionPlanner planner = new RatioBasedCompactionPlanner(); String groups = "[{\"group\":\"smallQueue\", \"maxSize\":\"32M\"}, {\"group\":\"largeQueue\", \"type\":\"internal\", \"foo\":\"bar\", \"queue\":\"broken\"}]"; @@ -478,7 +478,7 @@ public class DefaultCompactionPlannerTest { */ @Test public void testErrorGroupNoName() { - DefaultCompactionPlanner planner = new DefaultCompactionPlanner(); + RatioBasedCompactionPlanner planner = new RatioBasedCompactionPlanner(); String groups = "[{\"group\":\"smallQueue\", \"maxSize\":\"32M\"}, {\"maxSize\":\"120M\"}]"; final InitParameters params = getInitParams(defaultConf, groups); @@ -495,7 +495,7 @@ public class DefaultCompactionPlannerTest { */ @Test public void testErrorNoGroups() { - DefaultCompactionPlanner planner = new DefaultCompactionPlanner(); + RatioBasedCompactionPlanner planner = new RatioBasedCompactionPlanner(); var groupParams = getInitParams(defaultConf, ""); assertNotNull(groupParams); @@ -510,7 +510,7 @@ public class DefaultCompactionPlannerTest { */ @Test public void testErrorOnlyOneMaxSize() { - DefaultCompactionPlanner planner = new DefaultCompactionPlanner(); + RatioBasedCompactionPlanner planner = new RatioBasedCompactionPlanner(); String groups = "[{\"group\":\"small\", \"maxSize\":\"32M\"}, {\"group\":\"medium\"}, {\"group\":\"large\"}]"; var e = assertThrows(IllegalArgumentException.class, @@ -524,7 +524,7 @@ public class DefaultCompactionPlannerTest { */ @Test public void testErrorDuplicateMaxSize() { - DefaultCompactionPlanner planner = new DefaultCompactionPlanner(); + RatioBasedCompactionPlanner planner = new RatioBasedCompactionPlanner(); String groups = "[{\"group\":\"small\", \"maxSize\":\"32M\"}, {\"group\":\"medium\", \"maxSize\":\"32M\"}, {\"group\":\"large\"}]"; var e = assertThrows(IllegalArgumentException.class, @@ -749,7 +749,8 @@ public class DefaultCompactionPlannerTest { private static void testFFtC(Set<CompactableFile> expected, Set<CompactableFile> files, double ratio, int maxFiles, long maxSize) { - var result = DefaultCompactionPlanner.findDataFilesToCompact(files, ratio, maxFiles, maxSize); + var result = + RatioBasedCompactionPlanner.findDataFilesToCompact(files, ratio, maxFiles, maxSize); var expectedNames = expected.stream().map(CompactableFile::getUri).map(URI::getPath) .map(path -> path.split("/")).map(t -> t[t.length - 1]).collect(toSet()); var resultNames = result.stream().map(CompactableFile::getUri).map(URI::getPath) @@ -837,8 +838,8 @@ public class DefaultCompactionPlannerTest { return new CompactionPlannerInitParams(csid, prefix, options, senv); } - private static DefaultCompactionPlanner createPlanner(Configuration conf, String groups) { - DefaultCompactionPlanner planner = new DefaultCompactionPlanner(); + private static RatioBasedCompactionPlanner createPlanner(Configuration conf, String groups) { + RatioBasedCompactionPlanner planner = new RatioBasedCompactionPlanner(); var initParams = getInitParams(conf, groups); planner.init(initParams); return planner; diff --git a/core/src/test/java/org/apache/accumulo/core/util/compaction/CompactionServicesConfigTest.java b/core/src/test/java/org/apache/accumulo/core/util/compaction/CompactionServicesConfigTest.java index 981f9d1d6b..0a7a4dc049 100644 --- a/core/src/test/java/org/apache/accumulo/core/util/compaction/CompactionServicesConfigTest.java +++ b/core/src/test/java/org/apache/accumulo/core/util/compaction/CompactionServicesConfigTest.java @@ -18,13 +18,14 @@ */ package org.apache.accumulo.core.util.compaction; +import static org.apache.accumulo.core.Constants.DEFAULT_COMPACTION_SERVICE_NAME; import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.Map; import org.apache.accumulo.core.conf.ConfigurationCopy; import org.apache.accumulo.core.conf.Property; -import org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner; +import org.apache.accumulo.core.spi.compaction.RatioBasedCompactionPlanner; import org.junit.jupiter.api.Test; public class CompactionServicesConfigTest { @@ -35,17 +36,18 @@ public class CompactionServicesConfigTest { public void testCompactionProps() { ConfigurationCopy conf = new ConfigurationCopy(); - conf.set(prefix.getKey() + "default.planner", DefaultCompactionPlanner.class.getName()); - conf.set(prefix.getKey() + "default.planner.opts.maxOpen", "10"); - conf.set(prefix.getKey() + "default.planner.opts.groups", - "[{'name':'small','maxSize':'32M'},{'name':'medium','maxSize':'128M'},{'name':'large'}]"); + conf.set(prefix.getKey() + DEFAULT_COMPACTION_SERVICE_NAME + ".planner", + RatioBasedCompactionPlanner.class.getName()); + conf.set(prefix.getKey() + DEFAULT_COMPACTION_SERVICE_NAME + ".planner.opts.maxOpen", "10"); + conf.set(prefix.getKey() + DEFAULT_COMPACTION_SERVICE_NAME + ".planner.opts.groups", + "[{'group':'small','maxSize':'32M'},{'group':'medium','maxSize':'128M'},{'group':'large'}]"); - conf.set(prefix.getKey() + "default.planner.opts.validProp", "1"); + conf.set(prefix.getKey() + DEFAULT_COMPACTION_SERVICE_NAME + ".planner.opts.validProp", "1"); var compactionConfig = new CompactionServicesConfig(conf); assertEquals(Map.of("maxOpen", "10", "groups", - "[{'name':'small','maxSize':'32M'},{'name':'medium','maxSize':'128M'},{'name':'large'}]", - "validProp", "1"), compactionConfig.getOptions().get("default")); + "[{'group':'small','maxSize':'32M'},{'group':'medium','maxSize':'128M'},{'group':'large'}]", + "validProp", "1"), compactionConfig.getOptions().get(DEFAULT_COMPACTION_SERVICE_NAME)); } @Test @@ -53,7 +55,7 @@ public class CompactionServicesConfigTest { ConfigurationCopy conf = new ConfigurationCopy(); CompactionServicesConfig compactionConfig; - conf.set(prefix.getKey() + "cs1.planner", DefaultCompactionPlanner.class.getName()); + conf.set(prefix.getKey() + "cs1.planner", RatioBasedCompactionPlanner.class.getName()); conf.set(prefix.getKey() + "cs1.rate.limit", "2M"); compactionConfig = new CompactionServicesConfig(conf); assertEquals(2097152, compactionConfig.getRateLimits().get("cs1")); diff --git a/minicluster/src/main/java/org/apache/accumulo/miniclusterImpl/MiniAccumuloConfigImpl.java b/minicluster/src/main/java/org/apache/accumulo/miniclusterImpl/MiniAccumuloConfigImpl.java index cb9d86837a..8c8db3f4a9 100644 --- a/minicluster/src/main/java/org/apache/accumulo/miniclusterImpl/MiniAccumuloConfigImpl.java +++ b/minicluster/src/main/java/org/apache/accumulo/miniclusterImpl/MiniAccumuloConfigImpl.java @@ -166,16 +166,6 @@ public class MiniAccumuloConfigImpl { mergeProp(Property.MANAGER_COMPACTION_SERVICE_PRIORITY_QUEUE_SIZE.getKey(), Property.MANAGER_COMPACTION_SERVICE_PRIORITY_QUEUE_SIZE.getDefaultValue()); - mergeProp(Property.COMPACTION_SERVICE_ROOT_PLANNER.getKey(), - Property.COMPACTION_SERVICE_ROOT_PLANNER.getDefaultValue()); - mergeProp(Property.COMPACTION_SERVICE_ROOT_GROUPS.getKey(), - Property.COMPACTION_SERVICE_ROOT_GROUPS.getDefaultValue()); - - mergeProp(Property.COMPACTION_SERVICE_META_PLANNER.getKey(), - Property.COMPACTION_SERVICE_META_PLANNER.getDefaultValue()); - mergeProp(Property.COMPACTION_SERVICE_META_GROUPS.getKey(), - Property.COMPACTION_SERVICE_META_GROUPS.getDefaultValue()); - mergeProp(Property.COMPACTION_SERVICE_DEFAULT_PLANNER.getKey(), Property.COMPACTION_SERVICE_DEFAULT_PLANNER.getDefaultValue()); diff --git a/server/base/src/main/java/org/apache/accumulo/server/conf/CheckCompactionConfig.java b/server/base/src/main/java/org/apache/accumulo/server/conf/CheckCompactionConfig.java index 46d65f9e1a..7206f2d89b 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/conf/CheckCompactionConfig.java +++ b/server/base/src/main/java/org/apache/accumulo/server/conf/CheckCompactionConfig.java @@ -18,6 +18,8 @@ */ package org.apache.accumulo.server.conf; +import static org.apache.accumulo.core.Constants.DEFAULT_COMPACTION_SERVICE_NAME; + import java.io.FileNotFoundException; import java.nio.file.Path; import java.util.Set; @@ -53,10 +55,6 @@ public class CheckCompactionConfig implements KeywordExecutable { private final static Logger log = LoggerFactory.getLogger(CheckCompactionConfig.class); - final static String DEFAULT = "default"; - final static String META = "meta"; - final static String ROOT = "root"; - static class Opts extends Help { @Parameter(description = "<path> Local path to file containing compaction configuration", required = true) @@ -95,9 +93,9 @@ public class CheckCompactionConfig implements KeywordExecutable { var servicesConfig = new CompactionServicesConfig(config); ServiceEnvironment senv = createServiceEnvironment(config); - Set<String> defaultServices = Set.of(DEFAULT, META, ROOT); - if (servicesConfig.getPlanners().keySet().equals(defaultServices)) { - log.warn("Only the default compaction services were created - {}", defaultServices); + Set<String> defaultService = Set.of(DEFAULT_COMPACTION_SERVICE_NAME); + if (servicesConfig.getPlanners().keySet().equals(defaultService)) { + log.warn("Only the default compaction service was created - {}", defaultService); return; } diff --git a/server/base/src/main/java/org/apache/accumulo/server/init/InitialConfiguration.java b/server/base/src/main/java/org/apache/accumulo/server/init/InitialConfiguration.java index 99b896719c..e932e0af15 100644 --- a/server/base/src/main/java/org/apache/accumulo/server/init/InitialConfiguration.java +++ b/server/base/src/main/java/org/apache/accumulo/server/init/InitialConfiguration.java @@ -28,7 +28,6 @@ import org.apache.accumulo.core.conf.SiteConfiguration; import org.apache.accumulo.core.iterators.user.VersioningIterator; import org.apache.accumulo.core.metadata.AccumuloTable; import org.apache.accumulo.core.metadata.schema.MetadataSchema; -import org.apache.accumulo.core.spi.compaction.SimpleCompactionDispatcher; import org.apache.accumulo.core.volume.VolumeConfiguration; import org.apache.accumulo.server.constraints.MetadataConstraints; import org.apache.hadoop.conf.Configuration; @@ -49,9 +48,6 @@ class InitialConfiguration { InitialConfiguration(Configuration hadoopConf, SiteConfiguration siteConf) { this.hadoopConf = hadoopConf; this.siteConf = siteConf; - initialRootConf.put(Property.TABLE_COMPACTION_DISPATCHER.getKey(), - SimpleCompactionDispatcher.class.getName()); - initialRootConf.put(Property.TABLE_COMPACTION_DISPATCHER_OPTS.getKey() + "service", "root"); initialRootMetaConf.put(Property.TABLE_FILE_COMPRESSED_BLOCK_SIZE.getKey(), "32K"); initialRootMetaConf.put(Property.TABLE_FILE_REPLICATION.getKey(), "5"); @@ -86,11 +82,7 @@ class InitialConfiguration { initialRootMetaConf.put(Property.TABLE_INDEXCACHE_ENABLED.getKey(), "true"); initialRootMetaConf.put(Property.TABLE_BLOCKCACHE_ENABLED.getKey(), "true"); - initialMetaConf.put(Property.TABLE_COMPACTION_DISPATCHER.getKey(), - SimpleCompactionDispatcher.class.getName()); - initialMetaConf.put(Property.TABLE_COMPACTION_DISPATCHER_OPTS.getKey() + "service", "meta"); - - // TODO configure initial fate table config.. probably needs compaction config?? + // ELASTICITY_TODO configure initial fate table config int max = hadoopConf.getInt("dfs.replication.max", 512); // Hadoop 0.23 switched the min value configuration name diff --git a/server/base/src/test/java/org/apache/accumulo/server/conf/CheckCompactionConfigTest.java b/server/base/src/test/java/org/apache/accumulo/server/conf/CheckCompactionConfigTest.java index 5490a21ee1..9bb7cc163f 100644 --- a/server/base/src/test/java/org/apache/accumulo/server/conf/CheckCompactionConfigTest.java +++ b/server/base/src/test/java/org/apache/accumulo/server/conf/CheckCompactionConfigTest.java @@ -50,7 +50,7 @@ public class CheckCompactionConfigTest extends WithTestNames { @Test public void testValidInput1() throws Exception { String inputString = ("compaction.service.cs1.planner=" - + "org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner \n" + + "org.apache.accumulo.core.spi.compaction.RatioBasedCompactionPlanner \n" + "compaction.service.cs1.planner.opts.groups=\\\n" + "[{'group':'small','maxSize':'16M'},{'group':'medium','maxSize':'128M'},\\\n" + "{'group':'large'}]").replaceAll("'", "\""); @@ -63,11 +63,11 @@ public class CheckCompactionConfigTest extends WithTestNames { @Test public void testValidInput2() throws Exception { String inputString = ("compaction.service.cs1.planner=" - + "org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner \n" + + "org.apache.accumulo.core.spi.compaction.RatioBasedCompactionPlanner \n" + "compaction.service.cs1.planner.opts.groups=\\\n" + "[{'group':'small','maxSize':'16M'},{'group':'medium','maxSize':'128M'},\\\n" + "{'group':'large'}] \ncompaction.service.cs2.planner=" - + "org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner \n" + + "org.apache.accumulo.core.spi.compaction.RatioBasedCompactionPlanner \n" + "compaction.service.cs2.planner.opts.groups=\\\n" + "[{'group':'small','maxSize':'16M'},{'group':'medium','maxSize':'128M'},\\\n" + "{'group':'large'}]").replaceAll("'", "\""); @@ -80,15 +80,15 @@ public class CheckCompactionConfigTest extends WithTestNames { @Test public void testValidInput3() throws Exception { String inputString = ("compaction.service.cs1.planner=" - + "org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner \n" + + "org.apache.accumulo.core.spi.compaction.RatioBasedCompactionPlanner \n" + "compaction.service.cs1.planner.opts.groups=\\\n" + "[{'group':'small','maxSize':'16M'},{'group':'medium','maxSize':'128M'},\\\n" + "{'group':'large'}] \ncompaction.service.cs2.planner=" - + "org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner \n" + + "org.apache.accumulo.core.spi.compaction.RatioBasedCompactionPlanner \n" + "compaction.service.cs2.planner.opts.groups=\\\n" + "[{'group':'small','maxSize':'16M'}, {'group':'medium','maxSize':'128M'},\\\n" + "{'group':'large'}] \ncompaction.service.cs3.planner=" - + "org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner \n" + + "org.apache.accumulo.core.spi.compaction.RatioBasedCompactionPlanner \n" + "compaction.service.cs3.planner.opts.groups=\\\n" + "[{'group':'small','maxSize':'16M'},{'group':'large'}]").replaceAll("'", "\""); @@ -99,12 +99,12 @@ public class CheckCompactionConfigTest extends WithTestNames { @Test public void testThrowsInvalidFieldsError() throws IOException { String inputString = ("compaction.service.cs1.planner=" - + "org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner \n" + + "org.apache.accumulo.core.spi.compaction.RatioBasedCompactionPlanner \n" + "compaction.service.cs1.planner.opts.groups=\\\n" + "[{'group':'small','maxSize':'16M'},{'group':'medium','maxSize':'128M'},\\\n" + "{'group':'large','numThreads':2}]").replaceAll("'", "\""); String expectedErrorMsg = - "Invalid fields: [numThreads] provided for class: org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner$GroupConfig"; + "Invalid fields: [numThreads] provided for class: org.apache.accumulo.core.spi.compaction.RatioBasedCompactionPlanner$GroupConfig"; String filePath = writeToFileAndReturnPath(inputString); @@ -131,7 +131,7 @@ public class CheckCompactionConfigTest extends WithTestNames { @Test public void testRepeatedCompactionGroup() throws Exception { String inputString = ("compaction.service.cs1.planner=" - + "org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner \n" + + "org.apache.accumulo.core.spi.compaction.RatioBasedCompactionPlanner \n" + "compaction.service.cs1.planner.opts.groups=\\\n" + "[{'group':'small','maxSize':'16M'},{'group':'medium','maxSize':'128M'},\\\n" + "{'group':'small'}]").replaceAll("'", "\""); @@ -147,7 +147,7 @@ public class CheckCompactionConfigTest extends WithTestNames { @Test public void testInvalidMaxSize() throws Exception { String inputString = ("compaction.service.cs1.planner=" - + "org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner \n" + + "org.apache.accumulo.core.spi.compaction.RatioBasedCompactionPlanner \n" + "compaction.service.cs1.planner.opts.groups=\\\n" + "[{'group':'small','maxSize':'16M'},{'group':'medium','maxSize':'0M'},\\\n" + "{'group':'large'}]").replaceAll("'", "\""); diff --git a/test/src/main/java/org/apache/accumulo/test/compaction/BadCompactionServiceConfigIT.java b/test/src/main/java/org/apache/accumulo/test/compaction/BadCompactionServiceConfigIT.java index 1aaa507fb3..96b74c0d25 100644 --- a/test/src/main/java/org/apache/accumulo/test/compaction/BadCompactionServiceConfigIT.java +++ b/test/src/main/java/org/apache/accumulo/test/compaction/BadCompactionServiceConfigIT.java @@ -18,6 +18,7 @@ */ package org.apache.accumulo.test.compaction; +import static org.apache.accumulo.core.Constants.DEFAULT_COMPACTION_SERVICE_NAME; import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.Collections; @@ -41,7 +42,7 @@ import org.apache.accumulo.core.data.Key; import org.apache.accumulo.core.data.Mutation; import org.apache.accumulo.core.data.Value; import org.apache.accumulo.core.iterators.Filter; -import org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner; +import org.apache.accumulo.core.spi.compaction.RatioBasedCompactionPlanner; import org.apache.accumulo.harness.MiniClusterConfigurationCallback; import org.apache.accumulo.harness.SharedMiniClusterBase; import org.apache.accumulo.minicluster.ServerType; @@ -69,9 +70,11 @@ public class BadCompactionServiceConfigIT extends SharedMiniClusterBase { @Override public void configureMiniCluster(MiniAccumuloConfigImpl cfg, Configuration hadoopCoreSite) { Map<String,String> siteCfg = new HashMap<>(); - siteCfg.put(CSP + "default.planner", DefaultCompactionPlanner.class.getName()); - siteCfg.put(CSP + "default.planner.opts.groups", "[{\"group\":\"default_group\"}]"); - siteCfg.put(CSP + "cs1.planner", DefaultCompactionPlanner.class.getName()); + siteCfg.put(CSP + DEFAULT_COMPACTION_SERVICE_NAME + ".planner", + RatioBasedCompactionPlanner.class.getName()); + siteCfg.put(CSP + DEFAULT_COMPACTION_SERVICE_NAME + ".planner.opts.groups", + "[{\"group\":\"default\"}]"); + siteCfg.put(CSP + "cs1.planner", RatioBasedCompactionPlanner.class.getName()); // place invalid json in the planners config siteCfg.put(CSP + "cs1.planner.opts.groups", "{{'group]"); cfg.setSiteConfig(siteCfg); @@ -225,7 +228,8 @@ public class BadCompactionServiceConfigIT extends SharedMiniClusterBase { // fix the compaction dispatcher config client.tableOperations().setProperty(table, - Property.TABLE_COMPACTION_DISPATCHER_OPTS.getKey() + "service", "default"); + Property.TABLE_COMPACTION_DISPATCHER_OPTS.getKey() + "service", + DEFAULT_COMPACTION_SERVICE_NAME); } catch (Exception e) { throw new RuntimeException(e); diff --git a/test/src/main/java/org/apache/accumulo/test/compaction/CompactionConfigChangeIT.java b/test/src/main/java/org/apache/accumulo/test/compaction/CompactionConfigChangeIT.java index d0e5797505..c734493287 100644 --- a/test/src/main/java/org/apache/accumulo/test/compaction/CompactionConfigChangeIT.java +++ b/test/src/main/java/org/apache/accumulo/test/compaction/CompactionConfigChangeIT.java @@ -31,7 +31,7 @@ import org.apache.accumulo.core.client.IteratorSetting; import org.apache.accumulo.core.client.admin.CompactionConfig; import org.apache.accumulo.core.clientImpl.ClientContext; import org.apache.accumulo.core.conf.Property; -import org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner; +import org.apache.accumulo.core.spi.compaction.RatioBasedCompactionPlanner; import org.apache.accumulo.harness.AccumuloClusterHarness; import org.apache.accumulo.miniclusterImpl.MiniAccumuloConfigImpl; import org.apache.accumulo.test.functional.SlowIterator; @@ -49,7 +49,7 @@ public class CompactionConfigChangeIT extends AccumuloClusterHarness { cfg.getClusterServerConfiguration().addCompactorResourceGroup("big", 1); cfg.setProperty(Property.COMPACTION_SERVICE_PREFIX.getKey() + "cs1.planner", - DefaultCompactionPlanner.class.getName()); + RatioBasedCompactionPlanner.class.getName()); cfg.setProperty(Property.COMPACTION_SERVICE_PREFIX.getKey() + "cs1.planner.opts.groups", ("[{'group':'small','maxSize':'2M'}, {'group':'medium','maxSize':'128M'}," + "{'group':'large'}]").replaceAll("'", "\"")); diff --git a/test/src/main/java/org/apache/accumulo/test/compaction/CompactionPriorityQueueMetricsIT.java b/test/src/main/java/org/apache/accumulo/test/compaction/CompactionPriorityQueueMetricsIT.java index d202df8b16..800ceffbcd 100644 --- a/test/src/main/java/org/apache/accumulo/test/compaction/CompactionPriorityQueueMetricsIT.java +++ b/test/src/main/java/org/apache/accumulo/test/compaction/CompactionPriorityQueueMetricsIT.java @@ -57,7 +57,7 @@ import org.apache.accumulo.core.metrics.MetricsProducer; import org.apache.accumulo.core.metrics.MetricsUtil; import org.apache.accumulo.core.security.Authorizations; import org.apache.accumulo.core.spi.compaction.CompactionKind; -import org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner; +import org.apache.accumulo.core.spi.compaction.RatioBasedCompactionPlanner; import org.apache.accumulo.core.spi.compaction.SimpleCompactionDispatcher; import org.apache.accumulo.core.spi.crypto.NoCryptoServiceFactory; import org.apache.accumulo.core.util.UtilWaitThread; @@ -155,7 +155,7 @@ public class CompactionPriorityQueueMetricsIT extends SharedMiniClusterBase { // Create a new queue with zero compactors. cfg.setProperty(Property.COMPACTION_SERVICE_PREFIX.getKey() + QUEUE1_SERVICE + ".planner", - DefaultCompactionPlanner.class.getName()); + RatioBasedCompactionPlanner.class.getName()); cfg.setProperty( Property.COMPACTION_SERVICE_PREFIX.getKey() + QUEUE1_SERVICE + ".planner.opts.groups", "[{'group':'" + QUEUE1 + "'}]"); diff --git a/test/src/main/java/org/apache/accumulo/test/compaction/ExternalCompactionTestUtils.java b/test/src/main/java/org/apache/accumulo/test/compaction/ExternalCompactionTestUtils.java index c9cd441c18..20e6efc499 100644 --- a/test/src/main/java/org/apache/accumulo/test/compaction/ExternalCompactionTestUtils.java +++ b/test/src/main/java/org/apache/accumulo/test/compaction/ExternalCompactionTestUtils.java @@ -62,7 +62,7 @@ import org.apache.accumulo.core.metadata.schema.TabletMetadata.ColumnType; import org.apache.accumulo.core.metadata.schema.TabletsMetadata; import org.apache.accumulo.core.rpc.ThriftUtil; import org.apache.accumulo.core.rpc.clients.ThriftClientTypes; -import org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner; +import org.apache.accumulo.core.spi.compaction.RatioBasedCompactionPlanner; import org.apache.accumulo.core.spi.compaction.SimpleCompactionDispatcher; import org.apache.accumulo.core.trace.TraceUtil; import org.apache.accumulo.core.util.UtilWaitThread; @@ -196,35 +196,35 @@ public class ExternalCompactionTestUtils { // configure the compaction services to use the queues cfg.setProperty(Property.COMPACTION_SERVICE_PREFIX.getKey() + "cs1.planner", - DefaultCompactionPlanner.class.getName()); + RatioBasedCompactionPlanner.class.getName()); cfg.setProperty(Property.COMPACTION_SERVICE_PREFIX.getKey() + "cs1.planner.opts.groups", "[{'group':'" + GROUP1 + "'}]"); cfg.setProperty(Property.COMPACTION_SERVICE_PREFIX.getKey() + "cs2.planner", - DefaultCompactionPlanner.class.getName()); + RatioBasedCompactionPlanner.class.getName()); cfg.setProperty(Property.COMPACTION_SERVICE_PREFIX.getKey() + "cs2.planner.opts.groups", "[{'group':'" + GROUP2 + "'}]"); cfg.setProperty(Property.COMPACTION_SERVICE_PREFIX.getKey() + "cs3.planner", - DefaultCompactionPlanner.class.getName()); + RatioBasedCompactionPlanner.class.getName()); cfg.setProperty(Property.COMPACTION_SERVICE_PREFIX.getKey() + "cs3.planner.opts.groups", "[{'group':'" + GROUP3 + "'}]"); cfg.setProperty(Property.COMPACTION_SERVICE_PREFIX.getKey() + "cs4.planner", - DefaultCompactionPlanner.class.getName()); + RatioBasedCompactionPlanner.class.getName()); cfg.setProperty(Property.COMPACTION_SERVICE_PREFIX.getKey() + "cs4.planner.opts.groups", "[{'group':'" + GROUP4 + "'}]"); cfg.setProperty(Property.COMPACTION_SERVICE_PREFIX.getKey() + "cs5.planner", - DefaultCompactionPlanner.class.getName()); + RatioBasedCompactionPlanner.class.getName()); cfg.setProperty(Property.COMPACTION_SERVICE_PREFIX.getKey() + "cs5.planner.opts.groups", "[{'group':'" + GROUP5 + "'}]"); cfg.setProperty(Property.COMPACTION_SERVICE_PREFIX.getKey() + "cs6.planner", - DefaultCompactionPlanner.class.getName()); + RatioBasedCompactionPlanner.class.getName()); cfg.setProperty(Property.COMPACTION_SERVICE_PREFIX.getKey() + "cs6.planner.opts.groups", "[{'group':'" + GROUP6 + "'}]"); cfg.setProperty(Property.COMPACTION_SERVICE_PREFIX.getKey() + "cs7.planner", - DefaultCompactionPlanner.class.getName()); + RatioBasedCompactionPlanner.class.getName()); cfg.setProperty(Property.COMPACTION_SERVICE_PREFIX.getKey() + "cs7.planner.opts.groups", "[{'group':'" + GROUP7 + "'}]"); cfg.setProperty(Property.COMPACTION_SERVICE_PREFIX.getKey() + "cs8.planner", - DefaultCompactionPlanner.class.getName()); + RatioBasedCompactionPlanner.class.getName()); cfg.setProperty(Property.COMPACTION_SERVICE_PREFIX.getKey() + "cs8.planner.opts.groups", "[{'group':'" + GROUP8 + "'}]"); cfg.setProperty(Property.COMPACTION_COORDINATOR_FINALIZER_COMPLETION_CHECK_INTERVAL, "5s"); diff --git a/test/src/main/java/org/apache/accumulo/test/functional/CompactionIT.java b/test/src/main/java/org/apache/accumulo/test/functional/CompactionIT.java index 5ba42775f1..55dce03c35 100644 --- a/test/src/main/java/org/apache/accumulo/test/functional/CompactionIT.java +++ b/test/src/main/java/org/apache/accumulo/test/functional/CompactionIT.java @@ -86,7 +86,7 @@ import org.apache.accumulo.core.metadata.schema.TabletMetadata.ColumnType; import org.apache.accumulo.core.metadata.schema.TabletsMetadata; import org.apache.accumulo.core.security.Authorizations; import org.apache.accumulo.core.spi.compaction.CompactionKind; -import org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner; +import org.apache.accumulo.core.spi.compaction.RatioBasedCompactionPlanner; import org.apache.accumulo.core.spi.compaction.SimpleCompactionDispatcher; import org.apache.accumulo.harness.AccumuloClusterHarness; import org.apache.accumulo.minicluster.ServerType; @@ -836,7 +836,7 @@ public class CompactionIT extends AccumuloClusterHarness { // create a compaction service named deleteme c.instanceOperations().setProperty( Property.COMPACTION_SERVICE_PREFIX.getKey() + "deleteme.planner", - DefaultCompactionPlanner.class.getName()); + RatioBasedCompactionPlanner.class.getName()); c.instanceOperations().setProperty( Property.COMPACTION_SERVICE_PREFIX.getKey() + "deleteme.planner.opts.groups", ("[{'group':'" + COMPACTOR_GROUP_1 + "'}]").replaceAll("'", "\"")); @@ -844,7 +844,7 @@ public class CompactionIT extends AccumuloClusterHarness { // create a compaction service named keepme c.instanceOperations().setProperty( Property.COMPACTION_SERVICE_PREFIX.getKey() + "keepme.planner", - DefaultCompactionPlanner.class.getName()); + RatioBasedCompactionPlanner.class.getName()); c.instanceOperations().setProperty( Property.COMPACTION_SERVICE_PREFIX.getKey() + "keepme.planner.opts.groups", ("[{'group':'" + COMPACTOR_GROUP_2 + "'}]").replaceAll("'", "\"")); @@ -884,7 +884,7 @@ public class CompactionIT extends AccumuloClusterHarness { // add a new compaction service named newcs c.instanceOperations().setProperty( Property.COMPACTION_SERVICE_PREFIX.getKey() + "newcs.planner", - DefaultCompactionPlanner.class.getName()); + RatioBasedCompactionPlanner.class.getName()); c.instanceOperations().setProperty( Property.COMPACTION_SERVICE_PREFIX.getKey() + "newcs.planner.opts.groups", ("[{'group':'" + COMPACTOR_GROUP_2 + "'}]").replaceAll("'", "\"")); diff --git a/test/src/main/java/org/apache/accumulo/test/shell/ConfigSetIT.java b/test/src/main/java/org/apache/accumulo/test/shell/ConfigSetIT.java index c62ce13133..e520683843 100644 --- a/test/src/main/java/org/apache/accumulo/test/shell/ConfigSetIT.java +++ b/test/src/main/java/org/apache/accumulo/test/shell/ConfigSetIT.java @@ -18,7 +18,7 @@ */ package org.apache.accumulo.test.shell; -import static org.apache.accumulo.core.conf.Property.COMPACTION_SERVICE_ROOT_GROUPS; +import static org.apache.accumulo.core.conf.Property.COMPACTION_SERVICE_DEFAULT_GROUPS; import static org.apache.accumulo.core.conf.Property.MONITOR_RESOURCES_EXTERNAL; import static org.apache.accumulo.harness.AccumuloITBase.MINI_CLUSTER_ONLY; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -60,7 +60,8 @@ public class ConfigSetIT extends SharedMiniClusterBase { try (AccumuloClient client = getCluster().createAccumuloClient("root", new PasswordToken(getRootPassword()))) { - client.instanceOperations().setProperty(COMPACTION_SERVICE_ROOT_GROUPS.getKey(), validJson); + client.instanceOperations().setProperty(COMPACTION_SERVICE_DEFAULT_GROUPS.getKey(), + validJson); assertThrows(AccumuloException.class, () -> client.instanceOperations() .setProperty(MONITOR_RESOURCES_EXTERNAL.getKey(), invalidJson));