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
commit 9c7c467a5614c095d4a78c3bd0e8440841e5669b Merge: 9fa27a6d4d c4c8c572c8 Author: Daniel Roberts <ddani...@gmail.com> AuthorDate: Wed Oct 25 03:45:44 2023 +0000 Merge branch 'main' into elasticity .../org/apache/accumulo/core/conf/Property.java | 246 ++++++++++----------- .../org/apache/accumulo/core/gc/Reference.java | 7 + .../accumulo/core/gc/ReferenceDirectory.java | 2 +- .../org/apache/accumulo/core/gc/ReferenceFile.java | 32 ++- .../apache/accumulo/core/conf/PropertyTest.java | 4 + .../accumulo/server/gc/AllVolumesDirectory.java | 2 +- .../accumulo/server/metadata/ServerAmpleImpl.java | 4 +- .../accumulo/server/util/MetadataTableUtil.java | 2 +- .../main/java/org/apache/accumulo/gc/GCRun.java | 31 +-- .../accumulo/gc/GarbageCollectionAlgorithm.java | 16 +- .../apache/accumulo/gc/GarbageCollectionTest.java | 164 +++++++++----- .../tableOps/bulkVer2/CleanUpBulkImport.java | 2 +- .../test/functional/GarbageCollectorIT.java | 2 +- 13 files changed, 293 insertions(+), 221 deletions(-) diff --cc core/src/main/java/org/apache/accumulo/core/conf/Property.java index 0b4df706b0,58be89df05..d2dea79464 --- a/core/src/main/java/org/apache/accumulo/core/conf/Property.java +++ b/core/src/main/java/org/apache/accumulo/core/conf/Property.java @@@ -298,19 -297,16 +298,19 @@@ public enum Property "3.0.0"), GENERAL_MAX_SCANNER_RETRY_PERIOD("general.max.scanner.retry.period", "5s", PropertyType.TIMEDURATION, - "The maximum amount of time that a Scanner should wait before retrying a failed RPC", + "The maximum amount of time that a Scanner should wait before retrying a failed RPC.", "1.7.3"), + GENERAL_MICROMETER_CACHE_METRICS_ENABLED("general.micrometer.cache.metrics.enabled", "false", - PropertyType.BOOLEAN, "Enables Caffeine Cache metrics functionality using Micrometer", ++ PropertyType.BOOLEAN, "Enables Caffeine Cache metrics functionality using Micrometer.", + "4.0.0"), GENERAL_MICROMETER_ENABLED("general.micrometer.enabled", "false", PropertyType.BOOLEAN, - "Enables metrics functionality using Micrometer", "2.1.0"), + "Enables metrics functionality using Micrometer.", "2.1.0"), GENERAL_MICROMETER_JVM_METRICS_ENABLED("general.micrometer.jvm.metrics.enabled", "false", - PropertyType.BOOLEAN, "Enables JVM metrics functionality using Micrometer", "2.1.0"), + PropertyType.BOOLEAN, "Enables JVM metrics functionality using Micrometer.", "2.1.0"), GENERAL_MICROMETER_FACTORY("general.micrometer.factory", "", PropertyType.CLASSNAME, - "Name of class that implements MeterRegistryFactory", "2.1.0"), + "Name of class that implements MeterRegistryFactory.", "2.1.0"), GENERAL_PROCESS_BIND_ADDRESS("general.process.bind.addr", "0.0.0.0", PropertyType.STRING, - "The local IP address to which this server should bind for sending and receiving network traffic", + "The local IP address to which this server should bind for sending and receiving network traffic.", "3.0.0"), // properties that are specific to manager server behavior MANAGER_PREFIX("manager.", null, PropertyType.PREFIX, @@@ -326,13 -322,8 +326,13 @@@ PropertyType.TIMEDURATION, "Time to wait between scanning tablet states to identify tablets that need to be assigned, un-assigned, migrated, etc.", "2.1.2"), + MANAGER_TABLET_GROUP_WATCHER_SCAN_THREADS("manager.tablet.watcher.scan.threads.max", "16", + PropertyType.COUNT, + "Maximum number of threads the TabletGroupWatcher will use in its BatchScanner to" - + " look for tablets that need maintenance", ++ + " look for tablets that need maintenance.", + "4.0.0"), MANAGER_BULK_TIMEOUT("manager.bulk.timeout", "5m", PropertyType.TIMEDURATION, - "The time to wait for a tablet server to process a bulk import request", "1.4.3"), + "The time to wait for a tablet server to process a bulk import request.", "1.4.3"), MANAGER_RENAME_THREADS("manager.rename.threadpool.size", "20", PropertyType.COUNT, "The number of threads to use when renaming user files during table import or bulk ingest.", "2.1.0"), @@@ -383,13 -374,8 +383,13 @@@ "Maximum time manager will wait for tserver available threshold " + "to be reached before continuing. When set to 0 or less, will block " + "indefinitely. Default is 0 to block indefinitely. Only valid when tserver available " - + "threshold is set greater than 0. Added with version 1.10", + + "threshold is set greater than 0.", "1.10.0"), + MANAGER_SPLIT_WORKER_THREADS("manager.split.inspection.threadpool.size", "8", PropertyType.COUNT, + "The number of threads used to inspect tablets files to find split points.", "4.0.0"), + + MANAGER_COMPACTION_SERVICE_PRIORITY_QUEUE_SIZE("manager.compaction.major.service.queue.size", - "10000", PropertyType.COUNT, "The max size of the priority queue", "4.0"), ++ "10000", PropertyType.COUNT, "The max size of the priority queue.", "4.0"), // properties that are specific to scan server behavior @Experimental SSERV_PREFIX("sserver.", null, PropertyType.PREFIX, @@@ -580,53 -565,72 +580,53 @@@ "Max time for the thrift client handler to wait for scan results before timing out.", "2.1.0"), TSERV_MIGRATE_MAXCONCURRENT("tserver.migrations.concurrent.max", "1", PropertyType.COUNT, - "The maximum number of concurrent tablet migrations for a tablet server", "1.3.5"), + "The maximum number of concurrent tablet migrations for a tablet server.", "1.3.5"), + // ELASTICITY_TODO look into removing this prop, may need to deprecate in 3.0 TSERV_MAJC_DELAY("tserver.compaction.major.delay", "30s", PropertyType.TIMEDURATION, "Time a tablet server will sleep between checking which tablets need compaction.", "1.3.5"), TSERV_COMPACTION_SERVICE_PREFIX("tserver.compaction.major.service.", null, PropertyType.PREFIX, "Prefix for compaction services.", "2.1.0"), TSERV_COMPACTION_SERVICE_ROOT_PLANNER("tserver.compaction.major.service.root.planner", DefaultCompactionPlanner.class.getName(), PropertyType.CLASSNAME, - "Compaction planner for root tablet service", "2.1.0"), + "Compaction planner for root tablet service.", "2.1.0"), - @Deprecated(since = "3.1", forRemoval = true) - TSERV_COMPACTION_SERVICE_ROOT_RATE_LIMIT("tserver.compaction.major.service.root.rate.limit", "0B", - PropertyType.BYTES, - "Maximum number of bytes to read or write per second over all major" - + " compactions in this compaction service, or 0B for unlimited.", - "2.1.0"), TSERV_COMPACTION_SERVICE_ROOT_MAX_OPEN( "tserver.compaction.major.service.root.planner.opts.maxOpen", "30", PropertyType.COUNT, - "The maximum number of files a compaction will open", "2.1.0"), + "The maximum number of files a compaction will open.", "2.1.0"), TSERV_COMPACTION_SERVICE_ROOT_EXECUTORS( "tserver.compaction.major.service.root.planner.opts.executors", - "[{'name':'small','type':'internal','maxSize':'32M','numThreads':1},{'name':'huge','type':'internal','numThreads':1}]" - .replaceAll("'", "\""), + "[{'name':'all','type':'external','group':'accumulo_meta'}]".replaceAll("'", "\""), PropertyType.STRING, - "See {% jlink -f org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner %} ", + "See {% jlink -f org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner %}.", "2.1.0"), TSERV_COMPACTION_SERVICE_META_PLANNER("tserver.compaction.major.service.meta.planner", DefaultCompactionPlanner.class.getName(), PropertyType.CLASSNAME, - "Compaction planner for metadata table", "2.1.0"), + "Compaction planner for metadata table.", "2.1.0"), - @Deprecated(since = "3.1", forRemoval = true) - TSERV_COMPACTION_SERVICE_META_RATE_LIMIT("tserver.compaction.major.service.meta.rate.limit", "0B", - PropertyType.BYTES, - "Maximum number of bytes to read or write per second over all major" - + " compactions in this compaction service, or 0B for unlimited.", - "2.1.0"), TSERV_COMPACTION_SERVICE_META_MAX_OPEN( "tserver.compaction.major.service.meta.planner.opts.maxOpen", "30", PropertyType.COUNT, - "The maximum number of files a compaction will open", "2.1.0"), + "The maximum number of files a compaction will open.", "2.1.0"), TSERV_COMPACTION_SERVICE_META_EXECUTORS( "tserver.compaction.major.service.meta.planner.opts.executors", - "[{'name':'small','type':'internal','maxSize':'32M','numThreads':2},{'name':'huge','type':'internal','numThreads':2}]" - .replaceAll("'", "\""), + "[{'name':'all','type':'external','group':'accumulo_meta'}]".replaceAll("'", "\""), PropertyType.STRING, - "See {% jlink -f org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner %} ", + "See {% jlink -f org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner %}.", "2.1.0"), TSERV_COMPACTION_SERVICE_DEFAULT_PLANNER("tserver.compaction.major.service.default.planner", DefaultCompactionPlanner.class.getName(), PropertyType.CLASSNAME, "Planner for default compaction service.", "2.1.0"), - @Deprecated(since = "3.1", forRemoval = true) - TSERV_COMPACTION_SERVICE_DEFAULT_RATE_LIMIT("tserver.compaction.major.service.default.rate.limit", - "0B", PropertyType.BYTES, - "Maximum number of bytes to read or write per second over all major" - + " compactions in this compaction service, or 0B for unlimited.", - "2.1.0"), TSERV_COMPACTION_SERVICE_DEFAULT_MAX_OPEN( "tserver.compaction.major.service.default.planner.opts.maxOpen", "10", PropertyType.COUNT, - "The maximum number of files a compaction will open", "2.1.0"), + "The maximum number of files a compaction will open.", "2.1.0"), TSERV_COMPACTION_SERVICE_DEFAULT_EXECUTORS( "tserver.compaction.major.service.default.planner.opts.executors", - "[{'name':'small','type':'internal','maxSize':'32M','numThreads':2},{'name':'medium','type':'internal','maxSize':'128M','numThreads':2},{'name':'large','type':'internal','numThreads':2}]" + ("[{'name':'small','type':'external','maxSize':'128M','group':'user_small'}, {'name':'large','type':'external','group':'user_large'}]") .replaceAll("'", "\""), PropertyType.STRING, - "See {% jlink -f org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner %} ", + "See {% jlink -f org.apache.accumulo.core.spi.compaction.DefaultCompactionPlanner %}.", "2.1.0"), TSERV_MINC_MAXCONCURRENT("tserver.compaction.minor.concurrent.max", "4", PropertyType.COUNT, - "The maximum number of concurrent minor compactions for a tablet server", "1.3.5"), + "The maximum number of concurrent minor compactions for a tablet server.", "1.3.5"), TSERV_COMPACTION_WARN_TIME("tserver.compaction.warn.time", "10m", PropertyType.TIMEDURATION, - "When a compaction has not made progress for this time period, a warning will be logged", + "When a compaction has not made progress for this time period, a warning will be logged.", "1.6.0"), TSERV_BLOOM_LOAD_MAXCONCURRENT("tserver.bloom.load.concurrent.max", "4", PropertyType.COUNT, "The number of concurrent threads that will load bloom filters in the background. " @@@ -731,14 -736,6 +731,14 @@@ + " tserver is available before tablets are initially assigned if the 'last' location is" + " to be used.", "2.1.1"), + TSERV_ONDEMAND_UNLOADER_INTERVAL("tserver.ondemand.tablet.unloader.interval", "10m", + PropertyType.TIMEDURATION, - "The interval at which the TabletServer will check if on-demand tablets can be unloaded", ++ "The interval at which the TabletServer will check if on-demand tablets can be unloaded.", + "4.0.0"), + TSERV_GROUP_NAME("tserver.group", Constants.DEFAULT_RESOURCE_GROUP_NAME, PropertyType.STRING, + "Resource group name for this TabletServer. Resource groups can be defined to dedicate resources " - + " to specific tables (e.g. balancing tablets for table(s) within a group, see TableLoadBalancer)", ++ + " to specific tables (e.g. balancing tablets for table(s) within a group, see TableLoadBalancer).", + "4.0.0"), // accumulo garbage collector properties GC_PREFIX("gc.", null, PropertyType.PREFIX, @@@ -877,11 -874,7 +877,11 @@@ "A plugin that can dynamically configure compaction output files based on input files.", "2.1.0"), TABLE_COMPACTION_CONFIGURER_OPTS("table.compaction.configurer.opts.", null, PropertyType.PREFIX, - "Options for the table compaction configuror", "2.1.0"), + "Options for the table compaction configuror.", "2.1.0"), + TABLE_ONDEMAND_UNLOADER("tserver.ondemand.tablet.unloader", + "org.apache.accumulo.core.spi.ondemand.DefaultOnDemandTabletUnloader", PropertyType.CLASSNAME, + "The class that will be used to determine which on-demand Tablets to unload.", "4.0.0"), + // Crypto-related properties @Experimental TABLE_CRYPTO_PREFIX("table.crypto.opts.", null, PropertyType.PREFIX, @@@ -1094,20 -1088,12 +1094,20 @@@ COMPACTOR_PREFIX("compactor.", null, PropertyType.PREFIX, "Properties in this category affect the behavior of the accumulo compactor server.", "2.1.0"), @Experimental - COMPACTOR_PORTSEARCH("compactor.port.search", "false", PropertyType.BOOLEAN, + COMPACTOR_PORTSEARCH("compactor.port.search", "true", PropertyType.BOOLEAN, - "If the compactor.port.client is in use, search higher ports until one is available", + "If the compactor.port.client is in use, search higher ports until one is available.", "2.1.0"), @Experimental COMPACTOR_CLIENTPORT("compactor.port.client", "9133", PropertyType.PORT, - "The port used for handling client connections on the compactor servers", "2.1.0"), + "The port used for handling client connections on the compactor servers.", "2.1.0"), + COMPACTOR_MIN_JOB_WAIT_TIME("compactor.wait.time.job.min", "1s", PropertyType.TIMEDURATION, + "The minimum amount of time to wait between checks for the next compaction job, backing off" + + "exponentially until COMPACTOR_MAX_JOB_WAIT_TIME is reached.", + "4.0.0"), + COMPACTOR_MAX_JOB_WAIT_TIME("compactor.wait.time.job.max", "5m", PropertyType.TIMEDURATION, + "Compactors do exponential backoff when their request for work repeatedly come back empty. " + + "This is the maximum amount of time to wait between checks for the next compaction job.", + "4.0.0"), @Experimental COMPACTOR_MINTHREADS("compactor.threads.minimum", "1", PropertyType.COUNT, "The minimum number of threads to use to handle incoming requests.", "2.1.0"), diff --cc server/manager/src/main/java/org/apache/accumulo/manager/tableOps/bulkVer2/CleanUpBulkImport.java index 7ccfbcdf95,562423750b..0d28058822 --- a/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/bulkVer2/CleanUpBulkImport.java +++ b/server/manager/src/main/java/org/apache/accumulo/manager/tableOps/bulkVer2/CleanUpBulkImport.java @@@ -66,15 -59,17 +66,15 @@@ public class CleanUpBulkImport extends ample.removeBulkLoadInProgressFlag( "/" + bulkDir.getParent().getName() + "/" + bulkDir.getName()); ample.putGcFileAndDirCandidates(info.tableId, - Collections.singleton(new ReferenceFile(info.tableId, bulkDir))); + Collections.singleton(ReferenceFile.forFile(info.tableId, bulkDir))); - if (info.tableState == TableState.ONLINE) { - Text firstSplit = info.firstSplit == null ? null : new Text(info.firstSplit); - Text lastSplit = info.lastSplit == null ? null : new Text(info.lastSplit); + Text firstSplit = info.firstSplit == null ? null : new Text(info.firstSplit); + Text lastSplit = info.lastSplit == null ? null : new Text(info.lastSplit); - log.debug("{} removing the metadata table markers for loaded files in range {} {}", - FateTxId.formatTid(tid), firstSplit, lastSplit); + log.debug("{} removing the metadata table markers for loaded files in range {} {}", + FateTxId.formatTid(tid), firstSplit, lastSplit); + removeBulkLoadEntries(ample, info.tableId, tid, firstSplit, lastSplit); - ample.removeBulkLoadEntries(info.tableId, tid, firstSplit, lastSplit); - } Utils.unreserveHdfsDirectory(manager, info.sourceDir, tid); Utils.getReadLock(manager, info.tableId, tid).unlock(); // delete json renames and mapping files