Apache Accumulo 2.1.4

20 Aug 2025

About

Apache Accumulo 2.1.4 is a patch release of the 2.1 LTM line. It contains bug fixes and minor enhancements. This version supersedes earlier 2.1 releases and users upgrading to 2.1 should upgrade directly to this version instead of any prior 2.1 release.

Notable Changes

  • #5446 Many dependencies were updated, to include protobuf-java which was updated from 3.22.0 to 3.25.6 due to a vulnerability. Users may run into a runtime exception added in https://github.com/protocolbuffers/protobuf/pull/20084 when using old generated Protobuf files. Users may need to address any compatibility issues with this version of protobuf-java, if their code also makes use of this library.
  • #5073 #5034 Added accumulo check-accumulo-properties command that can be run before an instance is initialized to check the properties file.
  • #5193 Added accumulo admin signalShutdown command to signal the server process to initiate a graceful shutdown. Compactors will finish the major compaction that they are currently working on, then will exit. Scan Servers will return a busy signal to all clients for new scan requests, and will shutdown when all in-progress scans have closed. Tablet Servers will signal the Manager that they are shutting down, which should prevent assignment of tablets to that server, then they will unload all tablets and shut down. The Monitor, Manager, GarbageCollector, and CompactionCoordinator will shut down also. The last step in the shutdown process for all servers is to remove their lock in ZooKeeper.
  • #5438 Added accumulo upgrade --prepare command which should be used after shutting down an instance in preparation for an upgrade. This will check that no Fate transactions exist, delete any ZooKeeper locks for server processes, and prohibit any server processes from being started.
  • #4898 New way to compute bulk load plans. This adds two new APIs for computing which tablets should load a rfile. APIs were also added to serialize, deserialize, and merge load plans. These primitives provide building blocks for doing distributed computation of load plans over a set of rfiles.
  • #5169 #5170 The TabletServer will halt itself when a walog write or minc failure occurs and the TabletServer lock is not held in ZooKeeper.
  • #5145 #5132 The Manager and TabletServer processes now have a background thread that can be enabled via the property general.server.lock.verification.interval to validate that the process is holding the lock in ZooKeeper. The existing mechanism of relying on a Watcher to notify the process that the lock has been lost can be a problem due to the fact that there is a single thread in the ZooKeeper client that fires Watcher events. If the thread is currently waiting on a hung Watcher, then subsequent Watcher events will not fire and could leave the server running without a lock.
  • #5174 #5035 #5502 #5439 Many improvements to the accumulo-cluster and accumulo-service scripts have been backported from the main branch. This includes syntax changes. Users should review the scripts for changes that may effect them. Changes were made to the default conf/accumulo-env.sh file to support the changes in those scripts, so users should pay particular attention to the changes in that configuration file.
  • #5688 Added option to the Shell config command to show experimental properties.
  • #5689 Modified tokenizer in Shell to provide better support for json values.
  • #5726 Added new configuration properties for the Compactor to specify backoff behavior when compactions are failing consecutively. This would likely occur when there is a misconfiguration. This change also includes new logging in the Compactor and Coordinator, and new metrics being emitted by the Compactor.
  • #5729 Monitor now supports hosting behind a proxy by specifying a base directory.
  • #5779 Admin serviceStatus command now report summaries per resource group.
  • #5743 Added per table and per compaction erasure code configuration.
  • #5720 Added ability to configure compactions differently per tablet and per output path.
  • #5588 and #5675 together these change make compaction planning look ahead more than once to find sets of files to compact that would not include smaller sets of files that could compact or are compacting.

Configuration Improvements

  • #4723 #5239 Changes to properties tserver.session.idle.max and tserver.session.update.idle.max no longer require a TabletServer restart.
  • #5397 #5399 Added property gc.threads.delete.wal to control the number of threads to use for deleting write-ahead logs and recovery files.
  • #5341 Created an optimization in Bulk Import v2 to enable faster processing of bulk import files when loading into a sparse set of tablets in a large table. See new table property table.bulk.metadata.skip.distance.
  • #5628 #5627 Made the number of threads the manager uses to scan the metadata to find tablets that need attention configurable. This scan uses iterators that can have a large set of options, added a property to optionally compress these iterator options.
  • #5633 Added a new property for server processes advertise address allowing different bind and advertise addresses.
  • #5638 Added a new property to disable assignment and balancing when the number of tserver is below the configured value. Disabled by default.
  • #5632 Improved handling fixed properties that require a server restart.

Notable Bug Fixes

  • #5033 #5038 Group names in cluster.yaml must conform to bash variable name rules or an error will be raised when parsing the cluster.yaml file.
  • #5221 The shell will now print to stdout, instead of stderr, when there is no terminal set. This will help with piping the output of the shell to other commands such as grep.
  • #5396 Modified accumulo-cluster to stop GC and ScanServer processes first when stopping the cluster. These processes write to the metadata table, which can lead to slower shutdown times.
  • #4868 #4871 Fixed listscans so that it shows a scan session id for batch scans instead of always showing zero.
  • #4845 InstanceOperations.getActiveCompaction(String) did not handle the address of a Compactor process being passed in the parameter. This has been fixed.
  • #5445 The cf and cq options for the DeleteMany and Grep shell commands were not being handled properly.
  • #5570 Fixed race condition where an external compaction would be forgotten with its files indefinitely reserved for a compaction that is no longer running. This condition would continue until the tablet server hosting the tablet was restarted.
  • #5543 #5552 #5543 Fixed multiple bugs that could destabilize external compactions.
  • #5707 Fixes a bug where an external compaction would not start.

Metrics Improvements

  • #4756 #4757 #4840 Added metric to indicate how many zombie scan threads are running in the TabletServer.
  • #5011 Added queue tag to metrics emitted from the External Compactor processes.
  • #5025 #4922 Added property general.micrometer.log.metrics to enable metrics on the log4j2 or logback logging frameworks. Disabled by default.

Other Improvements

  • #4755 #5220 Fixed the help flag for the admin command so that it works for subcommands.
  • #4819 Tablets that are closing will no longer wait on scans to complete. Instead they will try to interrupt the scan and then continue closing the tablet so that it can be migrated. It’s possible that a zombie scan thread could remain in the TabletServer, if the scan thread is blocked on something and does not die. Users should monitor the new zombie scan metric mentioned in the section above.
  • #4867 Lowered the memory burden of listing a large number of External Compactors in the Monitor.
  • #5026 Modified CompactionJobPrioritizer.createPriority to give a higher priority to tablets that have more files than the maximum number of files per tablet.
  • #5400 Modified AESCryptoService to prevent the creation of overlapping streams.

Semver violations

The following are changes since 2.1.3 that violate semver. Writing code that uses these new methods will make it incompatible with 2.1.3 and earlier.

Class Changes
o.a.a.core.client.admin.InstanceOperations added Set<String> getCompactors()
o.a.a.core.client.admin.compaction.CompactionConfigurer.InitParameters added TabletId getTabletId() and URI getOutputFile()
o.a.a.core.client.rfile.RFile.WriterOptions added WriterOptions withSplitResolver(LoadPlan.SplitResolver splitResolver)
o.a.a.core.data.LoadPlan added String toJson(), LoadPlan fromJson(String json), LoadPlan compute(...), interface SplitResolver
o.a.a.core.data.TabletId added of(TableId tableId, String endRow, String prevEndRow) and also added Text and byte[] versions
o.a.a.core.iterators.IteratorEnvironment removed default methods that threw UnsupportedOperationException
o.a.a.core.spi.balancer.DoNothingBalancer This entire class was added
o.a.a.core.spi.balancer.TabletBalancer.BalanceParameters added String partitionName(), Map<String,TableId> getTablesToBalance()
o.a.a.core.spi.compaction.CompactionPlanner.PlanningParameters added NamespaceId getNamespaceId() and TabletId getTabletId()
o.a.a.core.spi.compaction.DefaultCompactionPlanner added a new configuration option tserver.compaction.major.service.<service>.opts.lowestRatio

Requirements

Accumulo 2.1.4 now requires JDK 17 to build, but still supports Java 11 runtime.

Upgrading

View the Upgrading Accumulo documentation for guidance.


View all releases in the archive