This is an automated email from the ASF dual-hosted git repository.
dlmarion pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/accumulo-website.git
The following commit(s) were added to refs/heads/main by this push:
new 7802de56a Started draft 4.0.0 release notes. Added table of API
changes. (#461)
7802de56a is described below
commit 7802de56a99ff7d47b7c1ae50568aa2980da9b33
Author: Dave Marion <[email protected]>
AuthorDate: Tue Aug 25 16:51:59 2026 -0400
Started draft 4.0.0 release notes. Added table of API changes. (#461)
---
.gitignore | 2 +
_posts/release/2026-08-24-accumulo-4.0.0-alpha1.md | 250 +++++++++++++++++++++
2 files changed, 252 insertions(+)
diff --git a/.gitignore b/.gitignore
index 47aab836c..fe90b3b19 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,5 @@
/.idea
/*.iml
/.bundle/
+.project
+.settings/
diff --git a/_posts/release/2026-08-24-accumulo-4.0.0-alpha1.md
b/_posts/release/2026-08-24-accumulo-4.0.0-alpha1.md
new file mode 100644
index 000000000..b62473d7e
--- /dev/null
+++ b/_posts/release/2026-08-24-accumulo-4.0.0-alpha1.md
@@ -0,0 +1,250 @@
+---
+title: Apache Accumulo 4.0.0 Alpha 1
+sortableversion: '04.00.00'
+draft: true
+---
+## About
+
+Apache Accumulo 4.0.0 is a non-LTM major version release that contains
+a large number of internal changes that allow a lot of flexibility in
+the way that Accumulo is deployed with a small number of API changes.
+A high level overview of some of the changes are described in [this][blog]
+blog post.
+
+## Notable Changes
+
+* Accumulo 4.0.0 requires Java 21 for compilation and Java 17 for runtime.
+
+* Bulk Import V1 has been removed. Users will need to migrate to Bulk Import
V2.
+
+* Tablet merges no longer require a chop compaction on the participating
files. To facilitate
+ this the file entry in the tablet metadata now includes the range for the
tablet data in
+ the file.
+
+* FaTE locks include tablet ranges where possible to allow for concurrent FaTE
operations
+ on non-overlapping tablet ranges.
+
+* The CompactionCoordinator process no longer exists, its functionality was
moved into the Manager.
+
+* Non-system tablets will be optionally hosted by default. Operations
requiring a tablet to be
+ hosted (live ingest and immediate consistency scans) will instruct the
Manager to temporarily
+ assign the Tablet. Users can change the default hosting semantics for
Tablets when creating
+ the table, using the TableOperations API, or the appropriate command in the
Shell. Tablets
+ that are temporarily assigned are unloaded according to the logic in the
OnDemandTabletUnloader
+ plugin being used, specified by the property
'tserver.ondemand.tablet.unloader'. The default
+ implementation will unload tablets that have not been used in 10 minutes,
which can be changed
+ by the property 'tserver.ondemand.tablet.unloader.interval'.
+
+* Considering TabletServers optionally host Tablets, all Tablet management
functions (e.g. merge,
+ split, compaction initiation, bulk import, etc.) have been moved into the
Manager. TabletServers no longer
+ perform major compactions making Compactor processes mandatory (ScanServers
remain an optional
+ feature).
+
+* Tablets in a table can now be automatically merged. There is a manager
property to control the
+ interval at which tablets are checked and a table property to control the
threshold for an
+ automatic merge. Tablet mergeability can be specified at table creation time
or using
+ `TableOperations.putSplits`. The upgrade process sets the tablet
mergeability to never for
+ all existing tablets to preserve any user created split points. Tablet
mergeability can be
+ set when adding new splits and will be set to always when the split is
created by the system
+ based on user settings. See [merging][merge] for more information.
+
+* Split and Merge operations, which are now just metadata operations, can be
much faster for tablets
+ that are not hosted. For tablets that are hosted in a TabletServer, they are
temporarily unloaded
+ before the operation executes.
+
+* Multiple active Manager processes are supported. One active Manager is
considered the "primary"
+ Manager and the others are considered "assistant" Managers. Clients will
connect to the primary
+ Manager for Thrift operations requiring the Manager. If the primary Manager
process dies then one
+ of the assistant Managers will become the Primary. The assistant Managers
participate in
+ processing FaTE transactions, but not tablet management or coordinating
major compactions.
+
+* New table property `table.compaction.minor.age` will cause a minor
compaction to be
+ initiated when the oldest key-value in a Tablets' in-memory-map exceeds the
value. This could
+ be useful when using Scan Servers in conjunction with the Tablet Metadata
expiration property.
+
+* The HostRegexTableLoadBalancer has been deprecated. Similar functionality
can be achieved using
+ the TableLoadBalancer and setting the property
`table.custom.assignment.group` on a table
+ that references a set of Tablet Servers using the same resource group name.
+
+* The Monitor has been re-worked to mostly use the metrics emitted by the
various server processes.
+ While the Monitor server does make some RPC calls, metrics will need to be
enabled using the
+ property `general.micrometer.enabled` on all server processes for the
Monitor to work properly.
+ Endpoints for retrieving the underlying data from the Monitor server in XML
or JSON format have
+ been removed. Users are encouraged to set up their own metric collection
system for gathering
+ and visualizing metric data.
+
+* Log recovery work may now be performed in Compactor, Scan Server, and Tablet
Server processes.
+
+* User FaTE transactions are now stored in a table in the system namespace.
System FaTE transactions
+ remain stored in ZooKeeper.
+
+* Scan Server file references have been moved out of the metadata table and
into their own table
+ in the system namespace.
+
+* A Resource Group configuration layer has been added that allows the user to
override system-level
+ properties for resource group processes.
+
+* Table configuration properties are now only allowed in the Namespace and
Table configuration layers.
+
+* The command line utilities have been updated. Run `accumulo --help` to see
the changes. A bash
+ completion script can be generated using the command `accumulo conf
create-autocomplete-script`.
+
+* The number of threads used to process FaTE transactions can be configured by
FaTE transaction type
+ for both user and system FaTE transactions.
+
+
+## API Changes (from 2.1.6)
+
+<details markdown="1">
+ <summary>Click to see API changes</summary>
+
+### Additions
+
+|Change|Object|
+|------|------|
+|Abstract method was added.|method long
org.apache.accumulo.core.client.admin.ActiveCompaction::getPausedCount()|
+|Abstract method was added.|method
org.apache.accumulo.core.client.admin.servers.ServerId
org.apache.accumulo.core.client.admin.ActiveCompaction::getServerId()|
+|Abstract method was added.|method
org.apache.accumulo.core.client.admin.servers.ServerId
org.apache.accumulo.core.client.admin.ActiveScan::getServerId()|
+|Method was added to an interface.|method boolean
org.apache.accumulo.core.iterators.IteratorEnvironment::isRunningLowOnMemory()|
+|Method was added to an interface.|method java.lang.String
org.apache.accumulo.core.client.admin.TableOperations::getNamespace(java.lang.String)|
+|Method was added to an interface.|method java.time.Duration
org.apache.accumulo.core.client.admin.InstanceOperations::getManagerTime()
throws org.apache.accumulo.core.client.AccumuloException,
org.apache.accumulo.core.client.AccumuloSecurityException|
+|Method was added to an interface.|method
java.util.List<org.apache.accumulo.core.client.admin.ActiveCompaction>
org.apache.accumulo.core.client.admin.InstanceOperations::getActiveCompactions(java.util.Collection<org.apache.accumulo.core.client.admin.servers.ServerId>)
throws org.apache.accumulo.core.client.AccumuloException,
org.apache.accumulo.core.client.AccumuloSecurityException|
+|Method was added to an interface.|method
java.util.List<org.apache.accumulo.core.client.admin.ActiveScan>
org.apache.accumulo.core.client.admin.InstanceOperations::getActiveScans(java.util.Collection<org.apache.accumulo.core.client.admin.servers.ServerId>)
throws org.apache.accumulo.core.client.AccumuloException,
org.apache.accumulo.core.client.AccumuloSecurityException|
+|Method was added to an interface.|method java.util.Map<java.lang.String,
java.lang.String>
org.apache.accumulo.core.client.admin.InstanceOperations::getSystemProperties()
throws org.apache.accumulo.core.client.AccumuloException,
org.apache.accumulo.core.client.AccumuloSecurityException|
+|Method was added to an interface.|method
java.util.Set<org.apache.accumulo.core.client.admin.compaction.CompactableFile>
org.apache.accumulo.core.client.admin.compaction.CompactionConfigurer.InputParameters::getSelectedFiles()|
+|Method was added to an interface.|method
java.util.Set<org.apache.accumulo.core.client.admin.servers.ServerId>
org.apache.accumulo.core.client.admin.InstanceOperations::getServers(org.apache.accumulo.core.client.admin.servers.ServerId.Type)|
+|Method was added to an interface.|method
java.util.Set<org.apache.accumulo.core.client.admin.servers.ServerId>
org.apache.accumulo.core.client.admin.InstanceOperations::getServers(org.apache.accumulo.core.client.admin.servers.ServerId.Type,
java.util.function.Predicate<org.apache.accumulo.core.data.ResourceGroupId>,
java.util.function.BiPredicate<java.lang.String, java.lang.Integer>)|
+|Method was added to an interface.|method
org.apache.accumulo.core.client.admin.ResourceGroupOperations
org.apache.accumulo.core.client.AccumuloClient::resourceGroupOperations()|
+|Method was added to an interface.|method
org.apache.accumulo.core.client.admin.servers.ServerId
org.apache.accumulo.core.client.admin.InstanceOperations::getServer(org.apache.accumulo.core.client.admin.servers.ServerId.Type,
org.apache.accumulo.core.data.ResourceGroupId, java.lang.String, int)|
+|Method was added to an interface.|method
org.apache.accumulo.core.client.rfile.RFile.ScannerFSOptions
org.apache.accumulo.core.client.rfile.RFile.InputArguments::from(org.apache.accumulo.core.client.rfile.RFile.InputArguments.FencedPath[])|
+|Method was added to an interface.|method
org.apache.accumulo.core.data.KeyBuilder.Build
org.apache.accumulo.core.data.KeyBuilder.ColumnVisibilityStep::visibility(org.apache.accumulo.core.data.ByteSequence)|
+|Method was added to an interface.|method
org.apache.accumulo.core.data.KeyBuilder.ColumnFamilyStep
org.apache.accumulo.core.data.KeyBuilder.RowStep::row(org.apache.accumulo.core.data.ByteSequence)|
+|Method was added to an interface.|method
org.apache.accumulo.core.data.KeyBuilder.ColumnQualifierStep
org.apache.accumulo.core.data.KeyBuilder.ColumnFamilyStep::family(org.apache.accumulo.core.data.ByteSequence)|
+|Method was added to an interface.|method
org.apache.accumulo.core.data.KeyBuilder.ColumnVisibilityStep
org.apache.accumulo.core.data.KeyBuilder.ColumnQualifierStep::qualifier(org.apache.accumulo.core.data.ByteSequence)|
+|Method was added to an interface.|method
org.apache.accumulo.core.data.Mutation.TimestampOptions
org.apache.accumulo.core.data.Mutation.FamilyOptions::keyColumns(org.apache.accumulo.core.data.Key)|
+|Method was added to an interface.|method
org.apache.accumulo.core.data.RowRange
org.apache.accumulo.core.client.admin.compaction.CompactableFile::getRange()|
+|Method was added to an interface.|method
org.apache.accumulo.core.data.TabletId
org.apache.accumulo.core.client.admin.compaction.CompactionSelector.SelectionParameters::getTabletId()|
+|Method was added to an interface.|method org.apache.hadoop.io.Text
org.apache.accumulo.core.client.admin.TableOperations::getMaxRow(java.lang.String,
org.apache.accumulo.core.security.Authorizations,
org.apache.accumulo.core.data.RowRange) throws
org.apache.accumulo.core.client.TableNotFoundException,
org.apache.accumulo.core.client.AccumuloException,
org.apache.accumulo.core.client.AccumuloSecurityException|
+|Method was added to an interface.|method void
org.apache.accumulo.core.client.admin.InstanceOperations::ping(org.apache.accumulo.core.client.admin.servers.ServerId)
throws org.apache.accumulo.core.client.AccumuloException|
+|Method was added to an interface.|method void
org.apache.accumulo.core.client.admin.TableOperations::putSplits(java.lang.String,
java.util.SortedMap<org.apache.hadoop.io.Text,
org.apache.accumulo.core.client.admin.TabletMergeability>) throws
org.apache.accumulo.core.client.TableNotFoundException,
org.apache.accumulo.core.client.AccumuloException,
org.apache.accumulo.core.client.AccumuloSecurityException|
+
+
+### Removals
+
+|Change|Object|
+|------|------|
+|Class was removed.|class
org.apache.accumulo.core.client.admin.CompactionStrategyConfig|
+|Class was removed.|class org.apache.accumulo.core.client.ClientConfiguration|
+|Class was removed.|class org.apache.accumulo.core.client.Connector|
+|Class was removed.|class
org.apache.accumulo.core.client.mapred.AbstractInputFormat<K, V>|
+|Class was removed.|class
org.apache.accumulo.core.client.mapred.AccumuloFileOutputFormat|
+|Class was removed.|class
org.apache.accumulo.core.client.mapred.AccumuloInputFormat|
+|Class was removed.|class
org.apache.accumulo.core.client.mapred.AccumuloMultiTableInputFormat|
+|Class was removed.|class
org.apache.accumulo.core.client.mapred.AccumuloOutputFormat|
+|Class was removed.|class
org.apache.accumulo.core.client.mapred.AccumuloRowInputFormat|
+|Class was removed.|class
org.apache.accumulo.core.client.mapred.InputFormatBase<K, V>|
+|Class was removed.|class
org.apache.accumulo.core.client.mapred.RangeInputSplit|
+|Class was removed.|class
org.apache.accumulo.core.client.mapreduce.AbstractInputFormat<K, V>|
+|Class was removed.|class
org.apache.accumulo.core.client.mapreduce.AccumuloFileOutputFormat|
+|Class was removed.|class
org.apache.accumulo.core.client.mapreduce.AccumuloInputFormat|
+|Class was removed.|class
org.apache.accumulo.core.client.mapreduce.AccumuloMultiTableInputFormat|
+|Class was removed.|class
org.apache.accumulo.core.client.mapreduce.AccumuloOutputFormat|
+|Class was removed.|class
org.apache.accumulo.core.client.mapreduce.AccumuloRowInputFormat|
+|Class was removed.|class
org.apache.accumulo.core.client.mapreduce.InputFormatBase<K, V>|
+|Class was removed.|class
org.apache.accumulo.core.client.mapreduce.InputTableConfig|
+|Class was removed.|class
org.apache.accumulo.core.client.mapreduce.lib.partition.KeyRangePartitioner|
+|Class was removed.|class
org.apache.accumulo.core.client.mapreduce.lib.partition.RangePartitioner|
+|Class was removed.|class
org.apache.accumulo.core.client.mapreduce.RangeInputSplit|
+|Class was removed.|class
org.apache.accumulo.core.client.replication.PeerExistsException|
+|Class was removed.|class
org.apache.accumulo.core.client.replication.PeerNotFoundException|
+|Class was removed.|class org.apache.accumulo.core.client.ZooKeeperInstance|
+|Class was removed.|class org.apache.accumulo.minicluster.MiniAccumuloInstance|
+|Class was removed.|interface
org.apache.accumulo.core.client.admin.ActiveCompaction.CompactionHost|
+|Class was removed.|interface
org.apache.accumulo.core.client.admin.ReplicationOperations|
+|Class was removed.|interface org.apache.accumulo.core.client.Instance|
+|Method was removed.|method boolean
org.apache.accumulo.core.client.sample.AbstractHashSampler::isValidOption(java.lang.String)|
+|Method was removed.|method int
org.apache.accumulo.minicluster.MiniAccumuloConfig::getNumTservers()|
+|Method was removed.|method java.lang.String
org.apache.accumulo.core.client.admin.InstanceOperations::getInstanceID()|
+|Method was removed.|method java.util.Collection<org.apache.hadoop.io.Text>
org.apache.accumulo.core.client.admin.TableOperations::getSplits(java.lang.String,
int) throws org.apache.accumulo.core.client.TableNotFoundException|
+|Method was removed.|method java.util.Collection<org.apache.hadoop.io.Text>
org.apache.accumulo.core.client.admin.TableOperations::getSplits(java.lang.String)
throws org.apache.accumulo.core.client.TableNotFoundException|
+|Method was removed.|method java.util.Set<java.lang.String>
org.apache.accumulo.core.data.Mutation::getReplicationSources()|
+|Method was removed.|method
org.apache.accumulo.core.client.admin.ActiveCompaction.CompactionHost
org.apache.accumulo.core.client.admin.ActiveCompaction::getHost()|
+|Method was removed.|method
org.apache.accumulo.core.client.admin.CompactionConfig
org.apache.accumulo.core.client.admin.CompactionConfig::setCompactionStrategy(org.apache.accumulo.core.client.admin.CompactionStrategyConfig)|
+|Method was removed.|method
org.apache.accumulo.core.client.admin.CompactionStrategyConfig
org.apache.accumulo.core.client.admin.CompactionConfig::getCompactionStrategy()|
+|Method was removed.|method
org.apache.accumulo.core.client.admin.NewTableConfiguration
org.apache.accumulo.core.client.admin.NewTableConfiguration::withoutDefaultIterators()|
+|Method was removed.|method
org.apache.accumulo.core.client.admin.ReplicationOperations
org.apache.accumulo.core.client.AccumuloClient::replicationOperations()|
+|Method was removed.|method
org.apache.accumulo.core.client.ClientConfiguration
org.apache.accumulo.minicluster.MiniAccumuloCluster::getClientConfig()|
+|Method was removed.|method org.apache.accumulo.core.client.Connector
org.apache.accumulo.minicluster.MiniAccumuloCluster::getConnector(java.lang.String,
java.lang.String) throws org.apache.accumulo.core.client.AccumuloException,
org.apache.accumulo.core.client.AccumuloSecurityException|
+|Method was removed.|method
org.apache.accumulo.core.conf.AccumuloConfiguration
org.apache.accumulo.core.iterators.IteratorEnvironment::getConfig()|
+|Method was removed.|method
org.apache.accumulo.core.iterators.SortedKeyValueIterator<org.apache.accumulo.core.data.Key,
org.apache.accumulo.core.data.Value>
org.apache.accumulo.core.iterators.IteratorEnvironment::reserveMapFileReader(java.lang.String)
throws java.io.IOException|
+|Method was removed.|method
org.apache.accumulo.core.spi.common.ServiceEnvironment
org.apache.accumulo.core.iterators.IteratorEnvironment::getServiceEnv()|
+|Method was removed.|method org.apache.accumulo.minicluster.MiniAccumuloConfig
org.apache.accumulo.minicluster.MiniAccumuloConfig::setNumScanServers(int)|
+|Method was removed.|method org.apache.accumulo.minicluster.MiniAccumuloConfig
org.apache.accumulo.minicluster.MiniAccumuloConfig::setNumTservers(int)|
+|Method was removed.|method org.apache.hadoop.io.Text
org.apache.accumulo.core.data.TabletId::getTableId()|
+|Method was removed.|method void
org.apache.accumulo.core.client.admin.TableOperations::create(java.lang.String,
boolean, org.apache.accumulo.core.client.admin.TimeType) throws
org.apache.accumulo.core.client.AccumuloException,
org.apache.accumulo.core.client.AccumuloSecurityException,
org.apache.accumulo.core.client.TableExistsException|
+|Method was removed.|method void
org.apache.accumulo.core.client.admin.TableOperations::create(java.lang.String,
boolean) throws org.apache.accumulo.core.client.AccumuloException,
org.apache.accumulo.core.client.AccumuloSecurityException,
org.apache.accumulo.core.client.TableExistsException|
+|Method was removed.|method void
org.apache.accumulo.core.client.admin.TableOperations::importDirectory(java.lang.String,
java.lang.String, java.lang.String, boolean) throws
org.apache.accumulo.core.client.TableNotFoundException, java.io.IOException,
org.apache.accumulo.core.client.AccumuloException,
org.apache.accumulo.core.client.AccumuloSecurityException|
+|Method was removed.|method void
org.apache.accumulo.core.client.MutationsRejectedException::<init>(org.apache.accumulo.core.client.Instance,
java.util.List<org.apache.accumulo.core.data.ConstraintViolationSummary>,
java.util.Map<org.apache.accumulo.core.data.TabletId,
java.util.Set<org.apache.accumulo.core.client.security.SecurityErrorCode>>,
java.util.Collection<java.lang.String>, int, java.lang.Throwable)|
+|Method was removed.|method void
org.apache.accumulo.core.client.NamespaceNotEmptyException::<init>(org.apache.accumulo.core.clientImpl.thrift.ThriftTableOperationException)|
+|Method was removed.|method void
org.apache.accumulo.core.client.TableOfflineException::<init>(org.apache.accumulo.core.client.Instance,
java.lang.String)|
+|Method was removed.|method void
org.apache.accumulo.core.data.ConditionalMutation::setReplicationSources(java.util.Set<java.lang.String>)|
+|Method was removed.|method void
org.apache.accumulo.core.data.Mutation::addReplicationSource(java.lang.String)|
+|Method was removed.|method void
org.apache.accumulo.core.data.Mutation::setReplicationSources(java.util.Set<java.lang.String>)|
+|Method was removed.|method void
org.apache.accumulo.core.iterators.IteratorEnvironment::registerSideChannel(org.apache.accumulo.core.iterators.SortedKeyValueIterator<org.apache.accumulo.core.data.Key,
org.apache.accumulo.core.data.Value>)|
+
+### Other
+
+|Change|Old|New|
+|------|---|---|
+|Method newly throws checked exceptions:
java.lang.ReflectiveOperationException.|method <T> T
org.apache.accumulo.core.client.PluginEnvironment::instantiate(java.lang.String,
java.lang.Class<T>) throws java.lang.Exception|method <T> T
org.apache.accumulo.core.client.PluginEnvironment::instantiate(java.lang.String,
java.lang.Class<T>) throws java.lang.ReflectiveOperationException|
+|Method newly throws checked exceptions:
java.lang.ReflectiveOperationException.|method <T> T
org.apache.accumulo.core.client.PluginEnvironment::instantiate(org.apache.accumulo.core.data.TableId,
java.lang.String, java.lang.Class<T>) throws java.lang.Exception|method <T> T
org.apache.accumulo.core.client.PluginEnvironment::instantiate(org.apache.accumulo.core.data.TableId,
java.lang.String, java.lang.Class<T>) throws
java.lang.ReflectiveOperationException|
+|Method no longer throws checked exceptions: java.lang.Exception.|method <T> T
org.apache.accumulo.core.client.PluginEnvironment::instantiate(java.lang.String,
java.lang.Class<T>) throws java.lang.Exception|method <T> T
org.apache.accumulo.core.client.PluginEnvironment::instantiate(java.lang.String,
java.lang.Class<T>) throws java.lang.ReflectiveOperationException|
+|Method no longer throws checked exceptions: java.lang.Exception.|method <T> T
org.apache.accumulo.core.client.PluginEnvironment::instantiate(org.apache.accumulo.core.data.TableId,
java.lang.String, java.lang.Class<T>) throws java.lang.Exception|method <T> T
org.apache.accumulo.core.client.PluginEnvironment::instantiate(org.apache.accumulo.core.data.TableId,
java.lang.String, java.lang.Class<T>) throws
java.lang.ReflectiveOperationException|
+|Method no longer throws checked exceptions:
org.apache.accumulo.core.client.TableNotFoundException.|method
org.apache.hadoop.io.Text
org.apache.accumulo.core.client.admin.FindMax::findMax(org.apache.accumulo.core.client.Scanner,
org.apache.hadoop.io.Text, boolean, org.apache.hadoop.io.Text, boolean) throws
org.apache.accumulo.core.client.TableNotFoundException|method
org.apache.hadoop.io.Text
org.apache.accumulo.core.client.admin.FindMax::findMax(org.apache.accumulo.core.client.Scanner,
[...]
+|Method only differs in the vararg type from some of its overloads: [method
org.apache.accumulo.core.client.rfile.RFile.ScannerFSOptions
org.apache.accumulo.core.client.rfile.RFile.InputArguments::from(java.lang.String[]),
method org.apache.accumulo.core.client.rfile.RFile.ScannerFSOptions
org.apache.accumulo.core.client.rfile.RFile.InputArguments::from(org.apache.accumulo.core.client.rfile.RFile.InputArguments.FencedPath[])].|method
org.apache.accumulo.core.client.rfile.RFile.ScannerOpt [...]
+|Method only differs in the vararg type from some of its overloads: [method
org.apache.accumulo.core.client.rfile.RFile.ScannerFSOptions
org.apache.accumulo.core.client.rfile.RFile.InputArguments::from(java.lang.String[]),
method org.apache.accumulo.core.client.rfile.RFile.ScannerOptions
org.apache.accumulo.core.client.rfile.RFile.InputArguments::from(org.apache.accumulo.core.client.rfile.RFileSource[])].|none|method
org.apache.accumulo.core.client.rfile.RFile.ScannerFSOptions org.apache [...]
+|Method only differs in the vararg type from some of its overloads: [method
org.apache.accumulo.core.client.rfile.RFile.ScannerFSOptions
org.apache.accumulo.core.client.rfile.RFile.InputArguments::from(org.apache.accumulo.core.client.rfile.RFile.InputArguments.FencedPath[]),
method org.apache.accumulo.core.client.rfile.RFile.ScannerOptions
org.apache.accumulo.core.client.rfile.RFile.InputArguments::from(org.apache.accumulo.core.client.rfile.RFileSource[])].|method
org.apache.accumulo.cor [...]
+|Method only differs in the vararg type from some of its overloads: [method
org.apache.accumulo.core.client.rfile.RFile.SummaryFSOptions
org.apache.accumulo.core.client.rfile.RFile.SummaryInputArguments::from(java.lang.String[])].|method
org.apache.accumulo.core.client.rfile.RFile.SummaryOptions
org.apache.accumulo.core.client.rfile.RFile.SummaryInputArguments::from(org.apache.accumulo.core.client.rfile.RFileSource[])|method
org.apache.accumulo.core.client.rfile.RFile.SummaryOptions org. [...]
+|Method only differs in the vararg type from some of its overloads: [method
org.apache.accumulo.core.client.rfile.RFile.SummaryOptions
org.apache.accumulo.core.client.rfile.RFile.SummaryInputArguments::from(org.apache.accumulo.core.client.rfile.RFileSource[])].|method
org.apache.accumulo.core.client.rfile.RFile.SummaryFSOptions
org.apache.accumulo.core.client.rfile.RFile.SummaryInputArguments::from(java.lang.String[])|method
org.apache.accumulo.core.client.rfile.RFile.SummaryFSOptions or [...]
+|Method only differs in the vararg type from some of its overloads: [method
void
org.apache.accumulo.core.client.rfile.RFileWriter::startNewLocalityGroup(java.lang.String,
byte[][]) throws java.io.IOException].|method void
org.apache.accumulo.core.client.rfile.RFileWriter::startNewLocalityGroup(java.lang.String,
java.lang.String[]) throws java.io.IOException|method void
org.apache.accumulo.core.client.rfile.RFileWriter::startNewLocalityGroup(java.lang.String,
java.lang.String[]) throws j [...]
+|Method only differs in the vararg type from some of its overloads: [method
void
org.apache.accumulo.core.client.rfile.RFileWriter::startNewLocalityGroup(java.lang.String,
java.lang.String[]) throws java.io.IOException].|method void
org.apache.accumulo.core.client.rfile.RFileWriter::startNewLocalityGroup(java.lang.String,
byte[][]) throws java.io.IOException|method void
org.apache.accumulo.core.client.rfile.RFileWriter::startNewLocalityGroup(java.lang.String,
byte[][]) throws java.io.IOE [...]
+|The enum constant was defined on position 1 but is now on 0. The user code
can break if it relies on the return value of the "ordinal()" method.|field
org.apache.accumulo.minicluster.ServerType.MANAGER|field
org.apache.accumulo.minicluster.ServerType.MANAGER|
+|The enum constant was defined on position 2 but is now on 1. The user code
can break if it relies on the return value of the "ordinal()" method.|field
org.apache.accumulo.core.client.admin.ActiveCompaction.CompactionType.MAJOR|field
org.apache.accumulo.core.client.admin.ActiveCompaction.CompactionType.MAJOR|
+|The enum constant was defined on position 2 but is now on 1. The user code
can break if it relies on the return value of the "ordinal()" method.|field
org.apache.accumulo.minicluster.ServerType.ZOOKEEPER|field
org.apache.accumulo.minicluster.ServerType.ZOOKEEPER|
+|The enum constant was defined on position 3 but is now on 2. The user code
can break if it relies on the return value of the "ordinal()" method.|field
org.apache.accumulo.core.client.admin.ActiveCompaction.CompactionType.FULL|field
org.apache.accumulo.core.client.admin.ActiveCompaction.CompactionType.FULL|
+|The enum constant was defined on position 3 but is now on 2. The user code
can break if it relies on the return value of the "ordinal()" method.|field
org.apache.accumulo.minicluster.ServerType.TABLET_SERVER|field
org.apache.accumulo.minicluster.ServerType.TABLET_SERVER|
+|The enum constant was defined on position 4 but is now on 3. The user code
can break if it relies on the return value of the "ordinal()" method.|field
org.apache.accumulo.minicluster.ServerType.GARBAGE_COLLECTOR|field
org.apache.accumulo.minicluster.ServerType.GARBAGE_COLLECTOR|
+|The enum constant was defined on position 6 but is now on 4. The user code
can break if it relies on the return value of the "ordinal()" method.|field
org.apache.accumulo.minicluster.ServerType.COMPACTOR|field
org.apache.accumulo.minicluster.ServerType.COMPACTOR|
+|The enum constant was defined on position 8 but is now on 5. The user code
can break if it relies on the return value of the "ordinal()" method.|field
org.apache.accumulo.minicluster.ServerType.MONITOR|field
org.apache.accumulo.minicluster.ServerType.MONITOR|
+|The enum constant was defined on position 9 but is now on 6. The user code
can break if it relies on the return value of the "ordinal()" method.|field
org.apache.accumulo.minicluster.ServerType.SCAN_SERVER|field
org.apache.accumulo.minicluster.ServerType.SCAN_SERVER|
+|The number of parameters of the method have changed.|method
org.apache.hadoop.io.Text
org.apache.accumulo.core.client.admin.FindMax::findMax(org.apache.accumulo.core.client.Scanner,
org.apache.hadoop.io.Text, boolean, org.apache.hadoop.io.Text, boolean) throws
org.apache.accumulo.core.client.TableNotFoundException|method
org.apache.hadoop.io.Text
org.apache.accumulo.core.client.admin.FindMax::findMax(org.apache.accumulo.core.client.Scanner,
org.apache.accumulo.core.data.RowRange)|
+|The number of parameters of the method have changed.|method void
org.apache.accumulo.core.client.TableDeletedException::<init>(java.lang.String,
java.lang.Exception)|method void
org.apache.accumulo.core.client.TableDeletedException::<init>(org.apache.accumulo.core.data.TableId)|
+|The number of parameters of the method have changed.|method void
org.apache.accumulo.core.security.VisibilityParseException::<init>(java.lang.String,
byte[], int)|method void
org.apache.accumulo.core.security.VisibilityParseException::<init>(org.apache.accumulo.access.InvalidAccessExpressionException)|
+|The return type changed from 'java.lang.String' to
'org.apache.accumulo.core.data.TableId'.|method java.lang.String
org.apache.accumulo.core.client.TableDeletedException::getTableId()|method
org.apache.accumulo.core.data.TableId
org.apache.accumulo.core.client.TableDeletedException::getTableId()|
+|The return type changed from
'org.apache.accumulo.core.clientImpl.TabletLocator' to
'org.apache.accumulo.core.clientImpl.ClientTabletCache'.|method
org.apache.accumulo.core.clientImpl.TabletLocator
org.apache.accumulo.hadoopImpl.mapreduce.lib.InputConfigurator::getTabletLocator(java.lang.Class<?>,
org.apache.hadoop.conf.Configuration,
org.apache.accumulo.core.data.TableId)|method
org.apache.accumulo.core.clientImpl.ClientTabletCache
org.apache.accumulo.hadoopImpl.mapreduce.lib.InputCon [...]
+|Visibility was reduced from 'public' to 'private'.|class
org.apache.accumulo.core.iterators.user.ColumnAgeOffFilter.TTLSet|class
org.apache.accumulo.core.iterators.user.ColumnAgeOffFilter.TTLSet|
+
+</details>
+
+## Upgrading
+
+View the [Upgrading Accumulo documentation][upgrade] for guidance as
+the upgrade procedure has changed. Note that during the upgrade
+all user tablets will be set to have on-demand tablet availability.
+Users will need to change the tablet availability post-upgrade for
+tablets that they want always or never hosted on a tablet server.
+The upgrade process also sets the tablet mergeability to never for
+all existing tablets to preserve any user created split points.
+Tablet mergeability can be set when adding new splits and will be
+set to always when the split is created by the system based on user
+settings.
+
+## Useful Links
+
+* [All tickets related to this release][milestone]
+
+
+[blog]: /blog/2024/10/07/accumulo4-preview.html
+[merge]: /docs/4.x/administration/merging
+[upgrade]: /docs/4.x/administration/upgrading
+[milestone]: https://github.com/apache/accumulo/milestone/20