Skip to content

underscore in Compactor resource group name is causing failure in Monitor #6539

Description

@dlmarion

Testing 4.0.0-alpha-1-rc1 and found an issue in the Monitor. It failed with:

2026-09-17T16:53:26,738 Thread[62] [next.InformationFetcher] ERROR: Error getting status from future
java.util.concurrent.ExecutionException: java.lang.NullPointerException: Cannot invoke "java.util.Map.containsKey(Object)" because the return value of "org.apache.accumulo.core.spi.compaction.CompactionPlanner$InitParameters.getOptions()" is null
        at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
        at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
        at org.apache.accumulo.monitor.next.InformationFetcher.run(InformationFetcher.java:930)
        at org.apache.accumulo.core.util.threads.Threads.lambda$createCriticalThread$0(Threads.java:76)
        at org.apache.accumulo.core.trace.TraceWrappedRunnable.run(TraceWrappedRunnable.java:52)
        at java.base/java.lang.Thread.run(Thread.java:840)
Caused by: java.lang.NullPointerException: Cannot invoke "java.util.Map.containsKey(Object)" because the return value of "org.apache.accumulo.core.spi.compaction.CompactionPlanner$InitParameters.getOptions()" is null
        at org.apache.accumulo.core.spi.compaction.RatioBasedCompactionPlanner.init(RatioBasedCompactionPlanner.java:186)
        at org.apache.accumulo.server.compaction.CompactionPluginUtils.getConfiguredCompactionResourceGroups(CompactionPluginUtils.java:379)
        at org.apache.accumulo.monitor.next.InformationFetcher$ConfiguredCompactionResourceGroupFetcher.run(InformationFetcher.java:504)
        at org.apache.accumulo.core.trace.TraceWrappedRunnable.run(TraceWrappedRunnable.java:52)
        at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at org.apache.accumulo.core.trace.TraceWrappedRunnable.run(TraceWrappedRunnable.java:52)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        ... 2 more
java.lang.IllegalArgumentException: Group name 'user.small' is invalid. Valid names must match the pattern: ^[a-zA-Z]+(_?[a-zA-Z0-9])*$
        at org.apache.accumulo.core.data.ResourceGroupId.validateGroupName(ResourceGroupId.java:55)
        at org.apache.accumulo.core.data.ResourceGroupId.<init>(ResourceGroupId.java:46)
        at org.apache.accumulo.core.data.ResourceGroupId.lambda$of$0(ResourceGroupId.java:66)
        at com.github.benmanes.caffeine.cache.BoundedLocalCache.lambda$doComputeIfAbsent$0(BoundedLocalCache.java:2767)
        at java.base/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1916)
        at com.github.benmanes.caffeine.cache.BoundedLocalCache.doComputeIfAbsent(BoundedLocalCache.java:2765)
        at com.github.benmanes.caffeine.cache.BoundedLocalCache.computeIfAbsent(BoundedLocalCache.java:2756)
        at com.github.benmanes.caffeine.cache.LocalCache.computeIfAbsent(LocalCache.java:132)
        at com.github.benmanes.caffeine.cache.LocalManualCache.get(LocalManualCache.java:63)
        at org.apache.accumulo.core.data.ResourceGroupId.of(ResourceGroupId.java:66)
        at org.apache.accumulo.monitor.next.SystemInformation.createCompactionQueueSummary(SystemInformation.java:878)
        at org.apache.accumulo.monitor.next.SystemInformation.finish(SystemInformation.java:1459)
        at org.apache.accumulo.monitor.next.InformationFetcher.run(InformationFetcher.java:988)
        at org.apache.accumulo.core.util.threads.Threads.lambda$createCriticalThread$0(Threads.java:76)
        at org.apache.accumulo.core.trace.TraceWrappedRunnable.run(TraceWrappedRunnable.java:52)
        at java.base/java.lang.Thread.run(Thread.java:840)

The Monitor failed after I made the following changes in the shell:

config -s compaction.service.ci.planner=org.apache.accumulo.core.spi.compaction.RatioBasedCompactionPlanner
config -s compaction.service.ci.planner.opts.groups=[{"group":"user_small","maxSize":"32M"},{"group":"user_large"}]
config -t ci -s table.compaction.dispatcher.opts.service=ci

The Monitor is using the Metric resource group tag value, user.small in this case, which doesn't exist. This is because Micrometer converts all underscores to periods in tag values by default.

Activity

  1. added this to the 4.0.0 milestone on Sep 17, 2026
  2. added
    bugThis issue has been verified to be a bug.
    on Sep 17, 2026
  3. modified the milestones: 4.0.0-alpha-1, 4.0.0 on Sep 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugThis issue has been verified to be a bug.

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions