> ## Documentation Index
> Fetch the complete documentation index at: https://docs.activeviam.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

For user-facing changes, refer to the [Release Notes](whats_new) page.<br />
For details about versioning, see our [Versioning Policy](https://docs.activeviam.com/eos.html).<br />

The 6.1 branch forked the 6.0 branch from version 6.0.14.<br />
See the [6.0 changelog](./previous/6_0/changelog) for changes before the fork.

Format based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0)

## 6.1.20

2026-05-29

### Added

* PIVOT-11026 Observability: AI aggregate provider recommendations now emit OpenTelemetry spans, with one top-level
  `AI aggregate provider recommendations` span per cube and child spans for the four optimization stages
  (vectorize queries, select queries to cover, generate candidate partial providers, select optimal cover),
  plus a nested `Cluster query vectors` sub-step inside candidate generation and the cardinality and
  memory-footprint estimation steps. This makes it possible to see where CPU is spent when generating
  recommendations.
* PIVOT-13720 Datastore: Added `ICursor#toRecords()` and `ICursor#toTuples()` methods that materialize a cursor's remaining records into a list of records or tuples.
  These methods are typically \~2x faster than iterating and copying each record.
* PIVOT-13720 Datastore: Added documentation about how to run a list query with an `IPartitionedResultAcceptor`.
* PIVOT-13791 Datastore: Exposed `com.activeviam.database.datastore.api.description.impl.RemoveUnknownKeyListeners`,
  which gathers the predefined `IRemoveUnknownKeyListener` implementations (`THROW`, `LOG`, `SILENT`) and the
  default listener, mirroring `DuplicateKeyHandlers`.
* PIVOT-13791 Datastore: Added documentation about store write behaviors (duplicate key handling via `IDuplicateKeyHandler`,
  remove-unknown-key behavior via `IRemoveUnknownKeyListener`, and `updateOnlyIfDifferent()`), dictionarized fields,
  and compressed indexes.
* PIVOT-13863 Cloud Sources: Added `ICloudEntityChannelFactory`, a public functional interface for creating `SeekableByteChannel` instances from cloud entity paths. Concrete implementations are provided for all three cloud providers: `AzureBlobChannelFactory`, `S3ObjectChannelFactory`, and `GoogleBlobChannelFactory`.
* PIVOT-13912 Continuous Query Engine: Added logs around the continuous query lifecycle to make it easier to track client request
  submission and query registration/unregistration. `QueryWebSocketEndPoint` now logs each REGISTER, RESUME, PAUSE, REFRESH and UNREGISTER request at info level.
  UPDATE and RANGE\_UPDATE at finest level.
  `ContinuousQueryManager` logs every register/unregister and unregister-all with the current total of registered queries.

### Changed

* PIVOT-6805 Datastore: Reduced dictionary contention when ingesting tuples through `ITransactionManager#addAll`:
  concurrent transformation tasks now stagger their column-write order so they no longer all hit the same per-column dictionary at once.
* PIVOT-8957 Datastore: Writes to a store currently being modified by an `updateWhere` on another thread now block until the `updateWhere` completes instead of immediately throwing `NoTransactionException`.
* PIVOT-9115 Query History: The `GET /queries` endpoint now returns results ordered by start date descending (most recent first) instead of by ID ascending.
* PIVOT-12749 DirectQuery: Bumped `com.databricks:databricks-jdbc` from 3.3.1 to 3.3.3.
* PIVOT-12749 DirectQuery: Bumped `com.amazon.redshift:redshift-jdbc42` from 2.2.1 to 2.2.5.
* PIVOT-12749 DirectQuery: Bumped `net.snowflake:snowflake-jdbc` from 4.0.1 to 4.1.0.
* PIVOT-12749 Cloud dependencies: Bumped `software.amazon.awssdk:bom` from 2.37.3 to 2.44.0.
* PIVOT-12749 Cloud dependencies: Bumped `com.azure:azure-sdk-bom` from 1.3.3 to 1.3.6.
* PIVOT-12749 Cloud dependencies: Bumped `com.google.cloud:libraries-bom` from 26.76.0 to 26.80.0.
* PIVOT-13622 MDX: The `Descendants(MEMBER, ..., LEAVES)` function will now return the members in hierarchical order instead of random order.
* PIVOT-13785 Deprecated `IQuery#collectAdditionalSpanAttributes(BiConsumer<String, String>)` and its implementations.
* PIVOT-13826 Admin UI: Bumped `admin-ui.version` from 5.2.20 to 5.2.22 to pick up the early release of the Atoti Admin UI jar. `atoti-ui.version` is unchanged.
* PIVOT-13866 Cube: The Maven modules `com.activeviam.activepivot:activepivot-impl` and `com.activeviam.activepivot:activepivot-intf` have been merged into `com.activeviam.activepivot:core`, use it directly.
* PIVOT-13844 REST WebClient: More diagnostic information is logged and propagated when a remote call fails. This should allow easier troubleshooting of errors tied to inter-service communication, such as the `RemoteDatabaseService`. The logger "atoti.server.tech" controls the logging details.
* PIVOT-13963 Atoti UI: Bumped `atoti-ui.version` from 5.2.20 to 5.2.24 and `admin-ui.version` from 5.2.22 to 5.2.24.

### Deprecated

* PIVOT-13676 Spring: Deprecated `IActivePivotBranchPermissionsManagerConfig`. Used directly the bean `IBranchPermissionsManager`
* PIVOT-13811 Datastore: Deprecated `IKeyEventContext#getDictionaryProvider()`. Use the new
  `IKeyEventContext#undictionarizeKey(int[])` or `IKeyEventContext#undictionarizeRecord(IRecordReader)` methods instead
  to obtain undictionarized key or record values without accessing the dictionaries directly.
* PIVOT-13811 Records: Deprecated `IRecordFormat#dictionarize` and `IRecordFormat#undictionarize` because these static
  helpers were never meant for application code, which has no legitimate way to obtain the required `IDictionaryProvider`.

### Removed

### Fixed

* PIVOT-8957 Datastore: Fixed concurrency issues when a transaction is used from multiple threads:
  * Commit and rollback now wait for concurrent writes to finish, preventing state corruption and spurious errors.
  * Two concurrent `updateWhere` calls sharing a referenced store no longer leave stores stuck as non-writable.
* PIVOT-12865 Monitoring: Fixed partition-level JMX attributes on aggregate provider partitions. Sizes (point index, aggregate
  store on/off-heap, bitmap index) are now reported as human-readable strings (e.g. `5 MiB 312 KiB (5562880)`) instead of being
  truncated to `0` for sub-MB partitions. Leaf partition MBeans also expose the provider type, latest epoch, number of points,
  and aggregate store sizes, which were previously hidden. The matching gauges are now `double`-typed so sub-MiB
  partitions report fractional values instead of being truncated to `0`.
  and aggregate store sizes, which were previously hidden.
* PIVOT-12937 Observability: Fixed missing memory metrics such as `atoti.application.off_heap.used` and `atoti.application.off_heap.committed` by ensuring the memory gauges are initialized after the OpenTelemetry instance is installed.
* PIVOT-13109 Observability: Restored the query type information logged for a `ActivePivotHealthEvent`.
* PIVOT-13379 Distribution: Fixed stale distributed MBeans after a CRaC restore.
* PIVOT-13655 Distribution: Fixed database measures with multiple underlying measures failing on distributed query cubes.
* PIVOT-13797 Distribution: Fixed a message-ordering issue on query cubes running what-if simulations alongside data updates, where commits from different branches arriving out of order could leave the query cube in an inconsistent state, surface as `MergeException`s, or trigger unnecessary data node restarts.
* PIVOT-13812 MDX: Further improved the performance of large MDX query materialization on top of the PIVOT-13672 fix.
  Workloads producing very large result sets no longer spend a significant fraction of CPU time in internal column expansion.
  Result columns are now pre-sized with an adaptive chunk size, both derived from an estimate provided by the input cell-set, eliminating the remaining column-expansion overhead.
* PIVOT-13831 Parquet source: Fixed silent data loss or index error when parsing a Parquet file into multiple stores simultaneously with `IStoreToParquetMapping` instances that have different numbers of fields.
* PIVOT-13908 DirectQuery: Clarified the local cache documentation to specify that List and Distinct queries that touch
  a joined field, either in the selection or in the condition, bypass the cache, even when the joined table also has
  its own local cache configured.
* PIVOT-13909 Cube: a factless hierarchy now ignores cube fact filters that do not target any of its fields, instead of silently falling back to a fact-table selection. To restore the previous behavior on a specific hierarchy, mark it as non factless with `.notFactless()`.
* PIVOT-13926 Distribution: Fixed the JGroups protocol stack order in the protocol files shipped with Atoti so that failure detection (`FD_*`, `VERIFY_SUSPECT`) is placed below `pbcast.GMS`, as required by the JGroups manual. Applications providing their own JGroups protocol configuration are not affected.
* PIVOT-13927 DirectQuery: Fixed `IllegalStateException` raised when a query aggregated the same multi row vector table through two different join paths (diamond schema).
* PIVOT-13941 Parquet source: Fixed the vectorized Parquet reader hanging at 100% CPU when parsing a `LIST` column whose inner element was declared `optional` and contained `null` values. The reader now fails fast with a clear `ParquetDecodingException` instead of looping indefinitely.
* PIVOT-13942 Parquet source: Fixed `EOFException` in the vectorized Parquet reader when parsing `LIST` columns containing null or empty-list entries in a bit-packed group.
* PIVOT-13959 Cube: Fixed `DynamicAggregateProvider.updateAggregateProviders` failing with `IllegalStateException: The base was not registered: Distributed ActivePivot [...]`
  when called against a data cube whose schema also contained a query cube (single-JVM setup with both data and query nodes).
* PIVOT-13964 REST API: Fixed `UnsupportedOperationException` when filtering a GAQ via REST on a hierarchy level whose member type is not a `String` (e.g. `LocalDate`).
* PIVOT-13971 Distribution: Fix a race when a branch is deleted and immediately re-created with the same name. The re-created branch could lose its data on query nodes, eventually forcing a data node restart.
* PIVOT-13982 Distribution: Fixed a data node intermittently failing to rejoin the cluster after a query node restart. The data node would stay disconnected, causing its data to be missing from query results until the data node itself was restarted.

### Security

* PIVOT-12749 Cloud source: Upgraded `software.amazon.encryption.s3:amazon-s3-encryption-client-java` to version 4.0.0 to fix CVE-2025-14763
* PIVOT-13963 Security: Bumped `org.springframework.boot` from 3.5.13 to 3.5.14 to fix CVE-2026-40973.
* PIVOT-13963 Security: Bumped `org.thymeleaf:thymeleaf` and `org.thymeleaf:thymeleaf-spring6` to 3.1.5.RELEASE to fix CVE-2026-40477, CVE-2026-40478 and CVE-2026-41901.
* PIVOT-13963 Security: Bumped `org.apache.tomcat.embed` to 10.1.55 to fix CVE-2026-41284, CVE-2026-42498 and CVE-2026-43513.
* PIVOT-13963 Security: Bumped `org.bouncycastle:bcprov-jdk18on` from 1.78.1 to 1.84 to fix CVE-2025-14813 and CVE-2026-5598.
* PIVOT-13963 Security: Pinned `io.netty` to 4.1.133.Final to fix CVE-2026-42578, CVE-2026-42583, CVE-2026-42585, CVE-2026-42586, CVE-2026-42587 and CVE-2026-44248.
* PIVOT-13963 Security: Pinned `org.apache.thrift:libthrift` (transitive of `com.databricks:databricks-jdbc`) to 0.23.0 to fix CVE-2026-41603 and CVE-2026-43869.
* PIVOT-13963 Security: Pinned `org.mozilla:rhino` (transitive of Activiti) to 1.7.15.1 to fix CVE-2025-66453.

## 6.1.19

2026-04-16

### Added

* PIVOT-11297 Database: Added documentation for the data streaming API (`IDatabase#getDataStreamer`), covering stream
  view registration, the listener interface, registration options, and lifecycle management.
* PIVOT-11986 Distribution: `DistributionTestHelper` can now wait for discoveries with distribution managers that were started separately, without triggering the distribution itself.
  This is useful when testing a Spring application that is already built.
* PIVOT-12708 CSV source: Added `ICsvTopic#rollbackPendingState()` to restore the pending state to what it was before the last `poll()` call. This allows to gracefully handle rollbacked transactions within the CSV Source.
* PIVOT-12865 Monitoring: Added a "Refresh underlying MBeans (recursively)" JMX operation on `ADynamicMonitoring` and `AnnotationMBean` that refreshes the entire MBean subtree in one call.
* PIVOT-13470 Cube: Added the property `atoti.server.cube.condensedLocationPrint` to enable a more compact `#toString`
  representation of locations. When enabled, locations with many hierarchies are printed in a condensed form such as
  `|2:AllMember\abc|4:2026|`, omitting hierarchies on which the coordinate is `AllMember` (disabled by default).
* PIVOT-13491 Logging: A one-shot `WARNING` is now emitted through `atoti.server.tech.logging` when a legacy logger name is still explicitly configured, guiding users to migrate to the new name.
  This is aligned with the introduction of loggers for entire components/features rather than class loggers.
* PIVOT-13602 Distribution: Added `NettyMessageType` entry for `RetrieveAggregatesMessage` to allow configuring its max size instead of falling back to the default 2 MiB GLOBAL\_MESSAGE limit.
  This is useful when the query object grows over 2 MiB. The size of the answer of such a message is still configurable through `singleGaqResult`.
* PIVOT-13717 Cube: Throw a proper configuration error when trying to define a partial provider using an analysis hierarchy.
* PIVOT-13718 Parquet source, Cloud source: New methods `IParquetParser#parse(ICloudDirectory<EntityT>, ParquetConfiguration, ...)` and `IParquetParser#parse(ICloudEntityPath<EntityT>, ParquetConfiguration, ...)` accepting a `ParquetConfiguration`.
* PIVOT-13753 Query planning: Added `enableQueryPlanChecks` / `disableQueryPlanChecks` to `IQueryMonitoring` to run consistency checks on the `PlanningGraph`, facilitating debugging of query planning issues. It's off by default.
* PIVOT-13772 DLC: added the possibility to configure a type override when configuring a custom field based on a column calculator.
* PIVOT-13806 Datastore: Added a factory method `StoreDescription#create`.
* PYTHON-869 Database API: Added `IStatisticsQueryRunner#estimateColumnCardinality`  methods with a filtering `ICondition`

### Changed

* PIVOT-13109 Monitoring: MDC context propagation (thread name, username, trace and span IDs) in health event logs is now available without the APM module. Applications using a logging framework that supports MDC (Logback, Log4j2) can include these fields in their log patterns without requiring APM.
* PIVOT-13112 APM: File processing logs (start, errors, completion) are now emitted directly by the CSV source module. The `MonitoredDataLoadingAutoConfiguration` has been removed; applications no longer need to configure an `IMessageHandler<IFileInfo<Path>>` bean for file info logging.
* PIVOT-13269 Cube: Changed `IMeasureHierarchy#retrieveMember` to return an `IMeasureMember` for consistency with the other methods in the interface.
* PIVOT-13340 CSV source: Greatly improved polling speed when tracking many files in cloud storage.
* PIVOT-13356 Distribution: Moved `AtotiAuthToken` out of `distribution-common`. Applications using this class should use one of the default JGroups `AuthToken` implementations, or provide their own `AuthToken` implementation (see [the associated documentation](../distributed/jgroups_security_configuration#the-auth-protocol) for more details).
* PIVOT-13370 DirectQuery: The Databricks JDBC driver has been upgraded from version 2.7.6 to version 3.3.1. The new driver is open source and replaces the legacy Simba driver.
* PIVOT-13547 DirectQuery: Improved aggregate table join creation to support join key fields that are part of a join chain from the base table.
* PIVOT-13558 Parquet source: Upgraded `org.apache.parquet` ecosystem to version 1.17.0
* PIVOT-13622 MDX: The `Descendants(SET, ..., LEAVES)` function will now return the members in hierarchical order instead of random order.
* PIVOT-13634 DirectQuery: Added support for TIMESTAMP\_NTZ on Databricks.
* PIVOT-13640 DirectQuery: Upgraded the ClickHouse Java client (`com.clickhouse:client-v2`, `com.clickhouse:clickhouse-http-client` and `com.clickhouse:clickhouse-data`) from 0.9.3 to 0.9.8.
* PIVOT-13654 MDX: Improved the Mdx Filter function to ignore tuple hierarchies not used by the filter condition.
* PIVOT-13654 MDX: Added an n-ary crossjoin implementation that evaluates some `Crossjoin` of single-level sets without nesting binary crossjoins. Enable it by setting the `MdxContext#NARY_CROSSJOIN` additional property to `true` in the MDX context. This may accelerate queries containing `Crossjoin` of more than 2 sets.
* PIVOT-13654 MDX: Reduced recursive `getHierarchyCount` calls in nested `CrossjoinSet`, improving the performance of queries containing `Crossjoin` of more than 2 sets.
* PIVOT-13654 MDX: Reduced memory allocations when evaluating MDX expressions over large sets (e.g. `Filter`, `Order`).
* PIVOT-13654 MDX: Faster computation of NON EMPTY filtering.
* PIVOT-13658 Query History: Changed the REST API namespace from `/atoti/query-history` to `/activeviam/query-history`.
* PIVOT-13670 Post-processors: Reduced the number of `SubCubeProperties#clone` calls performed by `AFilteringPostProcessor` when applying its filter, lowering the memory and CPU overhead of filtered post-processor evaluations.
* PIVOT-13715 Query planning: Avoid submitting database queries with a `WHERE FALSE` condition, as they would not return any data.
* PIVOT-13744 Database API: Queries including a `withResultsLimit` clause are no longer guaranteed to return the same rows, even if no transaction occurred in the database.

### Deprecated

* PIVOT-12637 Parquet source: deprecated all methods from `IParquetParser` that takes a `org.apache.hadoop.fs.Path` or a `org.apache.hadoop.conf.Configuration` as arguments. New methods rely on `java.nio.file.Path` and `org.apache.parquet.conf.ParquetConfiguration`.
* PIVOT-12708 CSV source: `ICsvTopic#reset()` is deprecated for removal in 6.2. Use `clearPendingStateAndStopListening()` to stop the scheduler and unregister listeners, or `rollbackPendingState()` to restore the pending state after a failed commit.
* PIVOT-13112 APM: The `activeviam.apm.feed.loading.enabled` property is deprecated for removal in 6.2. Activating this property does nothing.
* PIVOT-13589 DirectQuery Databricks: Deprecate the use of Databricks UDAFs, as they are sidelined by Databricks. Use vector emulation instead.
* PIVOT-13806 Datastore: The constructor of `StoreDescription` has been deprecated, use the `#builder()`, the `#simpleBuilder()` or the newly added `#create()` methods instead.

### Removed

### Fixed

* PIVOT-12354 Distribution: Properly close all metrics upon call to `IMultiVersionActivePivot#close`. Failing to do so would spam the logs with "version history is closed" until the `IMultiVersionActivePivot` was finally garbage collected. As a long-living object, this would most likely wait for an Old Gen GC.
  This issue was most likely to occur when using the Python SDK to modify a structural element of the cube. In most cases, this triggers the recreation of the said cube.
* PIVOT-13365 AI: Propagate the context in MCP server calls. Fix authentication issues in MDX queries run by Claude.
* PIVOT-13424 DirectQuery: Deduplicate underlying table registered in the schema when an aggregate table is used several times. This can happen in a setup with several cubes sharing the same database schema.
* PIVOT-13558 Parquet source: Fixed a `SchemaParseException` crash when reading Parquet files containing columns with
  Avro-invalid names (e.g. containing character `$`) that are not mapped to any store field. Such columns are now silently ignored.
  A valid Avro name must start with a letter or `_`, and contain only letters, digits, or `_`.
  Mapped columns with Avro-invalid names are not supported and now throw a clear `ConfigurationException`.
* PIVOT-13559 Distribution: A query node now clears the REST endpoint and cube-id mapping of a data node that leaves the cluster ungracefully (crash, network partition) instead of only on reception of a `GoodbyeMessage`. Stale entries no longer linger in `getClusterMembersRestAddresses()`.
* PIVOT-13619 Distribution: A query node's epoch timeline is no longer correlated to the data nodes' epoch timeline when they live in the same JVM, preventing the apparition of unexplained gaps in the epoch ranges reported through JMX operations.
  The query node's timeline is thus independent of the selected distributed setup.
* PIVOT-13625 Distribution: Fixed a `NullPointerException` in `DataNodeManager` when deleting a what-if branch while the distribution infrastructure was still initializing. This could happen if the data-node is undergoing simulation creation and deletion before/while joining the cluster.
* PIVOT-13631 Distribution: Creating a checkpoint of a JVM with [Azul's CRaC feature](../crac/overview) properly clears the IP Address cache stored by JGroups. This stale cache will no longer prevent the restoration of this VM at a different address.
* PIVOT-13656 CSV source: Fixed `WatcherService#close()` not fully shutting down its internal state, which could prevent the server from stopping gracefully.
* PIVOT-13669 Web Services: Fixed remote services (e.g. `RemoteDatabaseService`) swallowing HTTP error details when the
  response body is not a JSON error (e.g. HTML login page from Kerberos or plain text from a reverse proxy). The original
  HTTP status code is now always preserved.
* PIVOT-13672 MDX: Fixed O(n²) column expansion in `CellPlanResult` during large MDX query materialization. The column is now pre-expanded once before being filled instead of calling `ensureCapacity` at each position.
* PIVOT-13694 DirectQuery: Automatically disable time-travel when using the `AggregateTableBootstrapper`. This could have led to unnecessary query timing out.
* PIVOT-13734 Atoti UI: Fixed an interaction between the `IMdxContext` default member feature, and the endpoint allowing Atoti UI to run queries filling the filtering widget. The filtering widget will no longer fail upon retrieving members of a virtual hierarchy when a default member is defined on a non-slicing hierarchy (not the virtual one, another hierarchy).
* PIVOT-13769 DirectQuery: Fixed the distinct query cache key to include the base table, preventing incorrect cache hits when multi-steps aggregate queries target different base tables with the same clustering fields and condition.
* PYTHON-836 Cube: Fixed `StoreLookupMeasure` failing in DirectQuery when a key mapping references a value absent from the cube dictionary.

### Security

* PIVOT-13721: upgraded `org.springframework.boot:spring-boot-dependencies` to version 3.5.13
* PIVOT-13721: upgraded `com.google.cloud:libraries-bom` to version 26.76.0
* PIVOT-13721: upgraded `org.apache.tomcat.embed` to version 10.1.54

## 6.1.18

2026-03-06

### Added

* PIVOT-13476 Datastore: Added partitioning descriptions in `ConfigurationException` error message when the owner and the target table partitionings are incompatible.

### Changed

* PIVOT-13130 Query Planner: The context value `IQueryExecution` now has an additional option to enable the use of multiple aggregate providers to resolve a query.
* PIVOT-13190 Continuous GAQ: Improved performance by
  * preventing intermediate boxing in the query resolution.
  * preventing materialization of intermediate results between resolution of the query and streaming of the result.
* PIVOT-13311 Observability: Continuous Queries are now split at the trace level into 3 separate spans:
  * Computing the locations impacted by the transaction.
  * Computing an update of the values for these locations.
  * Serializing and streaming the updated values.
* PIVOT-13433 Continuous GAQ: The returned Arrow format now contains an additional column mentioning, for each line, if it was added, removed, or updated by the transaction triggering the update.
* PIVOT-13443 Continuous GAQ: Wildcard coordinates can now be represented using `null` or using `ILocation.WILDCARD` (defaulting to `[*]` commonly found in logs). Example: `Currency@Currency@Currency: null` or `Currency@Currency@Currency: List.of(ILocation.WILDCARD)`
* PIVOT-13468 License: Updated flags for AI and DirectQuery features

### Deprecated

* PIVOT-9004 Cloud source: Deprecated `ICloudDirectory#createIfNotExist` method. This should be replaced in client projects by the specific cloud provider SDK.
* PIVOT-13035 DirectQuerySnowflake: `SnowflakeProperties.SnowflakePropertiesBuilder#additionalOption(SFSessionProperty, String)` has been deprecated in favor of `SnowflakeProperties.SnowflakePropertiesBuilder#additionalOption(String, String)` to not rely on an internal Snowflake type.
* PIVOT-13335 Query Execution: All methods of `IActivePivotQueryRunner` taking a `String` representation of a level instead of a `LevelIdentifier` are now deprecated.

### Removed

### Fixed

* PIVOT-12269 DLC: Fixed an issue preventing the use of absolute paths in file scopes if the base directory was specified with a relative path.
* PIVOT-13305 MDX: Fixed the member property `CHILDREN_CARDINALITY` returning incorrect values for leaf members after a structural schema change (e.g., adding a field to a table after cube creation).
* PIVOT-13332 Distribution: Fixed error that could lead to incorrect results when calling `hierarchy.retrieveMembers` in a query node with several branches. This issue could occur for a given hierarchy if a branch was first created without updating any member of said hierarchy, then some members of this hierarchy were updated on the master branch.
* PIVOT-13332 Distribution: Fixed error `ActiveViamRuntimeException: Invalid remote address for removal` that could happen during a transaction performing removals. This issue could occur if the transaction creating the branch did not update any member for a given hierarchy and that a member was removed in a later transaction on that branch.
* PIVOT-13349 MDX: Fixed an `ArrayIndexOutOfBoundsException` being thrown when passing an empty set to an `Except` statement within a subselect.
* PIVOT-13374 Datastore: Fixed potential memory leak on partitions containing only dead records. This could only happen if the table does not define any primary key.
* PIVOT-13380 Cube: Fixed an erroneous warning message about "AAggregatesRetrieval : getSubtaskRetrievals() called on *PrimitiveAnalysisAggregationRetrieval* (...) which has a non IAggregatesRetrieval subtask :*DatabaseRetrieval*(...)". This message should not appear anymore for the pair `PrimitiveAnalysisAggregationRetrieval` & `DatabaseRetrieval`. Printing these warnings over and over could cause a slowness for certain queries, often when Copper joins are involved.
* PIVOT-13398 Distribution: Fixed a race condition between some endpoints of a query cube, and the processing of an initial discovery by a polymorphic query cube.
  This fix affects the discovery endpoint and the query endpoint.
  During the processing of the request, the number of hierarchies could be modified by the initial discovery, causing various errors.
  The resulting bug could only happen if the epoch dimension is enabled and would fail the request until the query cube stabilizes itself.
* PIVOT-13440 Continuous GAQ: Fixed an issue preventing registration of the query when explicitly selecting members of a virtual hierarchy.
* PIVOT-13459 Distribution: Fixed an issue causing a `NullPointerException` to be thrown by a data cube when a query cube temporarily left and later rejoined the cluster while the data cube was still sending retry messages. As a result of this issue, the data node could fail to rediscover the query cube and would continue sending retry messages indefinitely.
* PIVOT-13474 Distribution: Fixed a race condition within the query node between the processing concerning a branch's deletion, and the processing of the next transaction against another branch. This would previously cause a restart order sent to the data node.
* PIVOT-13499 Parquet source: Fixed an issue where the Hadoop configuration could be recreated without taking into account the user-supplied configuration.
* PIVOT-13502 Distribution: Fixed a race condition in `IMultiVersionDataActivePivot#maskMembers`/`unmaskMembers` that could cause an `ArrayIndexOutOfBoundsException` when multiple query cubes were being notified concurrently.
* PIVOT-13508 Continuous GAQ: Fixed the query filter not being taken into account, which could lead to incorrect results.

## 6.1.17

2026-02-17

### Added

* PIVOT-12714 DirectQuery: Added [an option](../directquery/incremental_refresh#added-rows-without-fixing-broken-joins-add_rows_without_fixing_broken_joins) to optimize incremental refresh in case of added rows which do not fix broken joins.
* PIVOT-13284 DirectQuery: Added `joinToKeepNormalized` to the aggregate table bootstrapper, allowing fields reached through specified joins to remain accessible through joins at query time instead of being denormalized into the aggregate table.

### Changed

* PIVOT-12608 DirectQuery: Aggregate tables can now be used for queries that group by or filter on fields not directly present in the aggregate table, as long as those fields are accessible via a join from the aggregate table.
* PIVOT-12854 Distribution: Due to internal changes, nodes using Atoti Server 6.1.17 or later cannot communicate with nodes using Atoti Server 6.1.16 or earlier.
  See the [compatibility policy for nodes in a cluster](backward_compatibility#compatibility-policy-for-nodes-in-a-cluster) for more information.
* PIVOT-13199 Query Execution: Queries now fail if they require expanding an analysis hierarchy affected by a `ICubeRestriction` context value.
  This use case is currently unsupported and could previously return incorrect results.
* PIVOT-13239 Content service: Calculated members, KPIs and named sets are now accessible to users that have reader or owner access to the corresponding entries in the content service.
  They were previously not accessible to users with owner access but not reader access.
  This was changed to be consistent with the general content service behavior.
* PIVOT-13035 DirectQuery Snowflake: Upgraded Snowflake JDBC driver `net.snowflake:snowflake-jdbc-thin` to version 4.0.1 (from 3.28.0). This version relies on AWS SDK v2 instead of the V1, which is end-of-life. It will be required to update some imports if using `SnowflakePropertiesBuilder#additionalOption`.
* PIVOT-13293 Logging: Removed repeated printings of the same retrieval in the query plan when it was done on several partitions.
* PIVOT-13316 DirectQuery: Relaxed join name uniqueness constraint for consistency with the `Datastore` - multiple joins can now share the same name as long as they originate from different tables.
* PIVOT-13317 DLC: Detect at configuration time that multiple channels in a topic definition are filling the same table. When left unchecked, this was causing issues due to bad column order and missing columns.
* PIVOT-13317 DLC: Throw new creating a `KafkaTopicDescription` without a name. This offers a consistent experience with other topic description.

### Deprecated

* PIVOT-10671: Deprecated `ActiveViamProperty.THROW_ON_MISSING_DATA_NODE_REPONSE` in favor of the new `ActiveViamProperty.THROW_ON_MISSING_DATA_NODE_RESPONSE` (fixing a typo in the enum member name).
  The underlying system property remains unchanged.

### Removed

### Fixed

* PIVOT-12808 Datastore: Fixed `IDatastore#rebuildIndexes(String)` throwing `IllegalStateException: cannot commit epoch N when the current one is already N` when multiple datastore versions reference the same store version (because the store was not modified between commits).
* PIVOT-13177 Datastore: Fixed race condition causing a StreamView listener registered during a transaction to observe multiple times the start of the same transaction.
* PIVOT-13181 Cube: Fixed `LocationUtil#doesCoordinateBelongToScope` when `scope` is a single value and `value` a single-element collection containing this value.
* PIVOT-13204: Fixed usage tracking of reserved memory.
* PIVOT-13244 Datastore: Fixed get-by-key queries failing when a key field is a String vector type.
* PIVOT-13322 Monitoring: Disabled some specific JFR events to not burden future JFRs. See the [dedicated documentation](../monitoring/jfr_events)
* PIVOT-13334 Distribution: Fixed incorrect time unit in the retry logic for unavailable data node instances, which caused retries to occur far less frequently than configured.

### Security

* PIVOT-13239 Content service: Fixed non-admin users being able to view and query calculated members, KPIs and named sets they should not have access to under certain conditions.
  The issue affects only Atoti Server 6.1.16.
* PIVOT-13276 Dependencies: Excluded io.airlift:aircompressor from org.apache.parquet:parquet-avro dependencies because of CVE-2025-67721. It is possible to manually reimport it if needed to read compressed parquet files.

## 6.1.16

2026-01-23

### Added

* PIVOT-10714 Cube: Added experimental feature to use multiple partial providers in some queries, rather than the Just-In-Time (JIT) provider.
  See [this page](../cube/providers/aggregate_provider#multiple-aggregate-providers-experimental) for more information.
* PIVOT-11666 Distribution: Added `IMultiVersionDataActivePivot#maskMembers()` and `IMultiVersionDataActivePivot#unmaskMembers()` methods to mask and unmask distributing level members across query cubes.
  See [this page](../distributed/remove_data_overlap) for more information.
* PIVOT-12075 Continuous GAQ: added `/continuous-gaq` REST endpoint to create GAQ queries and receive continuous updates.
* PIVOT-12075 Continuous GAQ: added `activeviam.gaq.arrow.batchsize` JVM property to configure the number of rows per batch when streaming GAQ results in Apache Arrow format.
* PIVOT-12876 Continuous query: Added `ContinuousQueryEngineConstants` to expose continuous query engine plugin keys.
* PIVOT-12966 Distribution: Added `horizontalDispatching` field to `RetrievalData` in the JSON query data plan API to expose query dispatching information for horizontal data duplication. This field is available in both the V9 query service (revision 2) and the V10 query service (revision 4).
* PIVOT-12889 Added redirect URL validation after login to prevent uncontrolled redirection vulnerabilities. A new property `atoti.server.endpoint.activepivot.security.allowed-redirection.hosts`
  allows specifying a comma-separated list of allowed redirection hosts. When empty (default), redirection to any domain is allowed.

### Changed

* PIVOT-11142: `MdxQueryBouncer` now only logs a warning once when no timeout is set.
* PIVOT-12676: Logs for queries should be more human-readable. Locations will now only display the hierarchies with explicit coordinates. Logs should no longer contain long chains of `AllMember|AllMember...`.
* PIVOT-12749: Upgraded `net.snowflake.snowflake-jdbc-thin` to version 3.28.0
* PIVOT-9011: It is now possible to disable the JWT security filter chain and the JWT configuration `JwtConfig` by setting the property `atoti.jwt.enabled` to `false`.

### Deprecated

* PIVOT-9754 Cloud source Azure: Deprecated the constructors of `AzureEncryptedCloudDirectory` and `AzureEncryptedBlobPath` in favor of factories `AzureEncryptedCloudDirectory#create` and `AzureEncryptedBlobPath#create`
* PIVOT-9754 Cloud source Azure: Deprecated the method of `AAzureBlobPath#uploadWithKnownLength` and `AAzureBlobPath#uploadWithUnknownLength`. The Azure SDK can be used directly instead.
* PIVOT-9938 Parquet source: Deprecated `IParquetReaderFactory#create(InputFile, ReadSupport, Configuration)` in favor of `IParquetReaderFactory#create(InputFile, ReadSupport, ParquetConfiguration)`.
* PIVOT-11666 Distribution: Deprecated `IMultiVersionDistributedActivePivot#unloadMembersFromDataNode()` in favor of `IMultiVersionDataActivePivot#maskMembers()` and `IMultiVersionDataActivePivot#unmaskMembers()`.
* PIVOT-13089 Cube: Deprecated the constructors and setters in `DrillthroughQuery` in favor of the builder.
* PIVOT-13089 Cube: Deprecated the constructors and setters in `GetAggregatesQuery` in favor of the builder.

### Fixed

* PIVOT-12797 Distribution: Fixed possible race conditions causing `NullPointerException`s when a data node leaves its cluster shortly after joining, shortly before reconnecting, or when deleting branches.
* PIVOT-12974 MDX: Fixed only one grand total being hidden when using `IMdxContext` to hide grand totals and subtotals simultaneously.
* PIVOT-13006: Fixed Swagger UI failure caused by conflicting `swagger-annotations` (javax) and `swagger-annotations-jakarta` dependencies on the classpath.
* PIVOT-13013: Content Service: Calculated members, KPIs and Named Sets created by any user are now visible to ROOT\_USER. Previously, they were only visible to the user who created them.
* PIVOT-13013: Content Service: Calculated members, KPIs and Named Sets are visible to a user if one of the roles assigned to the user is in the readers list of that element. Previously, they were only visible if the user was directly in the readers list.
* PIVOT-13119: Cube: Fixed `IAxisHierarchy#retrieveMember(String, boolean)` returning null when a matching member was not granted by the `ISubCubeProperties`, even if another member with the same name is granted.
* PIVOT-13140: Data Export: Fixed CSV escaping to use RFC 4180 compliant doubled quotes (`""`) instead of backslash-escaped quotes (`\"\"`).
* PIVOT-13182: Cube: Fixed `NullPointerException` occurring during query planning, due to cycles introducing by dependencies between hierarchies, such as a Copper-join hierarchy based on a bucketing hierarchy.

### Security

* PIVOT-9754 Cloud source Azure: Upgraded `com.azure:azure-sdk-bom` to version 1.3.3 and `com.azure.resourcemanager:azure-resourcemanager` to version 2.58.0
* PIVOT-9938 Parquet source: Upgraded the parquet ecosystem to version 1.16.0 (`org.apache.parquet:parquet-column`, `org.apache.parquet:parquet-avro`) to fix CVE-2025-30065 and CVE-2025-46762
* PIVOT-12962 Bump `com.google.cloud:libraries-bom` to version 26.73.0 to fix CVE-2025-55163. REST endpoints now default to JSON when no Accept header is provided. XML responses remain supported when explicitly requested via `Accept: application/xml`.

## 6.1.15

2025-12-12

### Added

* PIVOT-12640 MDX: Added `IMdxContext#getIgnoreInvalidMeasures` to control the behavior of queries that reference measures which either do not exist in the cube or are not granted to the user. The default value is `false`, which is the current behavior of the MDX engine.
  Combined with the method `ISubCubePropertiesBuilder#grantMeasure`, this feature makes it possible to hide a measure from the user without failing their queries.
  This is useful when sharing an Atoti UI dashboard with another user associated with reduced privileges.
* PIVOT-12670 XMLA: Added support for the XMLA `Timeout` property. It's now possible to specify a query timeout (in seconds) in XMLA Execute requests, which is mapped to the `QueriesTimeLimit` context value.
* PIVOT-12967 MDX: Added `numdecimalplaces` optional argument to the [Round function](https://learn.microsoft.com/en-us/office/vba/language/reference/user-interface-help/round-function).

### Changed

* PIVOT-12816 Distribution: Due to internal changes, nodes using Atoti Server 6.1.15 or later cannot communicate with nodes using Atoti Server 6.1.14 or earlier.
  See the [compatibility policy for nodes in a cluster](backward_compatibility#compatibility-policy-for-nodes-in-a-cluster) for more information.
* PIVOT-12831: The `ExperimentalCubeRestrictionUtil.createCompanionCubeFilter` method will return `CubeFilter.NO_FILTER` instead of `null` if no specific cube filter can be created.

### Deprecated

### Removed

### Fixed

* PIVOT-12805 Cube: Fixed a sporadic query execution error that occurred when mapping fields shared the same name in both the base store and the joined store of a copper join.
* PIVOT-12774: Distribution: Fixed `DistributionTestHelper` to correctly count the number of transactions.
* PIVOT-12953 Cube filters: Fixed `ISubCubeProperties#isLocationGranted` regarding range locations. It now checks if at least one of the cube cells is granted.

### Security

* PIVOT-12958 Switched dependency `org.lz4:lz4-java` to `at.yawk.lz4:lz4-java` (version 1.10.1) to fix CVE-2025-12183.

## 6.1.14

2025-12-02

### Added

* PIVOT-11079 Continuous query: Allow forcing continuous queries to perform a full refresh after each pivot transaction using the `IAggregatesContinuousHandler#FORCE_FULL_REFRESH_ENGINE_PROPERTY` property.
  This may improve performance when computing the impact of a transaction is too costly.
  See [this page](../cube/handlers#configuration) for more information.
* PIVOT-12162 Added a new REST endpoint to execute GAQ queries and stream results in the Apache Arrow format `application/vnd.apache.arrow.stream`.
* PIVOT-12806: Tech: Added `VectorUtil#invertVector` implementation that computes 1/x for each underlying vector value. This generates a wrapper returning double values and throwing `ArithmeticException` for division by zero. `VectorUtil#invertVector` offers a variant returning NaN instead of throwing on divisions by zero.
* PIVOT-12836: DirectQuery: Added `ICustomJdbcTypeMatcher` interface for generic JDBC connector (see [this page](../directquery/databases/jdbc#jdbc-type) for more details).

### Changed

* PIVOT-9624 Cube: Post Processors now regularly check for query interruption during point iteration. Most uses of `IInterruptionChecker` API can now be removed from project code.
* PIVOT-11938 Distribution: Data cubes only communicate with Query cubes that expose the application they belong to. This drastically reduces the number of messages exchanged on the network in a cluster with multiple query cubes, and multiple applications.
* PIVOT-12749 JGroups has been updated from version 5.3.11.Final to version 5.5.0.Final.
  Some JGroups configurations may need to be updated accordingly.
* PIVOT-12893 Distribution: Upon detection of a missing message from a data cube, the query cube used to send a *restart order* to that cube right away. It now waits for `IMessengerDefinition#MESSENGER_TIMEOUT` before sending the restart order. If the message is received in the meantime, the restart order is cancelled.

### Deprecated

* PIVOT-12907 Data: Deprecate methods changing the state of `ICsvFileParsingReport`: `registerAnomaly` and all the various `recordCumulative???Time`.

### Fixed

* PIVOT-12366 Distribution: Fixed an issue where queries could return incomplete results if a data cube left the cluster during query planning. Previously, no exception was necessarily thrown even when `ActiveViamProperty.THROW_ON_MISSING_DATA_NODE_RESPONSE` was set to `true`, resulting in partial results instead of an error.
* PIVOT-12576 Content Service: Prevent the entitlement cache (`withCacheForEntitlements(long)` while building the content service) from trying to reconnect to the Content Service after being closed.
* PIVOT-12679 Cube restriction: Prevent NPE caused by cube restrictions based on non-standard hierarchies. The cube restrictions based on non-standard hierarchies (like a from store hierarchy) do not affect aggregate retrievals.
* PIVOT-12750 Fixed `ClassCastException` when using `getPattern` in `LikeCondition` with non-pattern types.
* PIVOT-12770 Fixed `LogicalCondition`s equality.
* PIVOT-12806 Distribution: When a cluster enters a bad state, a restart order is sent by the query cube. But if a data cube sends another message at the same time, the query cube could try to process it while the data cube is supposed to be restarting, leading to unexpected errors. This is now fixed, and messages received from a data cube that is supposed to restart are ignored.
* PIVOT-12908 Restored `/activeviam/pivot/rest/v9/cube/spreadsheet/contextvalues` REST endpoint. It was no longer available after bumping REST API version to `v10`.

### Security

* PIVOT-12956 Bump `org.apache.commons:commons-email` to version 1.6.0 to fix CVE-2025-7962.

## 6.1.13

2025-10-31

### Added

* PIVOT-7334 DirectQuery: Added support for SumProduct aggregation function; no need to add a custom `UserDefinedSqlAggregationFunction` anymore.
* PIVOT-12441 Tech: Added `IQueryExecution#isLargeMdxSetOptimizationEnabled` that controls whether optimization of large MDX sets is enabled.
* PIVOT-12527 MDX: Added the `Today()` function.
* PIVOT-12543 Cube: Added class name in the error message thrown by `IPartitionedPostProcessor.setPartitioningLevels`.
* PIVOT-12609 Cube: Added transaction timings for ActivePivot transactions. They can now report the total time and durations of the transaction and commit phases. An event `ActivePivotTransactionCommittedEvent` is created for each ActivePivot after a successful transaction.
* PIVOT-12609 Cube: Added logs to observe transaction timings on hierarchies. Activating the level FINE on `atoti.server.active_pivot.transaction` display the slowest hierarchies during a transaction, as well as the start/stop of commit operations in hierarchies. At the FINEST level, the report prints the timings for every single hierarchy.
* PIVOT-12629 REST API: Added new endpoint `GET /activeviam/pivot/rest/v10/cube/query/running/{cubeName}` to list all currently running queries on a specific cube.
* PIVOT-12631 Query History: Added query kill endpoints to the pivot namespace (`PATCH /activeviam/pivot/rest/v10/cube/query/{cubeName}/{epochId}/{queryId}` and `PATCH /activeviam/pivot/rest/v10/cube/query/{cubeName}/running`). Introduced `IQueryCancellationListener` interface to notify components when queries are cancelled. Query History now implements this listener to track cancelled queries.

### Changed

* PIVOT-11917 Security: `GlobalEntitlement` and `PivotEntitlement` have been moved to the public API.
* PIVOT-12091 DirectQuery: added a caching mechanism for distinct queries in multi-step aggregate queries to avoid redundant preliminary query executions and improve performance.
* PIVOT-12383 Copper: The `activepivot-copper` module is now empty but remains not to break mvn configurations. The module has been merged into `activepivot-impl`. Classes stay in the same package, making this a seamless change.
* PIVOT-12646 Distribution: Improve liveness in distributed setups with multiple cubes in the same Java process.
  Each cube now handles messages in its own thread pool instead of sharing a single global pool.
  Sharing a global pool could cause slowness, thread starvation, missing messages, and other issues.
* PIVOT-12671 Cube: Improved the performance of Range-Sharing. The algorithm can handle a larger query plan while running faster and consuming less memory.

### Deprecated

* PIVOT-12441 Tech: Deprecated `ActiveViamProperty.LARGE_MDX_SET_OPTIMIZATION` in favor of the new `IQueryExecution#isLargeMdxSetOptimizationEnabled` context value.

### Fixed

* PIVOT-11830 Copper: When creating an analysis procedure based on a custom measure, the result could be erroneous as the analysis levels where cleared when evaluating this procedure.
  This is fixed as long as a measure-based procedure does not need any member created on a measure-based analysis hierarchy.
  For example, bucketing after a copper join will now work. But bucketing after another bucket may still not work.
* PIVOT-11939 Cube: Fixed `IActivePivot#execute` ignoring context values of query types extending `IContextualQuery` such as `GetAggregatesQuery`.
  This may change the behavior of certain queries.
* PIVOT-12067 Fixed datastore reference `dontIndexOwner` causing a `ContributionException` on the bitmap aggregate provider.
* PIVOT-12291 Aggregate Providers now store values in chunked arrays instead of storing them in a single chunk. This prevents integer overflow errors when loading over \~500M records with a provider partition.
* PIVOT-12321 Observability: Queries' related logs include the associated span IDs and trace IDs.
* PIVOT-12328 MDX: The keyword `NON EMPTY` no longer causes the cross-join of Sets to only retain distinct values.
* PIVOT-12452 Cube: Fixed the query plan export that could, in specific cases, hide the fact that some partial aggregate providers were used to answer the query.
* PIVOT-12457 Data: Fixed data export where the default measure is wrongly exported despite measures not being requested. This happened whenever the MDX query contained mentions to measures, like in the order function `Order(<hierarchy>, <measure>, ASC)`.
* PIVOT-12465 Cube: Fixed an issue when using `DynamicAggregateProvider` API that would prevent the structural transaction from being committed when the changes in the pivot force a structural change in the datastore (such as enforcing a different NUMA policy).
* PIVOT-12466 Cube: Fixed an issue when using `DynamicAggregateProvider` API that would prevent running two successive transactions.
* PIVOT-12467 Cube: Fixed a potential NPE triggered when adding an unnamed partial aggregate provider.
* PIVOT-12486 Cube: Fixed a potential NPE triggered when using `LocationUtil.partialExpand` in very specific cases of polymorphic distribution and factless hierarchy members.
* PIVOT-12520 Observability: Distributed queries' related logs include the associated span IDs, trace IDs, and username, and transfer this information to the data cubes.
* PIVOT-12521 Observability: Distributed queries once again produce `QUERY_EXE_START`/`QUERY_EXE_STOP` logs in data cubes.
* PIVOT-12577 Data: Fixed Arrow data export failing with `ClassCastException` when date or datetime fields contain "N/A" values. This occurred when nullable date fields in the store were used as non-nullable cube levels, resulting in "N/A" strings that the Arrow vector feeders could not handle.
* PIVOT-12618 Cube: Fix infinite loop when destroying an Aggregate Store. This could happen after inserting data into the Partial Aggregate Provider, as old versions are progressively cleaned up. This issue could cause the thread named `av-active-collector` to run forever, and can be detected with a Flight Recording.

## 6.1.12

2025-09-19

### Added

* PIVOT-12073 Off Heap Memory: new Atoti JFR Events help following off heap memory allocation. Check the [Off-heap memory monitoring](../monitoring/off-heap_memory) page.
* PIVOT-12394 Tech: Allow bypassing non-JIT aggregate providers in favor of the global JIT provider using the `IQueryExecution` context value.
  This can be useful to quickly validate the impact of a partial aggregate provider on a specific query.

### Changed

* PIVOT-11946 Aggregation functions: `IHistory` now extends `IReadableCell`, thus benefiting from strongly typed read and write APIs. Using these APIs instead of the boxed `read` and `write` methods will reduce the stress put on the Garbage Collector when updating measures stored in Aggregate Providers, while also slightly improving performance of queries reading these measures.
  * Custom implementations of `IHistoryAggregationFunction` or `IHistoryGenericAggregationFunction` can be updated to benefit from this improvement.
    Histories with return types that are primitive numbers are encouraged to extend one of the following abstract classes: `ADoubleHistory`, `AFloatHistory`, `ALongHistory`, or `AIntegerHistory`.
  * For compatibility reasons, `IHistory` has default implementations of the methods of `IReadableCell`; they must be overridden to reduce the boxing.
* PIVOT-12073 Off-heap memory tracking has been revamped to use JFR events. To enable it, check the [Off-heap memory monitoring](../monitoring/off-heap_memory) page.
  * The previous JVM arguments to sample memory `activeviam.mmap.tracking`, `activeviam.mmap.sampling.start`, `activeviam.mmap.sampling.percent` and `activeviam.mmap.sampling.depth` are now deprecated.
  * The associated JMX endpoints (`startMemorySampling`, `stopMemorySampling`, `reportMemorySampling` and `printMemoryUsage`) have also been deprecated.
* PIVOT-12197 Atoti Runtime Starter has been renamed to Atoti Server Application Starter. See the Deprecated section for changes to artifacts, classes, and properties.
* PIVOT-12287 Distribution: In compliance with JGroups's `FILE_PING` protocol, whitespaces in a cube's name will be replaced by underscores `_`  when generating the internal address of a node. This may slightly affect the distribution logs.
* PIVOT-12386 Copper: Improve the performance of some of the queries using a Copper join. Members of the levels used in the join mapping are now properly transformed into filtering conditions for database queries.
* PIVOT-12383 The `activepivot-ext` module is now empty but remains not to break mvn configurations. The jar `activepivot-ext` is now longer published. A zip file is now uploaded at the same location with the Java classes previously in the `activepivot-ext` public package.

### Deprecated

* PIVOT-12073 Off-heap memory tracking has been revamped to use JFR events.
  * The JVM arguments to sample memory `activeviam.mmap.tracking`, `activeviam.mmap.sampling.start`, `activeviam.mmap.sampling.percent` and `activeviam.mmap.sampling.depth` are now deprecated.
  * The associated JMX endpoints (`startMemorySampling`, `stopMemorySampling`, `reportMemorySampling` and `printMemoryUsage`) have also been deprecated.
* PIVOT-12197 Artifacts, classes, and properties have been renamed following Atoti Runtime Starter's renaming.
  They remain available at their previous respective locations for compatibility, but they have been deprecated and usages should be updated to use the new locations.
  * The `atoti-runtime-starter` maven artifact is now named  `atoti-server-application-starter`.
  * The `atoti-runtime-plugin-parent` maven artifact is now named `atoti-server-extension-parent`.
  * Classes under packages `io.atoti.runtime.api.measures`  have been moved to `com.activeviam.atoti.application.api.measures`.
  * Classes under packages `io.atoti.server.common.api.plugins` have been moved to `com.activeviam.atoti.server.common.api.plugins`.
  * Properties under `atoti.server.runtime` have been moved to `atoti.server.application`, e.g. `atoti.server.runtime.py4j.auth-token` is now `atoti.server.application.py4j.auth-token`.
  * The logger `atoti.server.runtime-starter` is now named `atoti.server.application-starter`.
* PIVOT-12394 Tech: Deprecated the `QueryExecution(Boolean)` constructor in favor of `QueryExecution#builder`.

### Fixed

* PIVOT-10628 Cube: The Aggregate cache can no longer contain corrupted entries following a failure to complete the execution of a query.
  This bug could result in errors containing the message "Can't discard the result of a non-computed retrieval", or even lead to silent failures.
  Multiple query execution APIs were affected, such as `IActivePivotVersion#executeAsync` and Websocket MDX Queries, including any interaction with Atoti UI
* PIVOT-11870 Distribution: Fix the default max size of `DRILLTHROUGH_QUERY_RESULT` messages being 2 MB instead of 32 MB, as stated in the documentation.
* PIVOT-12279 Cube: The method `IActivePivotManager#rebuild(String... pivotNames)` no longer ignores the list of pivots to rebuild.
* PIVOT-12286 MDX: Fixed an issue that could cause randomly disappearing MDX calculated members. This was due to a translation error with the ActiveViam Property (or its default value) `-Dactiveviam.contextvaluemanager.session.lifetime=[long in seconds]`.
* PIVOT-12295 `IAggregatesLocationResult` is public API once again, allowing the `ILocationExpansionProcedure.IExpansionIterator#reset` to filter analysis hierarchies using underlying measure values. This API allows customizing how a specific post-processor handles expansion on analysis hierarchies.
* PIVOT-12314 Datastore: Distinct Queries stating a result size limit can no longer return fewer results than expected.
* PIVOT-12394 Tech: Fixed the `IContextValueTranslator` for `IQueryExecution` flipping whether range sharing is enabled during decoding.

### Security

* PIVOT-12365 Bump `org.springframework.boot:spring-boot-dependencies` to version 3.5.5 to fix CVE-2025-48989 and CVE-2025-52999.
* PIVOT-12365 Bump `io.netty:netty-bom` to version 4.1.125.Final to fix CVE-2025-55163.
* PIVOT-12365 Bump `org.springframework:spring-framework-bom` to version 6.2.11 to fix CVE-2025-41259.
* PIVOT-12365 Bump `org.springframework.security:spring-security-bom` to version 6.5.4 to fix CVE-2025-41248.

## 6.1.11

2025-08-11

### Added

* PIVOT-6966 Copper: Added `Copper.sumProduct` measure that returns the sum product of multiple fields.
* PIVOT-6966 Copper: Added multi field `Copper.agg` function that takes as params an array of field names and a multi field aggregation function plugin key. `SumProduct` is an example of such an aggregation function.
* PIVOT-9713 MDX: Improved performance of the `Members` Function when called on a hierarchy. Queries containing `[Dimension].[Hierarchy].Members` where `Hierarchy` is a deep hierarchy with high cardinality should spend significantly less time in the MDX layer.
* PIVOT-11888 Copper: Each API taking a `CopperLevel` as argument has now been duplicated to take a `LevelIdentifier` instead. This should reduce the required amount of code to define measures.
* PIVOT-11929 Tech: Added new `IQueryExecution` context value that controls specific features of a query execution. For now, users can disable / enable range sharing through this context value.
* PIVOT-12042 MDX: Using the same `ActiveMeasure` multiple times within a single MDX query no longer generates multiple `ActiveMeasure` instances. This results in performance improvement for projects making heavy use of the `ActiveMeasure` feature.
* PIVOT-12101 Testing: Added static method `ArrayReaderWriter#of` to easily instantiate it with a list of values.
* PIVOT-12138 Copper: Added `Copper.switchOn` to select among several measures the value to return depending on the current value on a level.
* PIVOT-12222 Distribution: The error message `Expected a single contribution delta, but got [null, null] ...` should no longer appear with branch creation. This was due to an erroneous attempt to batch transaction messages within the query cube for performance reasons.
* PIVOT-12243 Jwt configuration: Added possibility to setup a AuthenticationDetailsSource bean to provide custom authentication details for the JWT authentication.
* PIVOT-12248 Distribution: Fix a race condition when a branch was deleted shortly after the last transaction on said branch.

### Changed

* PIVOT-11428 MDX: `DRILLTHROUGH SELECT ...` queries used to be executed by first resolving the `SELECT` statement through a first sub-query, then retrieving the underlying data.
  Whenever possible, the resolution of the `SELECT` statement is now performed without running a sub-query. Atoti will default to the previous behavior when this new resolution fails.
  When the Atoti application relies on an external database, these changes will significantly reduce the cost of running `DRILLTHROUGH` queries.
* PIVOT-11880 Atoti Server Starter: a 3072-bit JWT key pair is automatically generated when no public and private keys are provided.

### Deprecated

* PIVOT-11679 Deprecate the field `#version` in `AtotiRestController`, in favor of `#versions`, accepting an array of versions.
* PIVOT-11761 Spring property: Property `atoti.atoti-ui` is now deprecated in favor of `atoti.server.ui`.

### Fixed

* PIVOT-11679 Restore the field `#version` in `AtotiRestController`, erroneously removed in 6.1.10 and causing a breaking change.

## 6.1.10

2025-06-30

### Fixed

* PIVOT-11659 Distribution: In a horizontal setup with one data cube defining a concealed hierarchy that is needed at the initialization phase of one of its post-processors, an error would be thrown by the query cube, stating that said hierarchy was unknown to its structure. This is now fixed, and the query cube will mark this measure as not executable in the query cube. The distributed query planner will always delegate execution of this particular measure to the data cube, where the hierarchy is properly defined.
* PIVOT-11942 Distribution: In a polymorphic setup with a default hierarchy is shared by two data nodes from different applications, an error could be thrown when one of the two nodes leaves the cluster. This is now fixed, and the polymorphic dimension now arbitrarily selects a new default hierarchy among the remaining ones.
* PIVOT-11943 DirectQuery: When using the incremental refresh feature, a failure of the query updating the cube leads to the transaction being rolled back, and the cube getting back to the state before the refresh. However, if the cube contains a virtual hierarchy, the transaction rollback would throw and leave the cube in a block state. This is now fixed, and transactions on virtual hierarchies are properly implemented as no-op.
* PIVOT-11970 Distribution: Use of APM, or any Spring Boot Starter using APM, could lead to errors, stating that the application failed to authenticate the message. This feature has been fully removed: the messages being sent over the network are no longer associated with a user, since the queries associated with these logs are already linked to the user running the query.
* PIVOT-11990 Cube: Removed the logging line `No name parser defined for this level` that floods the log file at the INFO level. Instead, a SEVERE message will be logged in the rare cases where this misconfiguration can lead to erroneous or undefined behaviors of the aggregation engine.

## 6.1.9

2025-06-26

### Added

* PIVOT-10239 Tech: Added MBean operations `killEnqueuedQueries(String reason)` and `killRunningQuery(String, epochId, String QueryId, String reason)` in `ActivePivotQueryManager`, allowing a user to specify the reason for which queries are stopped. This reason will be reflected on the stack trace, in the logs, and be shown to end users in Atoti UI.
* PIVOT-10628 When running a query against a cube, intermediate results that are no longer being used in a chain of post-processors are progressively discarded to free up that memory. A new temporary property `activeviam.feature.experimental.disable_aggregate_results_discard.enabled` allows to disable this memory optimization. When set to `true`, the intermediate results will be cleaned up at the end of the query.
  This will prevent any exception tied to this optimization.
* PIVOT-10822 Distribution: Added observability to the `IMultiVersionDistributedActivePivot#unloadMembersFromDataNode()` method.
* PIVOT-11279 Datastore: Simple implementations (`RecordFormat` and `ArrayReaderWriter`) of `IRecordFormat`, `IArrayReader` and `IArrayWriter` have been provided in the testing module for easy testing of classes like `IUpdateWhereProcedure`.
* PIVOT-11543 DirectQuery: Databricks runtime 16.4 is now officially supported.
* PIVOT-11575 Source: For JDBC, the column calculator related to numbers `NumberJdbcColumnCalculator` is now public.
* PIVOT-11736 DirectQuery: The ClickHouse connector has been upgraded to use `com.clickhouse:client-v2:0.8.6`, and now uses `ClickhousePropertiesV2`.
* PIVOT-11764 Tech: `VectorUtils#scaleVector` and `VectorUtils#translateVector` have been added to optimize such computations on vectors.
* PIVOT-11772 Tech: `VectorUtils#absoluteValueVector`, `VectorUtils#positiveValueVector` and `VectorUtils#negativeValueVector` have been added to optimize such computations on vectors.
* PIVOT-11781 Tech: The Atoti Server version is now available in the class `com.activeviam.tech.core.api.version.Versions`.
* PIVOT-11782 Tech: Added class `com.activeviam.tech.core.api.cell.CellUtil` to create `IWritableCell` that can contain any type of data.
* PIVOT-11786 Tech: The default delimiter used to parse vectors is now exposed in `IParser#getVectorDefaultDelimiter()`.

### Changed

* PIVOT-9818 Source: Introduced new logger notations for Source-related classes.
* PIVOT-10766 Distribution: creation of distributed branches is more efficient, resulting in better performance and reduced network usage.
* PIVOT-11589 Content-service Properties: Changed the properties to configure a content service connected to a database using hibernate ORM. Use `atoti.server.content-service.enabled-type=database` combined with `atoti.server.content-service.database.hibernate.xxx` for each hibernate property to set. As an example, use `atoti.server.content-service.database.hibernate.dialect=org.hibernate.dialect.H2Dialect` to set the sql dialect to h2dialect.
* PIVOT-11699 The default allocator on macOS is set to mmap since the Slab one is not supported on this OS.

### Deprecated

* PIVOT-10766 Distribution: the property `com.activeviam.activepivot.core.intf.api.description.IMessengerDefinition.AGENTS` has been deprecated for removal in 6.2. Distribution agents are now considered an internal API.
* PIVOT-11736 DirectQuery: The class `ClickhouseProperties` has been deprecated; use `ClickhousePropertiesV2` instead.

### Removed

* PIVOT-11703 Remove the property `DISTRIBUTION_BEHAVIOR_OVERRIDE_PROPERTY` related to the distribution of post-processors. Only the default behavior is kept (see the [migration notes](migration_notes#queries-1)).

### Fixed

* PIVOT-10622 Logging: Fixed wrong formatting of logs generated by `LogNettyMessenger`. The issues were happening when logging an error with the message.
* PIVOT-11421 Improve performance on condition normalization.
* PIVOT-11449 Distribution: Post processors can now be distributed when the distributed level is expressed in the queried location as a point coordinate. See [the associated documentation](../distributed/distributed_post_processors#post-processor-definition-in-the-data-cube) for more details.
* PIVOT-11473 MDX: Fixed the `DateDiff` function with quarters as the unit checking the duration between dates instead of the quarter each date belongs to. For instance, `DateDiff('q', CDate('2024-12-31'), CDate('2025-01-01'))` now correctly returns 1 instead of 0.
* PIVOT-11542 Distribution: Fixed an issue where multiple data cubes using the default member of a given distributing level would raise an exception.
* PIVOT-11745 DirectQuery: Fix key fields discovery to avoid discovering all the schemas, this should improve discovery time at startup.
* PIVOT-11814 Distribution: Fixed the name of the Gauge for data-node priority in the cluster. It now has a constant name and tags to separate the data nodes.
* PIVOT-11814 Distribution: Fix the registration of the Gauge reporting Netty direct memory to avoid multiple registrations.
* PIVOT-11817 Datastore: Re-added memory statistics attributes `indexId` and `referenceId` for MAC.
* PIVOT-11925 Planning Graph: In some specific cases, a query filter could be merged with the user's role's associated `ISubCubeProperties`. This only appeared in 6.1.8 and is now fixed.

### Security

* PIVOT-11875 Bump `org.springframework.boot:spring-boot-dependencies` to version 3.4.6 to align it with the other upgrades.
* PIVOT-11875 Bump `org.apache.tomcat.embed:tomcat-embed-core` to version 10.1.42 to fix CVE-2025-48988 and CVE-2025-46701.
* PIVOT-11875 Bump `commons-beanutils:commons-beanutils` to version 1.11.0 to fix CVE-2025-48734.
* PIVOT-11875 Bump `org.apache.zookeeper:zookeeper ` to version 3.9.3 to fix CVE-2024-51504.

## 6.1.8

2025-05-15

### Added

* PIVOT-11101 DirectQuery: Added support for LIKE condition in queries on DirectQuery databases.
* PIVOT-11364 Distribution: Added a new data replication policy `DataReplication.REPLICATE_ON_SLICER_IGNORING_FILTER`. This policy will replicate the measures on the first level of unknown hierarchies, even when cube filters apply restrictions on those hierarchies.
* PIVOT-11598 DirectQuery: Added support for creating custom SQL aggregation functions that match an IAggregationFunction (previously, only UDAFs could be used).

### Changed

* PIVOT-9817 Datastore: Introduced new logger notations for Datastore-related classes.
* PIVOT-11594 Content Service: Listeners now try to reconnect indefinitely instead of stopping after 10 attempts.

### Fixed

* PIVOT-11503 Distribution: Fixed an issue that could randomly cause invalid results. The particular setup required to trigger the issue was to run a query against the query cube with:
  * at least 2 distributed applications contributing to the query cube
  * querying at least 1 measure from each application
  * querying down to at least 1 level of each application that does not exist in other applications
* PIVOT-11638 Datastore: Fixed issue where custom conditions were not supported with an AND operator.
* PIVOT-11649 Distribution: Fixed an issue where attempting to unload members from a data cube when there are multiple cubes in the cluster would throw. This now properly throws on multiple query cubes only.

### Security

* PIVOT-11687 Bump Spring Boot to version `3.4.5` to fix CVE-2025-22235 and hadoop to version `3.4.1` to fix CVE-2024-29857.

## 6.1.7

2025-04-24

### Changed

* PIVOT-10683 DirectQuery: Switched connection used in JdbcDataValidator configuration to FeedingConnection (heavy load warehouse).

### Removed

* PIVOT-11489 Datastore: Removed Observability for get-by-key queries because it was hurting performance.

### Fixed

* PIVOT-11051 DirectQuery: Upgrade Snowflake jdbc to version 3.23.2 to fix CVE-2025-24789
* PIVOT-11503 Distribution: Fixed an exception due to an attempt to perform twice the removal of a data node contributions when it was leaving the cluster. This bug could also happen upon branch deletion.

## 6.1.6

2025-04-03

### Added

* PIVOT-10696 Distribution: Added the ability to set the priority of a data node in horizontal duplication via the cluster definition property `IDataClusterDefinition#DATA_NODE_PRIORITY`.
* PIVOT-10699 Distribution: Added the `IMultiVersionDistributedActivePivot#unloadMembersFromDataNode()` method to unload members from a data node while ensuring consistent query results when the unloaded members are duplicated across multiple data nodes with horizontal duplication. See [this page](../distributed/distributed_data_roll_over#handling-consistent-member-unloading) for more information.
* PIVOT-11156 Distribution: Supports the duplication of distributing level members in distinct data
  nodes with polymorphic distribution.
* PIVOT-11382 Content Service: Support notifications for listeners for the Content Service with database locks. This works using polling, at a frequency controlled by options passed to `PersistedBuilder#databaseLocks`

### Deprecated

* PIVOT-11382 Content Service: `PersistedBuilder#databaseLocks(boolean)` is deprecated in favor of `PersistedBuilder#databaseLocks(LockOptions)` providing all the arguments to configure the database locking policy.

### Security

* PIVOT-11284 Bump Spring Boot to version `3.4.4` to fix CVE-2025-24813.
  Note that this includes a **breaking change** from Spring: the `getURL()` implementations of `Resource` must now include a trailing slash (see [here](https://github.com/spring-projects/spring-framework/issues/33712)).
  For instance, if an implementation used to return `URI.create("file://env.js").toURL()`, it should now be modified to return `URI.create("file://env.js/").toURL()` instead.
* PIVOT-11439 Use `Argon2PasswordEncoder` instead of `BCryptPasswordEncoder` to fix CVE-2025-22228.

## 6.1.5

2025-03-25

### Added

* PIVOT-10692 Content service: Support database-level locks to prevent concurrency issues when content services on different machines are backed by the same database.<br />
  This can be enabled using `PersistedBuilder#databaseLocks`. See [this page](../content_server/cs_overview) for more information.
* PIVOT-11121 Added `IStatisticsQueryRunner#getApproximateDistinctValues(StoreFIeld)` to get the approximation of the distinct values of a table field using its dictionary.
* PIVOT-11218 Added `IDatastore#rebuildIndexes(String)` to rebuild all indexes in the given store.
* PIVOT-11324 CSV Source: Handle regex pattern when creating a `DirectoryCsvTopic` with `FileSystemCsvTopicFactory#createDirectoryTopic` and `FileSystemCsvTopicFactory#createPollingDirectoryTopic`.

### Changed

* PIVOT-9446 The field `code` in `ServiceException` is now private.
* PIVOT-10687 DirectQuery: A `count` aggregation on a multi-row vector field is queried differently on the external database,
  and returns a long, instead of an array of long. This does not impact users, unless they were using such a measure in an aggregate table.
  The column type would need to be adjusted accordingly. This improves performance of count on vector field
  and allows it to work with Aggregate Table Bootstrapper.
* PIVOT-11299 Distribution: All the data cubes within the same application must have the same measures.
  Setting the property `activeviam.distribution.cube.throwOnDifferentMeasureNames` to false disables this check.

### Fixed

* PYTHON-532 Fix `HierarchyComparator` serialization, which was causing all measures using this comparator (all window functions, such as cumulative functions) to fail the distributed discovery process.

* PIVOT-11066 Fix the `/activeviam/pivot/rest/v9/database/data/tables/{tableName}` endpoint to accept `$like` condition with any type.

* PIVOT-11187 DirectQuery: Avoid trying to estimate the cardinality of virtual hierarchies when selecting a query partitioning.

* PIVOT-11201 Fix missing value when the output member returned by the MDX Lead or Lag function does not
  have the same parent as the input member.

* PIVOT-11249 Datastore: Fix `ClassCastException` when running a non-compiled get-by-key query on a datastore transaction.

* PIVOT-11278 Fix partitioning error on DirectQuery with copper join.

* PIVOT-11326 Fixed a distribution issue in which a Copper UDAF defined in a datacube would not be available in the query cube. The Registry would throw, stating that no UDAF was registered with the plugin key the data cube sent over.

* PIVOT-11328 DirectQuery: Fix `InvalidSchemaException` when using an `IAggregateTableBootstrapper` with several aggregations pointing to the same field (e.g. A count and an average can both point to a `contributors.COUNT` field).

* PIVOT-11336 Content service: Fix a `NoSuchElementException` when using `ContentServiceSnapshotter#export` with a non-normalized path.

* PIVOT-11339 Content service: Fix an `ArithmeticException` when using `ContentServiceSnapshotter#export` with a fast database.

* PIVOT-11342 Spring Boot Starters: Fix an issue with APM starter - Fix initialization of some PostProcessor beans - they are now created without causing the instantiation of the configuration class holding them avoiding dependency problems.

* PIVOT-11404 Fix a concurrency issue leading to the creations of already existing properties in `BeanPropertyCompiler#compile`.

## 6.1.4

2025-02-27

### Added

* PIVOT-10169 Spring: Support distinct queries through the REST API of the Database.<br />
  This is possible from the new endpoint `/activeviam/database/v10/database`. This provides mostly the same API as `/activeviam/pivot/v9/database`, with an additional `distinct` parameter in the query body. See [this page](/engine/rest/6.1.20/database-rest-api/create-a-new-branch) for more details.
* PIVOT-10556 Observability: added spans for datastore queries with the same name (`Database query`) and tags than other database queries.
* PIVOT-11025 Cube: Added `IAxisLevelDescription#setMemberNameParserPluginKey` to provide a custom `IParser` plugin key to a level as a member-name-to-discriminator convertor. It can also be set through the fluent level builder: `#withMemberNameParserPluginKey`. It must be defined in virtual hierarchies whose level types are not String nor numeric.
* PIVOT-11035 Add properties to manage the websocket engine configuration, e.g. `atoti.server.endpoint.ws.engine.heart-beat-period`. See [this page](../starters/atoti_starter#authentication-flow) for more information.
* PIVOT-11090 Add the experimental `IQueryClusterDefinition.HORIZONTAL_DATA_DUPLICATION_PROPERTY`
  property to
  permit the duplication of the members of distributing levels in distinct data nodes. This enables atomic
  distributed data roll-over. See [this page](../distributed/distributed_data_roll_over) for more information.
* PIVOT-11117 Add the `IDistributedActivePivotVersion.getDistributionInformation()` method to get
  information about how members of distributing levels are distributed across the data cubes.

### Changed

* PIVOT-10169 Spring: `/activeviam/database/v10/database`. The new endpoint of the same feature set, in addition to supporting distinct queries.<br />
  It is provided out of the box by the [Atoti Server Spring Boot Starter](../starters/atoti_starter) but not authorized by default. Add the property `atoti.server.endpoint.database.security.enabled=true` to use the default configuration provided by this starter.<br />
  The remote Database service can be configured to target this new endpoint, using the method `RemoteDatabaseServiceBuilder.useEndpointDatabaseV10`.
* PIVOT-10508 DirectQuery: The Databricks/Snowflake/Redshift connectors now use a JDBC DataSource to create connections to Databricks/Snowflake/Redshift instead of the DriverManager. This allows for more stability as other JDBC drivers can't interfere with the DataSource as they could with the DriverManager.
* PIVOT-10676 Server polling timeouts can now be configured with properties `atoti.server.streaming-service.long-polling`.
* PIVOT-10925 Roles for KPIs and Calculated Members can now be configured with properties `atoti.server.content-service.roles.kpi` and `atoti.server.content-service.roles.calculated-members` respectively.<br />
  By default, these roles are set to `ROLE_USER`.
* PIVOT-10949 The login and logout page logo, configurable via the properties `atoti.server.security.login_page.logo` and `atoti.server.security.logout_page.logo` respectively, now support SVG, PNG, and JPG formats.
* PIVOT-11012 DirectQuery: databases now support any type as default value for Object fields, for instance `"N/A"` for a date field.<br />
  It is the same behavior as in the datastore.
* PIVOT-11050 Observability: unified spans for database queries under name `Database query` instead of having one span name for each type of query.<br />
  You can now get the query type with span attribute `Query Type`.

### Deprecated

* PIVOT-9544 Pivot: Deprecated `IIterableAggregatesRetrievalResult#forEachPoint(IPointProcedure procedure)` in favor of `IIterableAggregatesRetrievalResult#forEachPoint(int[] underlyingMeasures, IPointProcedure procedure)`.
* PIVOT-10169 Spring: `/activeviam/pivot/v9/database` is deprecated in favor of `/activeviam/database/v10/database`. The new endpoint of the same feature set, in addition to supporting distinct queries.
* PIVOT-10169 Spring: the constructor `JsonDatabaseQuery#JsonDatabaseQuery` with all arguments is deprecated in favor of the default constructor and the setters.

### Fixed

* PIVOT-9914 ActiveMonitor: Fix deadlock raised when the Repository daemon was started in the middle of an update.
* PIVOT-10508 DirectQuery: Remove some useless logs in Snowflake connector about already closed ResultSet.
* PIVOT-10730 Copper: Speed up publication of measures.
* PIVOT-10887 ActiveMonitor: Always save Audit entries in ActiveMonitor Repository, to avoid working on detached audit entities. Without this fix, Hibernate could raise errors reported unsaved entities.
* PIVOT-10888 Fix completion issue with datastore queries and JIT queries.
* PIVOT-10940 Copper: Fix issue with `Copper#newHierarchy` when adding a join-based analysis hierarchy and a bucketing analysis hierarchy into the same newly created dimension.
* PIVOT-10947 Copper: Fix exception thrown by Copper saying the measure was already published.
* PIVOT-11092 Datastore: Fix a NullPointerException which could happen when registering an Update-Where Procedure on a non-dictionarized field.
* PIVOT-11095 Copper: Fix inconsistent results in distributed applications. The generated names of the anonymous measures were not the same across the data cubes, when measures were published in different order.

### Security

* PIVOT-11077 Upgraded `io.netty:netty-handler` to `4.1.118.Final` to fix CVE-2025-24970.
* PIVOT-11077 Upgraded `net.minidev:json-smart` to `2.5.2` to fix CVE-2024-57699.

## 6.1.3

2025-01-13

### Added

* PIVOT-10255 The virtual hierarchies can retrieve their members using a GAQ in the MDX engine.
* PIVOT-10579 Csv Source: Added fetched byte count and total published lines in `ICsvFileParsingReport`.
* PIVOT-10689 Content service: added a new property `activeviam.contentService.webSocket.reconnectionDelay` to
  set the time to wait to try a reconnection to the content service after a WebSocket disconnection.
* PIVOT-10773 Distributing fields are renamed distributing levels to avoid confusion with selection fields. Added two new methods to `IClusterDefinitionBuilder`: `withDistributingLevels` and `withoutDistributingLevels` to define distributing levels using LevelIdentifier.

### Changed

* PIVOT-10405 The sum of max row ids for a table isn't printed anymore with `DatabasePrinter`.
* PIVOT-10862 `IStatisticsQueryRunner.estimateColumnCardinality` can evaluate the cardinality of multiple fields.
* PIVOT-10248 `IStatisticsQueryRunner.estimateColumnCardinality` in the Datastore now uses the HyperLogLog algorithm to evaluate approximate cardinality more efficiently.
* PIVOT-10426 WebSockets: Messages sent from web sockets are now sent by chunks.

### Deprecated

* PIVOT-10675 Distribution: Setting message size must now be done using `NettyMessageType`.
* PIVOT-10723 Distribution: Concealed measures are deprecated.

### Fixed

* PIVOT-10630 DirectQuery Databricks: Fixed issue with the catalog name not being specified in the Time Travel discovery query.
* PIVOT-10689 Content service: Set a reconnection mechanism to the content service websocket while handling
  branch permissions updates.
* PIVOT-10739 Spring Boot Starter, Distribution: All data cubes properly undergo injection of a context value manager and user details service.
* PIVOT-10742 Csv Source: Fixed issue during Csv parsing report when there are more configured topics than reported ones.
* PIVOT-10756 Virtual Hierarchies: Fixed issue with constructing wildcard locations for virtual hierarchies in `GetAggregatesStream` and `QueriesService`.
* PIVOT-10854 Fix issue where enqueued queries appear to be running indefinitely after calling
  `QueryBlockerUtil.blockQueries`.
* PIVOT-10887 ActiveMonitor: Correctly read modified `PointValue` and `EntityWorkflowConfiguration` after a write in the underlying Database. This was previously raising errors due to stale data.

## 6.1.2

2024-11-28

### Added

* PIVOT-8019 Pivot: Added `MaxAppendOnlyFunction` and  `MinAppendOnlyFunction` aggregation functions that do not support disaggregation but can be used within an aggregate provider.
* PIVOT-10009 Observability: Added the new metrics `atoti.database.data_model_transaction.hit` and `atoti.database.data_model_transaction.time` to monitor the schema update on the database.
* PIVOT-10481 Added a logger named `atoti.server.directquery.driver_manager` for JDBC connection about driver registrations and connections.
  It helps debugging connection issues by logging what happens in the `java.sql.DriverManager`.
  These logs include the connection URL, so in case the user has put sensitive information in it, it should be deactivated.
* PIVOT-10599 Copper: Added a `Copper.experimental().withContinuousQueryHandlers(...)` to manage continuous query handlers on every copper measure.

### Changed

* PIVOT-9589 Added the exception stacktrace to the logs produced for REST / HTTP exceptions.
* PIVOT-9589 Use a lower logging level for HTTP errors caused by clients, such as 400 and 404 errors.
* PIVOT-10289 Pivot: Improve Copper's parent value measure to not clear all the filters of the drilled hierarchies. This should speeds up queries.
* PIVOT-10309 Distribution: Builder for `ApplicationWithDatastore` now allows to skip the datastore description. This is useful when configuring query nodes.
* PIVOT-10528 Monitoring: Assigned random names to all beans created by Atoti Server. These beans still must be used through their types, unless documented otherwise. This prevents name clashes with simple names like `properties`.
* PIVOT-10576 DirectQuery: Changed the experimental API for emulated time-travel. See the [associated documentation](../directquery/emulated-time-travel).

### Fixed

* PIVOT-7123 Fix Class Cast Exception that would occur when performing a data export from an MDX Query containing a calculated member.
* PIVOT-10183 Interrupt the running datastore drillthrough query when unregistering a drillthrough stream.
* PIVOT-10241 Stop discarding the result of top level `AAggregatesRetrieval`. Such a discarding was causing random false results in a distributed application with a `LocalMessenger`. Since the `LocalMessenger` does not copy results, but transfers them to the QueryNode as is, the result could potentially be discarded before being reduced by the QueryCube.
* PIVOT-10520 Ensure that all MBeans available in 6.0 are available in 6.1
* PIVOT-10529 DirectQuery: Fix issue with Aggregate Table bootstrapper when using multiple hierarchies on the same aliased field.
* PIVOT-10537 DirectQuery: Fix issue with Aggregate Table bootstrapper when using the same group by field with different paths.
* PIVOT-10538 DirectQuery: Fix issue with Aggregate Table bootstrapper when using native measures such as `contributors.COUNT` or `update.TIMESTAMP`.
* PIVOT-10580 Xmla: Creating calculated members with the same name from different session could lead to a corrupted MdxContext.
* PIVOT-10618 Fix NullPointerException when logging a dictionary with a null key in `DomainDictionaryProvider`.
* PIVOT-10622 Fix Logback logger when using APM. This resulted in broken logs, with remaining `{}` in it.
* PIVOT-10622 Fix default Slf4j logger when using APM. This resulted in broken logs, with all values presented as as list upfront.
* PIVOT-10649 DirectQuery Aggregate Table Bootstrapper: Fix issue with the bootstrapper when using COUNT(field) measure.
* PIVOT-10814 Fix values not being returned for certain queries when `LARGE_MDX_SET_OPTIMIZATION` is
  enabled.

## 6.1.1

2024-10-17

### Added

* PIVOT-9968 Provide a way to pass an `IMemoryCollector` to `IInternalMemoryMonitored#getMemoryStatistics(memoryCollector)` in order to prevent the count of duplicated blocks.
* PIVOT-6558 Added the AI-based aggregate provider recommendation as an experimental feature. See the
  [associated documentation](../cube/providers/ai_optimizer).
* PIVOT-9978 Add the method `Registry#setType(Class, Class)` to programmatically register an Atoti Type.
* PIVOT-10285 JDBC Source: Added a method `IJdbcSourceBuilder.parsingReportEnabled(boolean)` to enable the reporting of parsing anomalies.
* PIVOT-10338 Added `OpenedTransactionTestWrapper` to facilitate transaction on specific fields for tests.
* PIVOT-10367 Cloud source API: Added a `CloudMultipleEntitiesCsvTopic` to read multiple CSV files explicitly defined from a cloud storage.
* PIVOT-10409 ActiveViam properties: Added `activeviam.activepivot.ensureSerializableMeasures` to ensure every measure is serializable.
* PIVOT-10516 MBean for stream management is now part of the Atoti Server starter.

### Changed

* PIVOT-4809 Copper: `Copper.storeLookup` no longer creates intermediate measures for constant values.
* PIVOT-9589 Added a short description and error id to REST exceptions
* PIVOT-9724 Update the Content Service Name Generator to generated fixed prefix based of the
  Property `activeviam.contentService.nameGenerator.size`.
* PIVOT-10103 Loading invalid Calculated Members or KPIs from the Content Server log instead of throwing.
* PIVOT-10117 Improve performance of some vector operations. This can mostly be felt in the primitive retrievals, or in the first post processor performing vector operations on top of said retrievals.
* PIVOT-10304 Update the condition to import the `DatabaseRestServicesConfig` in the starter configuration
  from having a `IActivePivotManager` Bean from having a `IDatabaseConfig` Bean.

### Deprecated

* PIVOT-9724 Content Service Property: Deprecated `activeviam.contentService.nameGenerator.defaultSize`, use instead `activeviam.contentService.nameGenerator.size`.
* PIVOT-10188 CSV Source API: Deprecated `ICsvParserConfiguration`, `IFileParserConfiguration`, `FileParserConfiguration`, use instead `CsvParserConfiguration`.
* PIVOT-10188 CSV Source API: Deprecated all constructors and setters of `CsvParserConfiguration`, use instead `CsvParserConfiguration#builder`.
* PIVOT-10142 Source API: Deprecated `ITranslator#setColumnCalculators()` and all the empty constructors of its implementation classes (`ATranslator`, `AColumnarTranslator`, `AHeaderTranslator`, `HeaderColumnarTranslator`, `IdentityTranslator`, `PojoTuplizer`, `MapTranslator`, `TupleTranslator`). Use instead the new constructors with the list of column calculators.
* PIVOT-10142 Source API: Deprecated `ATranslator`, use instead `ATranslatorWithColumnCalculators`. It is the same class with a more explicit name to underline the fact that it is a translator that uses column calculators.
* PIVOT-10142 CSV Source API: Deprecated `IHeaderTranslator` and all its methods in the implementation classes (`AHeaderTranslator`, `HeaderColumnarTranslator`), those are made internal.
* PIVOT-10142 CSV Source API: Deprecated `AHeaderTranslator#setTranslator()` and `AHeaderTranslator#setMaxWaitHeaderTime()`, use instead the constructor with the corresponding parameters in the implementation class `HeaderColumnarTranslator`.
* PIVOT-10219 Misc: Deprecated `ZeroVector`. Please use the methods in `SameValueVectorUtils` to create such a vector, e.g. `SameValueVectorUtils#doubleVector(10, 0.0)`.
* PIVOT-10231 DirectQuery: Deprecated `SnowflakeDialectSettings#arrayAggWrapperFunctionName()`. It's better not to set it, so the queries use the SQL built-in function `ARRAY_AGG` (which has been improved by Snowflake).
* PIVOT-10256 CSV Source API: Deprecated `CsvSourceFactory` and its associates methods `CsvSourceFactory#create`. Use instead `ICsvSource#builder` or `ICsvSource#builderForLocalFiles`.
* PIVOT-10258 Source API: Deprecated `IMapTranslator`.
* PIVOT-10261 Source API: Mark objects `MapTranslator`, `MapTuplizer`, `PojoTuplizer` as internal.
* PIVOT-10261 Source API: deprecate `ActiveViamProperty.PARSING_REPORT_ENABLED` and `ActiveViamProperty.CSV_PARSING_REPORT_MAX_ANOMALIES`. You can define those properties in the `CsvSourceConfiguration#builder()` or in `IJdbcSource.builder()`.
* PIVOT-10284 JDBC source API: Deprecated `IJdbcTopic`. Use instead the constructor of the concrete implementation `JdbcTopic`.
* PIVOT-10284 JDBC source API: Deprecated `JdbcTopic` constructors. Use instead the fluent builder `JdbcTopic#builder()`.
* PIVOT-10284 JDBC source API: Deprecated `JdbcSourceBuilder#withAppendBatchSize()`. This can now be configured at the topic level: `JdbcTopic#builder()`.
* PIVOT-10353 CSV Source API: Deprecate `IColumnarTranslator#setHeaderCheck` and `IColumnarTranslator#getColumnPosition`. As `IColumnarTranslator` thus becomes a marker interface, it will also be removed from the public API.
* PIVOT-10367 Cloud source API: Deprecated `ICloudCsvTopic` and its method `ICloudCsvTopic#setPattern()`. Use instead the constructor of the concrete implementation `CloudDirectoryCsvTopic` with the pattern as a parameter.
* PIVOT-10369 Cloud source API: Deprecated `CloudFetchingConfig` setters and constructors. Use instead the builder `CloudFetchingConfig.builder()`.

### Removed

* PIVOT-10376 Cube builder: A JIT aggregate provider could accept a custom partitioning and ignore it. It will now throw during the build.

### Fixed

* PIVOT-7536 Misc: Fixed issue `fill(-1.0)` method for chunks of double and floats.
* PIVOT-10075 Pivot: Attempt to cache the intersections of primitive retrievals' filters with provider' filters to improve performance of queries with multiple primitive retrievals.
* PIVOT-10203 The queries time limit of the Drillthrough queries was not propagated to the database.
* PIVOT-10220 Pivot: Fix UDAFs and Basic Post-Processors evaluation. They could be called on locations where their underlying measures had no values (but where contributors.COUNT was not null).
* PIVOT-10312 DirectQuery: Fixed issue with native time-travel on Snowflake and Databricks, which could not be enabled.
* PIVOT-10313 DirectQuery: Implementations of `IDatabaseSettings` are now fully immutable.
* PIVOT-10385 Some queries where not partitioned with using the JIT aggregate provider on DirectQuery.
* PIVOT-10407 Concurrency: Some MDX queries could lead to an infinite loop of `IllegalStateException`.
* PIVOT-10434 Observability: Fixed multiple registrations of gauge metrics. Issue was showing up in the logs as `Instrument ... has recorded multiple values for the same attributes`.
* PIVOT-10450 The DataExport service no longer incorrectly filters out empty cells. See [this migration note](./migration_notes#data-export-service) for more details.
* PIVOT-10453 Fix issue in NON EMPTY Crossjoin causing empty result.
* PIVOT-10469 Pivot: Improved performance of DrilldownMember. This will improve queries made by Excel when using the Collapse feature.
* PIVOT-10498 Use the default cube formatter if no existing cube formatter is given

### Dependencies

* PIVOT-10410 Bump `org.springframework.boot:spring-boot-dependencies` from `3.2.9` to `3.2.10`.
* PIVOT-10410 Bump `com.google.cloud:libraries-bom` from `26.45.0` to `26.47.0`.
* PIVOT-10410 Bump `software.amazon.awssdk:bom` from `2.27.17` to `2.28.10`.
* PIVOT-10410 Bump `com.clickhouse:clickhouse-http-client` and `com.clickhouse:clickhouse-data` from `0.6.4` to `0.6.5`.

## 6.1.0

2024-09-06

### Added

* PIVOT-4994 Added new method `IDataClusterDefinition.setConcealBranches()` to hide the branches of the data cube from the query cubes.
* PIVOT-6117 `SameValueVector` stores a vector, whose elements are all the same. Its usage is similar to `ZeroVector`.
* PIVOT-6514 Added an array formatter for measures. See the [associated documentation](../mdx/formatting#array-formats).
* PIVOT-6525 DirectQuery: introduce mechanism to incrementally refresh cube with data from external database. See `com.activeviam.directquery.application.api.Application#refresh(ChangeDescription)` and associated documentation.
* PIVOT-7933 DirectQuery Aggregate Tables is now an official feature and is no longer experimental.
* PIVOT-8186 Added a new class `DimensionIdentifier` that uniquely identifies a dimension within a cube. This object is accessible from `IDimensionInfo`.
* PIVOT-8402 Added a public test API in the form of the Maven module `com.activeviam:atoti-server-test`.
* PIVOT-8408 The post processor output type can now be configured using `BuildablePostProcessorBuilder.withOutputType(String type)`.
* PIVOT-8478 Added a new class `com.activeviam.pivot.server.spring.api.Services` to create `IDatabaseService`.
* PIVOT-8525 Added `.hideGrandTotals(int... axisOrdinals)` to the shared context mdx builder.
* PIVOT-8655 The array readers of the Copper API now have a `size()` method.
* PIVOT-8813 Added `IDatabase.getVersion(long)` to retrieve a past version.
* PIVOT-8830 Added `Registry.parseAnnotatedClasses()` and `Registry.scanPackages()` to set the registry contribution provider.
* PIVOT-8903 Added method `ICubeFilter.isHierarchyRestricted(HierarchyIdentifier)`.
* PIVOT-8918 Added `FieldTypeBuilder` (created with `FieldType.builder()`) to create a `FieldType`.
* PIVOT-8919 Added a warning message when using an old `ActiveViamProperty` that no longer exists.
* PIVOT-8980 Add an error message to signal that, in one cluster, a hierarchy is slicing in some data nodes but non-slicing in other data nodes.
* PIVOT-8994 Added `MemoryUtil` to get info about direct memory consumption.
* PIVOT-9505 Ability to use comparison operations (\<, \<=, > and >=) in Aggregate Tables.
* PIVOT-9511 Added method `ICanStartBuildingHierarchy.withHierarchy(IAxisHierarchyDescription)` to add a hierarchy from its description.
* PIVOT-9653 The names of the Databricks UDAFs on vectors can be overridden (see Databricks documentation).
* PIVOT-9708 Information about aggregate providers can be retrieved via `IActivePivotVersion#getAggregateProviderStatistics` and `IActivePivotVersion#getPartialAggregateProviderNames`.
* PIVOT-9829 Added `getName` to `IAggregateProviderDefinition`.
* PIVOT-9875 Optimized creation of vector allocation settings.
* PIVOT-9929 The constructor `AxisLevelDescription(levelName)` was restored.
* PIVOT-9999 Dedicated data structure to hold nullable boolean data. This reduces memory usage for such data, and also fixes a bug when frequent value compression was used on such data.
* PIVOT-10003 DirectQuery: emulated time-travel is available for all databases as an experimental feature. See the [associated documentation](../directquery/emulated-time-travel).
* PIVOT-10132 The number of available processors on the current machine can be retrieved using `PlatformUtil.getProcessorCount()`.
* PIVOT-10138 Added methods `IParser.create`, `IParser.createPluginKey`, `IParser.createPluginKeyForVector`, `IFormatter.create` and `IFormatter.createWithLocale`.
* PIVOT-10171 Add a `copy` method on `IRecordReader`. This is useful to keep a copy of the current record when iterating on a `ICursor`.

### Changed

* PIVOT-5228 Renamed fields, methods and constants in `ALocationShiftPostProcessor`. See the [migration notes](migration_notes#user-defined-measures-post-processors).
* PIVOT-5848 The property `IAnalysisHierarchy#LEVEL_TYPES_PROPERTY` has been moved to `IAxisLevelDescription#LEVEL_TYPE_PROPERTY` and is to be used on a per-level basis (see migration notes).
* PIVOT-6743 Renamed `ActiveUIContentServiceUtil` to `AtotiUiContentServiceUtil`.
* PIVOT-7045 In the data source APIs, the `MapTuplizer`, used to transform a record written as a map `columnName` to `value`, now has a single generic type `V` instead of two.
  This generic type is still the type of the values. `MapTuplizer`'s contract and implementation are otherwise unchanged.
* PIVOT-7255 When parsing level descriptions, leading and trailing spaces are no longer trimmed.
* PIVOT-7285 `IRefreshable#fullRefresh` is now called `IRefreshable#refresh`. `IRefreshable#restart` restarts the cube.
* PIVOT-7424 Description objects are no longer boxing primitive type attributes when it is not necessary.
* PIVOT-7541 Use Java 21 as the new baseline.
* PIVOT-7605 Renamed the license environment variable from `ACTIVEPIVOT_LICENSE` to `ATOTI_LICENSE`. Renamed the license system property from `activepivot.license` to `atoti.license`.
* PIVOT-7653 Aggregation function's `IHistory` no longer implement `IClone`. Users are instead required to implement a `deepCopy()` method instead.
* PIVOT-7762 Renamed `Types#isDictionary(int)` to `Types#isDictionarized(int)`.
* PIVOT-7762 Renamed `IFieldType#supportsEmptyString()` to `IFieldType#supportEmptyString()`.
* PIVOT-7762 Renamed `Types.TypeInformation#canBeEmptyString` to `Types.TypeInformation#supportEmptyString`.
* PIVOT-7762 Renamed `StoreFieldMonitor#getIsDictionary()` to `StoreFieldMonitor#getIsDictionarized()`.
* PIVOT-7857 `com.activeviam.database.api.query.IStreamListViewListener` methods has no more default do
  nothing implementation. User has to choose the default implementation.
* PIVOT-7982 Changed the signatures of several testing methods. They now use `LevelIdentifier` instead of level description.
* PIVOT-7982 Change the signatures of several methods to configure the Mdx context. They now use `DimensionIdentifier`, `HierarchyIdentifier` or `LevelIdentifier` instead of unique names.
* PIVOT-7983 `EpochFormatter` is now internal and is the default epoch level formatter for `IEpochDimensionDescription`.
* PIVOT-7983 `IReferenceDescription.getFieldsMapping()` has been renamed `IReferenceDescription.getFieldMappings()`.
* PIVOT-8024 The column type `TIMESTAMPTZ` in Redshift is discovered as `StandardTypes.TIMESTAMP` instead of `StandardTypes.ZONED_DATE_TIME`.
* PIVOT-8063 The required configuration file *tracing.properties* was removed. The tracing configuration is now pulled from the standard Spring environment. Projects putting properties in this file shall consider migrating them to the standard configuration files like *application.yml* or *application.properties*.
* PIVOT-8167 `new ParquetParserBuilder(datastore)` is now internal. Use `IParquetParser.builder(datastore)` instead.
* PIVOT-8185 Moved static `CopperLevel#at([...])` method to `Copper#levelsAt([...])` and `CopperLevel` class methods `level.at([...]) ` and `level.atValue([...])` to static methods, respectively `Copper#levelAt(level,[...])` and `Copper#levelAtValue(level,[...])`.
* PIVOT-8186 The `ICubeFormatter` contract was modernized to promote `LevelIdentifier` and `HierarchyIdentifier` and remove some ambiguity. `ACubeFormatter` was removed.
* PIVOT-8186 The `Statistics - Queries - total count` MBean attribute has been renamed `Nb of running queries`.
* PIVOT-8186 The constructor for `IDrillthroughExecutor` now only has one parameter: `IDrillthroughSession`, the `Properties` parameter was removed. It is now in `IDrillthroughSession.getProperties()`.
* PIVOT-8189 The `activeviam.mdx.result.aggresiveAxisPositionLimitCheck` property is now replaced with `MdxContext.setAggressiveAxisPositionLimitCheck` and is enabled by default.
* PIVOT-8192 `IPluginValue#key()` now returns a `String` instead of an `Object`.
* PIVOT-8199 `ICatalog` is no longer a `QuartetType`.
* PIVOT-8244 Merged `IReadableDatastore` in `IDatastore`.
* PIVOT-8245 Replaced `ITransactionalWriter.getMetadata()` and `IStoreMessageChannelFactory.getSchemaMetadata()` that returned an `IDatastoreSchemaMetadata` by respectively `ITransactionalWriter.getSchemaDescription()` and `IStoreMessageChannelFactory.getSchemaDescription()` that return an `IDatastoreSchemaDescription`.
* PIVOT-8246 `JungSchemaPrinter` has been moved to its own maven module `datastore-schema-printer` in the package `com.activeviam.database.datastore.schemaprinter.api`.
* PIVOT-8283 Queries on a horizontally distributed cluster will now be distributed up to the first non-distributed post-processor of the operations chain (versus being distributed from the first distributed post-processor of the chain). The old behavior can be obtained by using the `DISTRIBUTION_BEHAVIOR_OVERRIDE_PROPERTY` property (see the [migration notes](migration_notes#queries-1))
* PIVOT-8284 `IDataStreamer.registerListStreamView` uses now `RegistrationOptions` to wrap the options of the registration.
* PIVOT-8285 `QFSRegistry`, `QfsRegistryCreator` and `IRegistryCreator` have been renamed and are now internal. See [migration notes](migration_notes#registry)
* PIVOT-8304 The `CubeTesterBuilderExtension` is now `TesterBuilderExtension`. See [the migration notes](./migration_notes) to properly register the new extension.
* PIVOT-8333 Changed naming convention: `ExternalDatastoreRetrieval` is now called `DatabaseRetrieval`. This change prevents any confusion between database retrievals that access an external database, through the DirectQuery feature, and retrievals that are associated with Copper joins, and were previously called `External`.
* PIVOT-8333 Changed ActivePivot REST API version from `8` to `9x1` due to breaking changes.
* PIVOT-8377 `ISelectionDescriptionBuilder.withField(String name)` has been de-deprecated. However, the name argument must now be a field name only, and not a field expression.
* PIVOT-8396 `JDBCColumnParser` has been renamed `JdbcDefaultColumnCalculator`.
* PIVOT-8404 Migrated AWS cloud source to AWS Java SDK v2. In practice, that implies relying on `software.amazon.awssdk` instead of `com.amazonaws`.
* PIVOT-8404 Cloud sources: The generics parameters in the API interface have been modified (`ICloudEntity`, `ICloudEntityPath`, `ICloudDirectory`, ...) in order to be less tied to the cloud vendor sdk implementation.
* PIVOT-8472 `Condition#relative` is renamed to `Condition#unknown`, the behavior stays the same.
* PIVOT-8514 `[Measures].[Measures]` has been renamed `Measures` in all CSV export files.
* PIVOT-8590 In cube builder fluent API, method `.withFilter(...)` was renamed to `.withFactFilter(...)`.
* PIVOT-8621 The signature of `INumaNodeSelectorFactory.create` has been changed.
* PIVOT-8647 The value of the `STREAM_MEASURE_PROPERTY` property name in `NeighborValuePostProcessor` and `ATimeLinePostProcessor` has been changed to `IPostProcessor.UNDERLYING_MEASURES` property name for consistency value.
* PIVOT-8656 `IReferenceDescription#getFieldMappings()` now returns a `Set<FieldMapping>`.
* PIVOT-8656 The constructors of `DatastoreSchemaDescription` now require a List of `IStoreDescription` instead of a Collection.
* PIVOT-8658 `ICursorConverter` can now be applied on a cursor by calling `ICursorConverter.convertCursor()`
* PIVOT-8663 Methods of `QfsWebUtils` have been migrated to `com.activeviam.web.core.api.IUrlBuilder`.
* PIVOT-8663 Constructor of `JwtAuthenticationProvider` has been replaced by a builder available using `JwtAuthenticationProvider#builder()`.
* PIVOT-8663 Constructor of `JwtService` has been replaced by a builder available using `JwtService#builder()`.
* PIVOT-8664 `com.qfs.server.cfg.content.IActivePivotContentServiceConfig` does not defined anymore the bean `contentService` from its `ActivePivotContentService`. It must be defined manually beforehand.
* PIVOT-8739 Renamed `QuartetExtendedPlugin`, `QuartetExtendedPluginValue`, `QuartetPlugin`, `QuartetPluginValue` and `QuartetType` into `AtotiExtendedPlugin`, `AtotiExtendedPluginValue`, `AtotiPlugin`, `AtotiPluginValue` and `AtotiType`.
* PIVOT-8777 `AAnalysisHierarchyV2` has been renamed `AAnalysisHierarchy`.
* PIVOT-8797 Renamed all JDBC source related classes from JDBC to Jdbc (e.g. `IJDBCSource` becomes `IJdbcSource`)
* PIVOT-8797 Renamed all CSV source related classes from CSV to Csv (e.g. `ICSVSource` becomes `ICsvSource`)
* PIVOT-8798 Renamed `QfsResultSetRow` to `ResultSetRow`.
* PIVOT-8798 Custom aggregation implementing `IGenericAggregation` no longer need to implement `createChunkFactory`.
  The chunk creation is now automatically handled by Atoti.
  The `createChunkFactory` method has been replaced by the simpler method `AggregationChunksSetting getChunksSetting()`.
  See the custom aggregation documentation for more details on this.
* PIVOT-8809 `IIterableAggregatesRetrievalResult.transferValues` now takes a `IWritableRecord` instead of `Record` or `Object[]`.
* PIVOT-8830 `Registry.getRegistry()` and `Registry.setContributionProvider()` methods have been moved to an internal class. `Registry#initialize` is now the single point of entry to the registry.
* PIVOT-8860 `AStoreStream` now returns records in plain (undictionarized) format. The `resultFormat` field now holds plain (undictionarized) `IRecordFormat` of the query result.
* PIVOT-8914 Static constants defined in `IDistributedMessenger` are now available in `com.activeviam.activepivot.core.intf.api.description.IMessengerDefinition`.
* PIVOT-8918 `IFieldType` no more holds information about dictionarization.
* PIVOT-8918 Renamed `IFieldType.getDataType()` to `IFieldType.getUndictionarizedDataType()`.
* PIVOT-8918 Renamed `FieldType.ofAny(Object)` to `FieldType.ofObject(Object)`.
* PIVOT-8950 Implemented conditional logging of property sources, ensuring logs are generated only at the debug level. Make sure to update logging configurations in analysis or monitoring systems accordingly.
* PIVOT-9027 Changed API of `LocationUtil` to include `expandRangeLevels(ILocation, List)` and `partialExpand(ILocation, List, List)` methods, allowing to expand range locations on some or on all range levels.
* PIVOT-9130 Stopped throwing an exception when an Mdx calculated member references an unknown member. This is intended to allow defining calculated members before loading the data.
* PIVOT-9137 Changed `IDuplicateKeyHandler.selectDuplicateKeyInDatastore(IRecordReader, IRecordReader, IStoreMetadata, IDictionaryProvider, int[], int)`, `IDuplicateKeyHandler.selectDuplicateKeyWithinTransaction(IRecordReader, IRecordReader, IStoreMetadata, IDictionaryProvider, int[], int)` and `IStoreDescriptionBuilder.IRemoveUnknownKeyListener.onRemoveUnknownKey(int[], IStoreMetadata, IDictionaryProvider, int[], int)` signatures to `IDuplicateKeyHandler.selectDuplicateKeyInDatastore(IRecordReader, IRecordReader, IKeyEventContext)`, `IDuplicateKeyHandler.selectDuplicateKeyWithinTransaction(IRecordReader, IRecordReader, IKeyEventContext)` and `IStoreDescriptionBuilder.IRemoveUnknownKeyListener.onRemoveUnknownKey(int[], IKeyEventContext)`.
  An `IKeyEventContext` provides equivalent information about the corresponding key event context.
* PIVOT-9140 Change constructor `com.activeviam.activepivot.server.json.api.query.JsonMdxQueryPlan` to accept strings as time limit, as defined in its field.
* PIVOT-9210 The `IDatabaseSchemaEntityResolver` interface has been removed and merged into the `IDatabaseSchema`.
  There are no longer database entity resolvers, use the schema instead.
* PIVOT-9231 Moved `ILevel.BRANCH_LEVEL_NAME` and `ILevel.EPOCH_LEVEL_NAME` into `IHierarchy`.
* PIVOT-9231 Methods that received or returned `ILevel` objects now receive or return `ILevelInfo` objects.
* PIVOT-9293 `ModifiedLocation` is now a private class. Modifying a location should only be performed using `LocationUtil#createModifiedLocation`.
* PIVOT-9345 Removed the necessary injection of components in the Registry to have a working Distribution layer. This is now performed automatically by the starter `com.activeviam.springboot:atoti-server-starter`.
* PIVOT-9409 Replaced `IDatabaseSchema.findTable(String)` by `IDatabaseSchema.hasTable(String)` to check whether a table exists.
  Use `IDatabaseSchema.getTable(String)` to retrieve the table.
* PIVOT-9410 `IDatabaseSchema.getTables()` and `IDatabaseSchema.getTableNames()` now return respectively a `Collection<? extends IDataTable>` and a `Collection<String>` instead of a `Map<String, ? extends IDataTable>` and a `Set<String>`.
  `IDatastoreSchemaDescription.getTables()` and `IDatastoreSchemaDescription.getTableNames()` return respectively a `List<? extends IStoreDescription>` and a `List<String>` where the order corresponds to the physical order inside the datastore.
* PIVOT-9422 Removed intermediate buffer when writing a XMLA response. This reduces transient memory usage and potential OOM errors for large responses. Consequently, the property `ActiveViamProperty.MAX_XMLA_BUFFER_SIZE_PROPERTY` becomes obsolete and is removed.
* PIVOT-9446 The interface `IPostProcessorConstants` has been changed to the class `PostProcessorConstants`.
* PIVOT-9490 `IEpoch` no longer implements `IClone`. Users are instead required to call/implement a `deepCopy()` method instead.
* PIVOT-9493 `IRecordReader` no longer implements `IClone`.
* PIVOT-9495 `IPair` and `Pair` no longer implement `IClone`.
* PIVOT-9497 `IComparatorDescription` and `IComparatorOrderDescription` no longer implements `IClone`. Users are instead required to call/implement a `deepCopy()` method instead.
* PIVOT-9498 `IProperty` no longer implements `IClone`. Use `IProperty#copy()` instead.
* PIVOT-9498 `IMappedTuple` no longer implements `IClone`. Use `IProperty#shallowCopy()` instead.
* PIVOT-9500 DirectQuery now only supports Databricks Runtime version 15.4 (the latest LTS).
* PIVOT-9517 Renamed `ExtendedContentType` into `ContentType`.
* PIVOT-9535 Change the signature of `com.activeviam.activepivot.server.impl.api.database.IConditionFactory` and `com.activeviam.activepivot.server.impl.api.database.IUpdateWhereProcedureFactory` to receive clean public arguments.
* PIVOT-9538 Renamed all Spring Boot starters to have the groupId set to `com.activeviam.springboot`. `atoti-starter` changed to `atoti-server-starter`. `starter-ui` changed to `atoti-ui-starter`. `starter-apm` changed to `atoti-server-apm-starter`. `starter-excel-addin` changed to `excel-addin-starter`.
* PIVOT-9541 The Mdx engine will now try to find better companions for calculated members than `contributors.COUNT`. This will improve calculated measure performance on polymorphic cubes. See our public documentation for details.
* PIVOT-9632 `IStreamedViewListenerRegistration#close()` is renamed to `IStreamedViewListenerRegistration#unregister()`, the registration is no more `AutoCloseable` because there is no external resources to close.
* PIVOT-9694 Remove `Serializable` from `com.activeviam.database.datastore.api.transaction.ITransactionManager.IUpdateWhereProcedure` as this was not necessary anymore.
* PIVOT-9736 Data cubes no longer expose their REST API to the query node through `ActiveViamProperties`. These properties have been moved to the `IDataClusterDefinition` and its associated builders.
* PIVOT-9772 `*ArrayJdbcColumnCalculator` are removed and replaced by a static factory `VectorColumnCalculatorFactory` which now supports both the Native JDBC source and the Array JDBC source.
* PIVOT-9829 The constant `GLOBAL_PROVIDER_NAME` has been moved to `IAggregateProviderDefinition`. `IPartialProviderDefinition.DEFAULT_NAME` has been removed, and the default partial provider name is now its plugin key.
* PIVOT-9858 Changed `getCellsCount` of `ICellTester` to count only the non-empty cells.
* PIVOT-9843 IAxisRanges no longer implement IClone and now has a deepCopy method. IRangeProperty also has a new deepCopy method.
* PIVOT-9903 Key-value source: renamed `IKeyValueBufferPool` to `IByteBufferPool` and `KeyValueBufferPool` to `DirectByteBufferPool`.
* PIVOT-9910 Some methods have been moved from `com.activeviam.database.datastore.internal.impl.SchemaPrinter` to `com.activeviam.database.api.DatabasePrinter`, and renamed with `table` instead of `store`. The printed types are slightly different.
* PIVOT-9964 The memory statistics for swapped vectors have been corrected, and the reported memory is set to 0 instead of the vector capacity.
* PIVOT-10093 Creating a default message handler `IMessageHandler<IFileInfo<Path>>` if no bean with this type
  have been created. The default message handler will only log the progress of load operations.
* PIVOT-10135 Moved `StorePartitionTransaction.BATCH_SIZE_PROPERTY` to `IStoreDescription.BATCH_SIZE_PROPERTY`.

### Deprecated

* PIVOT-7762 Deprecated `Types#TYPE_OBJECT_NOT_NULLABLE`, use `Types#TYPE_OBJECT_NON_NULLABLE` instead.
* PIVOT-7762 Deprecated `Types#TYPE_DIC`, use `Types#TYPE_OBJECT_DIC` instead.
* PIVOT-7762 Deprecated `Types#TYPE_DIC_NULLABLE`, use `Types#TYPE_OBJECT_DIC_NULLABLE` instead.
* PIVOT-8408 `AAdvancedPostProcessor.OUTPUT_TYPE` has been deprecated. Use `IPostProcessor.OUTPUT_TYPE_PROPERTY` instead.
* PIVOT-8656 Deprecated `getDataType()`, `isNullable()`, `supportEmptyString()`, `getDefault()`, `getContentClass()` in `IFieldDescription`, use `IFieldDescription#getType()` instead.
* PIVOT-8656 Deprecated `IReferenceDescription#getOwnerStore()` and `IReferenceDescription#getTargetStore()`, use `IReferenceDescription#getSourceTableName()` and `IReferenceDescription#getTargetTableName()` instead.
* PIVOT-8656 Deprecated both constructors in `ReferenceDescription`, use the new constructors with the `Set<FieldMapping>` argument instead.
* PIVOT-8656 Deprecated `IStoreDescription#getKeyFields()`, use `IStoreDescription#getKeyFieldNames()` instead.
* PIVOT-8656 Deprecated `SimpleStoreDescriptionBuilder#keyFields()`, use `SimpleStoreDescriptionBuilder#keyFieldNames()` instead.
* PIVOT-8656 Deprecated `IDatastoreSchemaDescription#getStoreDescriptions()`, use `IDatastoreSchemaDescription#getTables()` instead.
* PIVOT-8656 Deprecated `IDatastoreSchemaDescription#getReferenceDescriptions()`, use `IDatastoreSchemaDescription#getJoins()` instead.
* PIVOT-8657 Properties in `IAggregateProviderBase` and `IAggregateProviderHolderBase` are deprecated in favor of their counterparts in `IAggregateProviderDefinition`, which is the public interface.
  Aggregate Provider fluent builder's javadoc now points to `IAggregateProviderDefinition`, which has been heavily documented.
* PIVOT-8591 Deprecated use of `"hashN(fieldName)"` to describe a modulo N partitioning on a field in `ICanPartition.withPartitioning(String)`.
  Use `"moduloN(fieldName)"` instead.
* PIVOT-8918 Deprecated `IFieldType.getUndictionarizedDataType()`, you should not use type representation as integer anymore.
* PIVOT-9004 Utilities methods in `ICloudEntity` and `ICloudEntityPath` to modify content on the cloud storage are deprecated. Atoti Server is solely responsible for downloading from the cloud storage.
* PIVOT-10179 Deprecate `com.activeviam.tech.core.api.tracking.Tracing` in favor of implementations in each project. This class only offers helper methods relevant inside Atoti Server, rooted on a Tracer configured with information bound to Atoti Server.

### Removed

* PIVOT-6010 Removed IPointLocationReader.getMapping(). It can be retrieved from the ActivePivot object.
* PIVOT-7155 Removed deprecated method `IDatastore.getMemoryStatisticForStore(int)`.
* PIVOT-7332 DirectQuery: remove deprecated method `IRefreshable.refreshAsync()`.
* PIVOT-7466 `CSVSource` is now private. Use `CsvSourceFactory.create()` and other static factory methods to build instances. You must also migrate to the type `ICSVSource` instead of the implementation type.
* PIVOT-7769 Removed the experimental `CopperPostProcessor.executeInDataCube()` method.
* PIVOT-7769 Removed the `IDistributedPostProcessor#EXECUTE_IN_DATA_CUBE_PROPERTY` and `IClusterDefinition#EXECUTE_IN_DATA_CUBE_PROPERTY` properties.
* PIVOT-7983 Removed deprecated method `IFieldDescription.canBeEmptyString()`, use `IFieldDescription.supportEmptyString()` instead.
* PIVOT-7983 Removed `DatastoreSchemaDescriptionUtil`.
* PIVOT-7983 Removed `JDBCMessageChannelFactory.NO_ENTRY_VALUE`.
* PIVOT-7983 Removed deprecated method `IDatastoreSchemaTransactionInformation.getLockedStores()`, use `IDatastoreSchemaTransactionInformation.getLockedStoreIds()` instead.
* PIVOT-7983 Removed deprecated interface `IDatastoreSchemaTransaction`, use `IDatastoreSchemaTransactionInformation` and `IDatastoreSchemaTransactionManager` instead.
* PIVOT-7983 Removed deprecated method `ITransactionManager.getDatastoreQueryRunner()`, use `ITransactionManager.getQueryRunner()` instead.
* PIVOT-7983 Removed `DatastoreQueryHelper.getAllFields(...)`, use `DatabaseEntityResolverUtil.getAllReachableFields(...)` instead.
* PIVOT-7983 Removed deprecated methods `StoreUtils.getSize(...)`, use `IStatisticsQueryRunner.computeTableSize(String)` instead.
* PIVOT-7983 Removed deprecated method `IReadableDatastore.getBranches()`, use `IDatabase.getHeads().keySet()` instead.
* PIVOT-7983 Removed deprecated method `IDatastoreVersion.execute(IQuery)`, use `IDatabaseVersion.getQueryRunner().listQuery(ListQuery).run()` instead.
* PIVOT-7984 `activeviam.directquery.spring.enableLegacyInitialization` property and `AActivePivotWithDirectQueryConfig.apManagerInitPrerequisitePluginInjections()` method are removed. You can use `AActivePivotWithDirectQueryConfig.performRegistryInjection()` to regroup your plugin injection in your config.
* PIVOT-7984 Removed deprecated method in DirectQuery `Database.getSchema()`. Use `Database.getUserSchema()` instead.
* PIVOT-7985 Deprecated methods `withFields(List<FieldPath>)` to build database list queries have been removed, use `withFieldsWithoutAlias(List<FieldPath>)` instead.
* PIVOT-7985 Class `TableJoin` is no longer public; use the interface `ITableJoin` instead.
* PIVOT-7985 Deprecated methods `createSession` with a single argument to build a DirectQuery session have been removed, use `createSession` with 2 arguments instead.
* PIVOT-7985 Deprecated constructors for `GetByKeyQuery` have been removed, use the builder `GetByKeyQuery.builder()` instead.
* PIVOT-7985 Removed deprecated method `ISelection#getFieldExpressions()`; use `ISelection#getFieldsByAlias()` instead.
* PIVOT-7986 DirectQuery: removed `ActiveViamProperty.DIRECTQUERY_AUTO_ADAPTIVE_JIT`, as adaptive JIT and JIT have been merged.
* PIVOT-7986 DirectQuery: Configuration parameters for DirectQuery that were passed via `ActiveViamProperty` have been removed of the associated POJO (`BigqueryDirectQuerySettings`, `ClickhouseDirectQuerySettings`, `DatabricksDirectQuerySettings`, `MsSqlDirectQuerySettings`, `RedshiftDirectQuerySettings`, `SnowflakeDirectQuerySettings`, `SynapseDirectQuerySettings`):
  * `ActiveViamProperty.EXTERNAL_DATABASE_QUERY_TIMEOUT_LIMIT`
  * `ActiveViamProperty.ENABLE_DIRECTQUERY_AUTOVECTORIZER`
  * `ActiveViamProperty.DIRECTQUERY_AUTOVECTORIZER_DELIMITER`
  * `ActiveViamProperty.DIRECTQUERY_AUTOVECTORIZER_THRESHOLD`
  * `ActiveViamProperty.DIRECT_QUERY_SUB_QUERY_LIMIT`
  * `ActiveViamProperty.DIRECT_QUERY_GET_BY_KEY_BEHAVIOR`
  * `ActiveViamProperty.SNOWFLAKE_MAX_RESULTSET_SIZE`
* PIVOT-7987 Removed deprecated method `IStopWatch.printTimings(...)`, use `IStopWatch.appendTimings(StringBuilder)` instead.
* PIVOT-7987 Removed `CustomComparator.type`, use `CustomComparator.PLUGIN_TYPE` instead.
* PIVOT-7987 Removed deprecated classes for aggregations `AGenericBaseAggregationFunction`, `AGenericAggregationFunction`, `AGenericVectorAggregationFunction` and `AVectorAggregationFunction`.
  Implementers must now write their aggregation functions using the standard unique API.
  [The Aggregation Function documentation](../cube/aggregation_functions) provides an up-to-date guide for writing an aggregation function.
* PIVOT-7987 Removed deprecated constants `QFSPools.ACTIVEVIAM_THREAD_PREFIX` and `QfsConcurrency.ACTIVEVIAM_THREAD_PREFIX`. Use `NamedThreadFactory.ACTIVEVIAM_THREAD_PREFIX` instead.
* PIVOT-7987 Removed deprecated `IAggregateStore.getMeasureColumnIndex`, use `IAggregateStore.getColumnIndex` instead.
* PIVOT-7987 Removed deprecated constructor of `AggregateStore` taking an array of measures, use the one with a list instead.
* PIVOT-7987 Removed deprecated method `VectorsAllocationSettings.create(int vectorBlockSize, int componentType)`. Use `VectorsAllocationSettings.create(int vectorBlockSize, ExtendedContentType type)` instead.
* PIVOT-8012 Removed ActiveMonitor's direct dependency to `org.apache.velocity.tools:velocity-tools-generic`. It is now a testing dependency. See [the migration notes](./migration_notes) to customize message templating in ActiveMonitor.
* PIVOT-8027 DirectQuery: Static method `com.activeviam.directquery.YOUR_DATABASE.api.Session#registerUdaf()` has been removed in favor of `com.activeviam.directquery.YOUR_DATABASE.api.Session#registerSqlUdaf()`.
* PIVOT-8086 Deprecated constructor `Selection(String, String...)` has been removed, use `Selection(String, List)` instead.
* PIVOT-8086 Deprecated constructor `RecordQuery(String, ICondition, String...)` has been removed, use `RecordQuery(String, ICondition, List)` instead.
* PIVOT-8125 Removed deprecated method `IActivePivot#getAggregateProvider`, which was often used to retrieve a `IHierarchicalMapping`. The mapping is directly available from the `IActivePivot` interface.
* PIVOT-8125 Removed deprecated method `ICanHaveComparator#withComparatorOrder`, which was redundant. Specific comparator behaviors are still available through `withFirst/LastObjects`.
* PIVOT-8137 Removed deprecated methods `IDatastoreSchema#getPartitioningDescription(String)` and `IDatastoreSchema#getNumaSelectorDescription(String)`.
* PIVOT-8169 Removed deprecated classes `AJDBCSource`, `ArrayJDBCSource`, `MapJDBCSource`, `NativeJDBCSource`, use `IJDBCSource.builder()` instead.
* PIVOT-8183 Removed deprecated methods involving unknown level resolution:
  * `Copper.member(String)`
  * `Copper.hierarchy(String)`
  * `Copper.level(String)`
  * `Copper.newHierarchy(...).fromValues(...).withMembers(String, String)`
  * `Copper.newHierarchy(...).fromStore(...).withLevel(String)`
  * `Copper.newHierarchy(...).fromStore(...).withLevel(String, String)`
  * `Window.orderBy(String)`
* PIVOT-8184 Removed the deprecated method returning the distributing fields in `IMultiVersionDistributedActivePivot`. Use `IMultiVersionDistributedActivePivot.getDistributedApplicationInformation()` instead.
* PIVOT-8185 Removed the deprecated `runXXX(IMultiVersionActivePivot)` methods in `ActivePivotQueryRunner`.
  These methods allowed users to run queries against an instance of `IMultiVersionActivePivot`. It is now required for users to select the version the query should run against.
* PIVOT-8186 Removed various deprecated and unused methods from `com.activeviam.activepivot.core.impl.api.cube.hierarchy.HierarchiesUtil`.
* PIVOT-8186 Promoted a different signature for deprecated `JoinMeasureDescription#setMapping`. It is expected that join measures are mostly created through the Copper API.
* PIVOT-8189 Removed deprecated method `ICursor.rewind()`.
* PIVOT-8192 `IPluginValue#getPlugin` and `IPluginValue#setPlugin` were removed.
* PIVOT-8244 Removed `IReadableDatastore.getHead()`, use `IDatastore.getMasterHead()` instead.
* PIVOT-8244 Removed `IReadableDatastore.getVersion(String, long)`, use `IDatastore.getVersion(long)` instead.
* PIVOT-8280 Removed deprecated interface `IDatastoreSchemaDescriptionPostProcessor` and all its implementations.
  Use `DatastoreSchemaDescriptionUtil` static methods instead to apply transformations to your `IDatastoreSchemaDescription`.
* PIVOT-8347 Removed `JoinType` in `SqlJoin`, replaced by `RelationshipOptionality`.
* PIVOT-8407 Remove the useless module `com.activeviam.tech:serialization-java`, only offering the standard Java process for serializing data in a method. The parent module `com.activeviam.tech:serialization` has also been removed, the need for a parent being very limited.
* PIVOT-8445 Removed the tracing rest service `activeviam/tracing/rest/v3` from the Atoti Server.
* PIVOT-8496 Removed `PeriodicActivePivotSchemaRebuilder` and `ScheduledActivePivotSchemaRebuilder`, use `IActivePivotManager.rebuild(Strings... pivotIds)` instead.
* PIVOT-8624 The method `IDataTableField.getTableName` has been removed.
* PIVOT-8663 `AJwtAuthenticationProvider` and `ASignedJwtAuthenticationProvider` have been removed.
* PIVOT-8663 `com.qfs.security.impl.DetachedFilterConfig` was removed, as it does not serve any use-case.
* PIVOT-8656 Removed `StartBuilding#selection(IDatastoreSchemaDescription)`. Use `StartBuilding#selection(IDatabaseSchema)` instead.
* PIVOT-8664 Implementations of `IContentService` are not public anymore. They must be created through the builders of `com.activeviam.tech.contentserver.storage.api.IContentService#builder()`. See [this section in the migration notes](./migration_notes#content-service) for more information.
* PIVOT-8664 The constructor for `RemoteContentService` is now internal and is replaced by the builder `com.activeviam.tech.contentserver.spring.api.RemoteContentServiceBuilder`.
* PIVOT-8664 The constructor for `ContentServiceSnapshotter` is now internal and is replaced by the static factory method `com.activeviam.tech.contentserver.storage.api.ContentServiceSnapshotter.create`.
* PIVOT-8777 The old `AAnalysisHierarchy` has been removed. `AAnalysisHierarchyV2` has been renamed `AAnalysisHierarchy`.
* PIVOT-8918 Removed `FieldType.dictionarize(IFieldType)`.
* PIVOT-8918 Removed `FieldType.nullableBoolean()`, `FieldType.nullableInt()`, `FieldType.nullableLong()`, `FieldType.nullableFloat()`, `FieldType.nullableDouble()`, `FieldType.nullableString()`, `FieldType.nullableAny()`.
  Use `StandardTypes.NULLABLE_BOOLEAN`, `StandardTypes.NULLABLE_BOOLEAN`, `StandardTypes.NULLABLE_INTEGER`, `StandardTypes.NULLABLE_FLOAT`, `StandardTypes.NULLABLE_DOUBLE`, `StandardTypes.NULLABLE_STRING`, `StandardTypes.NULLABLE_OBJECT` instead.
* PIVOT-8918 Removed `FieldType.of(int, Class<?>, Object)`, `FieldType.nullable(int, Class<?>)`, `FieldType.unsafeType(int, Class<?>, Object)`, `FieldType.getEquivalentFieldType(int)`, `FieldType.getEquivalentFieldType(int, Object)` and `FieldType.getEquivalentFieldType(int, Class<?>, Object)`.
  Use `FieldType.builder()` or `FieldType.from(IFieldType)` instead.
* PIVOT-8927 The class `com.qfs.spring.websocket.impl.ContextValueWebSocketHandler` has been removed without alternative. This class was internally used to apply context values for some special services and is not needed anymore.
* PIVOT-8927 The bean `ActivePivotWebSocketServicesConfig#contextValueWebSocketHandler()` has been removed. It was used internally to apply some security and is not needed anymore.
* PIVOT-9037 The methods to build an Active Pivot Content Service in `ActivePivotContentServiceBuilder` have been removed, in favor of `#with`.  Use `IContentService#builder()` to build the provided content service. See  [this section in the migration notes](./migration_notes#content-service)
* PIVOT-9074 Methods in `IHierarchicalMapping` that deal with things else than hierarchies and locations have been removed.
* PIVOT-9140 The class `ActivePivotWithDatastoreConfig` has been removed. See [this migration note](./migration_notes#defining-the-application) to find how to create it in your project.
* PIVOT-9140 The class `JwtUtil` has been removed.
* PIVOT-9140 The classes `FullAccessBranchPermissionsManagerConfig` and `ContentServiceBranchPermissionsManager` have been removed. Use the `ContentServiceBranchPermissionsManagerBuilder` instead to create a `IBranchPermissionsManager` backed by a Content Service. This will allow to directly implement the config `com.activeviam.activepivot.server.spring.api.config.IActivePivotBranchPermissionsManagerConfig`. See [this section in the migration notes](./migration_notes#distribution) for more information.
* PIVOT-9217 Internal methods were removed from `IMultiVersionActivePivot`, `IMultiVersionDistributedActivePivot` and `IMultiVersionDataActivePivot`.
* PIVOT-9218 Removed `IAggregateProviderDefinition.getNumaNodeSelectorPlugin()`.
* PIVOT-9222 Methods taking the store id in the datastore transaction API have been removed, use the methods taking the store name instead.
* PIVOT-9385 Removed `IDatastoreSchemaDescription.getStore(String)`, use `IDatastoreSchemaDescription.getTable(String)` instead.
* PIVOT-9475 Classes `AStoredMeasureHandler`, `StoredMeasureHandler` and `StoredPrimitiveMeasureHandler` have been renamed and are now internal. The plugin key `StoredMeasureHandler.PLUGIN_TYPE` is available in `IAggregatesContinuousHandler.BASIC_HANDLER_PLUGIN_KEY`.
* PIVOT-9478 `MultiAnalysisHierarchyMeasureHandler` is now internal. Its plugin key is available in `IAggregatesContinuousHandler` as `MULTI_ANALYSIS_HIERARCHY_MEASURE_HANDLER`.
* PIVOT-9519 Remove `MdxCube.NO_FAIL_WHEN_MEMBER_AMBIGUITY`.
* PIVOT-9665 Remove the support of Consul for the discovery of the ActivePivot servers.
* PIVOT-9665 Remove Elasticsearch as storage for historical queries data.
* PIVOT-9829 Removed `PartialProviderDefinition.NO_DIMENSION_DEFINED`.
* PIVOT-10040 Removed `IIterableAggregatesRetrievalResult.transferValues(int rowId, int[] measureIds, Object[] measureValues)`. Use `IIterableAggregatesRetrievalResult.transferValues(int rowId, int[] measureIds, IWritableRecord record)` instead, created with `IIterableAggregatesRetrievalResult#createRecordFormat(...).newRecord()`.
* PIVOT-10093 Removing the property `activeviam.apm.feed.loading.message.handler.type`
* PIVOT-10093 Removed `DataLoadingRestServiceController`
* PIVOT-10114 Deprecated methods from `IActivePivotContentService` for storing and retrieving context values have been removed with alternatives.<br />
  The related method `#withContentValues` in `ActivePivotContentServiceBuilder` has also been removed.<br />
  The related constant `ActivePivotContentService#DIRECTORY_CONTEXT_VALUES` has also been removed and this directory is not created anymore in the Content Service.

### Fixed

* PIVOT-7540 Fixed issue with nullable chunks and the `fill` method (some elements could stay null instead changed to the value passed to `fill`).
* PIVOT-9804 Fixed `importSubtree` method in class `IContentService`. It was causing an issue when importing bookmarks from the UI.
* PIVOT-9035 Do not throw when the update of an MDX stream is cancelled by the user.
* PIVOT-9051 Fixed an issue where query cube hierarchy dictionary content was inconsistent with the cluster view after a remote transaction.
* PIVOT-9177 Fixed error propagation from data cube to query cube when aggregates cache is enabled.
* PIVOT-9204 DirectQuery: Validation of aggregate tables takes the CubeFilter into consideration.
* PIVOT-9301 Context value `drillthrough.maxrows` is now taken into account in distributed: the merged result cannot exceed `maxrows` rows.
* PIVOT-9317 Failing `HelloMessage` no more leaves the cube in invalid state causing cube discovery failures.
* PIVOT-9320 Performance improvement for Mdx queries relying on a lot of calculated measures.
* PIVOT-9392 Fixed a JSON serialization issue impacting the large results cellsets.
* PIVOT-9590 DirectQuery: When using clustering fields, the preliminary distinct query uses the aggregate table instead of the base table whenever possible.
* PIVOT-9607 Fixed revertToVersion issue where last partitions were not reverted.
* PIVOT-9648 Fixed the error handling and failure propagation when distributed messages fail to be created and/or broadcast.
* PIVOT-9712 Speed up Mdx queries having calculated members with NULL as expression.
* PIVOT-9780 Fixed resizing error in `AggregatesStoreBindingCompiler` that could occur in cases of high concurrency in that class.
* PIVOT-9786 Fixed bug in DrilldownMember that could cause a stack overflow when performing a recursive drilldown.
* PIVOT-9808 Fixed an issue where a transaction listener failure could cause the other listeners to not be called which leaves the application in an unrecoverable state.
* PIVOT-9874 Fixed the ALinkedVersionHistory#getHeads method when there is no branch yet.
* PIVOT-9911 Fix the `DrillDownMember` function. The drilldown can now be performed on a member that is directly followed by a descendant that is not one of its children.
* PIVOT-9912 Fix unknown measure error with Copper switch measure.
* PIVOT-9927 Fixed an issue where checks on result expansion were too slow when the expansion hierarchy was heavily filtered.
* PIVOT-9951 Improve reports to `IMessageHandler` when an error occurs in the JDBC source.
* PIVOT-9980 The `toString` implementation of `IGetAggregateQuery` objects can be truncated to avoid Out of Memory Errors. Extremely large query objects can be generated when using the MDX `CrossJoin` function.
* PIVOT-10013 The bucketing hierarchies should handle all measures as nullable.
* PIVOT-10030 `ATimeLinePostProcessor#compute` has been fixed to properly iterate over the lines that have values for the associated streaming measure. It could, in some cases, also iterate over values of `Contributors.COUNT`.
* PIVOT-10033 The default value of the property `DEFAULT_BLOCK_SIZE_PROPERTY` (`activeviam.vectors.defaultBlockSize`) no longer depends on `DEFAULT_CHUNK_SIZE_PROPERTY`. Both of these properties now default to a value between 16K and 64K depending on the JVM memory size.

### Security

* PIVOT-9513 Upgraded `com.amazonaws:aws-sdk-redshift`, `com.amazonaws:aws-sdk-s3`, `com.amazonaws:aws-sdk-kms` and `com.amazonaws:aws-sdk-core` to version `1.12.638` to fix CVE-2024-21634.
* PIVOT-9513 Upgraded `org.springframework:spring-web` to version `6.1.6` to fix CVE-2024-22262.
