Skip to main content
For user-facing changes, refer to the Release Notes page.
For details about versioning, see our Versioning Policy.
The 6.2 branch forked the 6.1 branch from version 6.1.20.
See the 6.1 changelog for changes before the fork.
Format based on Keep a Changelog

6.2.0

2026-07-27

Added

  • PIVOT-9550 Pivot REST API: The cube discovery endpoint now exposes the type of the data stored by each level, through a new dataType object carrying the content type (for example INTEGER, DOUBLE or STRING), the Java class of the members, and their nullability. Clients can use it to know whether a level is numeric without inspecting its members. The revision of the pivot REST API is now 5.
  • PIVOT-10020 JDBC Source: Added JdbcRowFailureEvent and the onJdbcRecordFailed method on IJdbcSourceHealthEventHandler, so that health event handlers are now notified when an error occurs while processing a JDBC row.
  • PIVOT-12580 Continuous GAQ: The subscribe request now accepts a sort field to order streamed rows by one or more measures or levels (ASC/DESC, nulls last). Ordering applies to initial, full-refresh, and delta-added rows. Delta-removed rows are ordered by level keys.
  • PIVOT-12617 Content service: Added the atoti.server.content-service.prefix property to store all the entries of the auto-configured content service under a prefix. See How to configure a content service.
  • PIVOT-12675 Cube Metadata: Added isSlicing() to IHierarchyInfo, indicating whether the hierarchy is slicing (i.e., does not have an “All” member). Added getDefaultHierarchyInfo() to IDimensionInfo, returning the default hierarchy of the dimension.
  • PIVOT-13152 Content service: Added the atoti.server.content-service.persistence.audit.enabled, atoti.server.content-service.persistence.high-availability.enabled, and atoti.server.content-service.persistence.high-availability.polling-interval properties to create an auditable or a high availability content service from the configuration properties. See How to configure a content service.
  • PIVOT-13649 Monitoring: The ActivePivotQueryStarted and ActivePivotQueryDone health events now expose the query task identifier and a flag telling whether the query is a top-level query. A health event handler can use the task identifier to correlate an event with the Query REST API V10 killQueryById endpoint.
  • PIVOT-13886 REST API: In the query plan retrieval response, a new measuresData field on retrievals exposes the post-processor plugin key for post-processed measures.
  • PIVOT-13912 Continuous Query Engine: Added the disableResultLimitOnUpdates engine property as an opt-in to disable the IQueriesResultLimit check on the CQE shared update path, so continuous-query updates are no longer capped by the result-size limit; initial-view queries still honor the limit. See continuous query engine.
  • PIVOT-14009 Memory Analysis: MemoryAnalysisServiceFactory is now part of the public API. It can be used to instantiate an IMemoryAnalysisService without the Spring Boot Atoti starter.
  • PIVOT-14073 Cube: Added IMember#getLevelIdentifier(), which returns the LevelIdentifier of the level this member belongs to, and IAxisMember#getLevelOrdinal(), which returns the ordinal of that level.
  • PIVOT-14160 Parquet source: IParquetParser now extends AutoCloseable. It can also be built with a MessageHandler to handle parsing lifecycle events: start of parsing, publication of parsed records, and parsing errors.
  • PIVOT-14239 Concurrency: IInterruptor#registerCallbackOnInterruption now returns a Registration, an AutoCloseable whose close() unregisters the callback. A callback registered on a long-lived interruptor can now be removed once its guarded operation completes, instead of lingering until the whole computation ends.

Changed

  • PIVOT-0000 Atoti UI: All Atoti UI artifacts (atoti-ui, atoti-ui-initial-content, atoti-admin-ui) are now versioned by the single atoti-ui.version Maven property, as they are released in lockstep. The admin-ui.version property is removed. Versions are aligned on 5.2.24 (previously atoti-ui.version 5.2.20 and admin-ui.version 5.2.22).
  • PIVOT-10812 Distributed configuration now rejects declaring several distributing levels that belong to the same hierarchy. Such a configuration was previously accepted but redundant, since the nested levels added no extra partitioning.
  • PIVOT-11167 DirectQuery: Condition operands on boolean fields are now type-checked during condition normalization.
  • PIVOT-11413 Datastore: Moved NoTransactionException in public API, from package com.activeviam.database.datastore.internal to com.activeviam.database.datastore.api.transaction.
  • PIVOT-11541 Datastore: Removed the unnecessary throws DatastoreTransactionException declarations from ITransactionalWriter.remove/removeAll, IOpenedTransaction.updateWhere/rollback, and ITransactionManager.rollbackTransaction/stop, which never threw it. As DatastoreTransactionException is a checked exception, remove any catch clause that wrapped only these calls.
  • PIVOT-11619 IAgent does not extend IExtendedPluginValue anymore. If a given agent implementation needs to be an extended plugin value, that agent needs to explicitly declare its dependency to IExtendedPluginValue.
  • PIVOT-12001 Cube: A virtual hierarchy with an OBJECT-typed level and no member name parser now throws a ConfigurationException at cube build time. Previously such a misconfiguration only logged a SEVERE message and let the cube build in a degraded state. Define a member name parser on the level (for example through the level builder’s withMemberNameParserPluginKey) or avoid the OBJECT discriminator to fix it.
  • PIVOT-12850 IIterableAggregatesRetrievalResult now implements IColumnarTable and getColumn(int) returns an IArray.
  • PIVOT-13108 Monitoring: The Streaming Service monitoring previously provided by the apm module is now built into Atoti Server. The per-query report logs are now disabled by default (the APM module previously enabled them by default) and controlled by the atoti.server.query.service.streaming.logging, atoti.server.query.service.streaming.detailed-logging and atoti.server.query.service.streaming.log-memory-stats properties, or at runtime over JMX through StreamingQueriesServiceLogging and StreamingQueriesServiceStatistics MBeans. See the migration notes.
  • PIVOT-13108 Monitoring: The Queries Service monitoring previously provided by the apm module is now built into Atoti Server: query counters and exception logging no longer require the APM module. The per-query report logs are now disabled by default and controlled by the atoti.server.query.service.logging, atoti.server.query.service.detailed-logging and atoti.server.query.service.log-memory-stats properties, or at runtime over JMX. The name=QueriesService,type=Monitoring MBean is replaced by QueriesServiceStatistics (counters) and QueriesServiceLogging (logging toggles). See the migration notes.
  • PIVOT-13108 Monitoring: The JSON Queries Service monitoring previously provided by the apm module is now built into Atoti Server, following the same pattern as the Queries Service. The per-query report logs are disabled by default and controlled by the atoti.server.query.service.json.logging, atoti.server.query.service.json.detailed-logging and atoti.server.query.service.json.log-memory-stats properties, or at runtime over JMX. The name=JsonQueriesService,type=Monitoring MBean is replaced by JsonQueriesServiceStatistics (counters) and JsonQueriesServiceLogging (logging toggles), and the total query counters now correctly include drillthrough queries. See the migration notes.
  • PIVOT-13111 Monitoring: The query performance evaluator (adaptive slow-query detection) previously provided by the apm module has been removed; its role is now covered by OpenTelemetry traces and metrics together with the query history module. The default query executor enriches the current trace span with each query’s identity. The activeviam.apm.query.performance.evaluation.* properties and the com.activeviam.apm.query.slow slow-query log category no longer exist. See the migration notes.
  • PIVOT-13111 Monitoring: The apm module has been removed. Its remaining function is now built into Atoti Server (wired by the atoti-server-starter and the observability plugin). The thread-status monitoring is replaced by a passive blocked-thread watchdog that logs a full thread dump — to atoti.server.monitoring.health.blocked-thread (legacy alias com.activeviam.apm.health.blocked-thread) — when blocked threads are detected. The watchdog is now disabled by default; enable it with atoti.server.monitoring.blockedThreadWatchdog.enabled=true and tune its atoti.server.monitoring.blockedThreadWatchdog.scanIntervalMs. The per-state thread-count ThreadStatus MBean and the DirectChunkAllocator MBean (a duplicate of the MemoryAllocator MBean already exposed by the Atoti starter) have been removed, along with the activeviam.apm.enable.all.apmanager.statistics and activeviam.apm.node.starter.jmx.enabled properties. See the migration notes.
  • PIVOT-13111 Spring Boot starter: The atoti-server-apm-starter has been removed. Its auto-configuration is now provided by the main atoti-server-starter. See the migration notes.
  • PIVOT-13111 Logging: The Logback conversion-rule converters have been moved out of the apm module. LogInstanceConverter and LogThreadConverter are now in com.activeviam.tech.logging.logback.api (artifact com.activeviam.tech:logging-logback-utils), and LogUserConverter is now in com.activeviam.tech.logging.logback.spring.api (artifact com.activeviam.tech:logging-logback-spring). Update the fully-qualified class names referenced in your logback.xml/logback-spring.xml <conversionRule> declarations.
  • PIVOT-13113 Monitoring: Renamed the node-instance-name logging property from activeviam.apm.node.instance.name to atoti.server.node.instance.name; its default value also changed from activepivot to atoti. This property sets the node name shown in log lines. See the migration notes.
  • PIVOT-13324 Observability: Atoti JFR events have been renamed to follow Oracle’s JFR naming and labeling guidelines. Event names now share a flat atoti.* namespace (e.g. atoti.CubeCommit instead of atoti.server.cube.CubeCommitEvent), the Event suffix has been dropped, and labels use headline-style capitalization. JFR configuration files referencing the previous names must be updated; see JFR events for the new identifiers.
  • PIVOT-13613 Filtering API: Conditions are no longer extended-plugin values. ILogicalCondition and IMatchingCondition no longer extend IExtendedPluginValue, the getType() method and the plugin-key constants have been removed, the LogicalConditionExtendedPlugin/MatchingConditionExtendedPlugin extended plugins are no longer registered, and the ACondition base class has been removed. See the migration notes.
  • PIVOT-13635 Build: Atoti Server requires Java 25
  • PIVOT-13720 Default cursor batch size raised from 16 to 128, which benchmarking identified as a more performant default. The previous value can be restored at startup via the atoti.server.records.cursor.batchSize system property.
  • PIVOT-13785 Observability: The type of some metric tags has changed from String to a more appropriate type such as boolean, long or List<String>.
  • PIVOT-13804 Continuous GAQ: Continuous GAQ queries no longer require forcing full refreshes through IAggregatesContinuousHandler#FORCE_FULL_REFRESH_ENGINE_PROPERTY. The service now emits incremental delta batches where possible and full-refresh batches otherwise.
  • PIVOT-13836 Cube transaction: Faster updates on bucketing hierarchies when using the new CopperMultipleElements#mapToObject(SerializableFunction, SerializableBiFunction) overload that accepts a database context factory. When a transaction occurs, only the delta is used to update the members of the bucketing hierarchy, instead of recomputing the whole hierarchy. Any database queries performed inside the mapper must use the IDatabaseContext provided by the context factory. Note: This only works on the Datastore thanks to its ability to stream its updates. Otherwise, it will fall back to the previous implementation.
  • PIVOT-13856 Spring Boot starter: The legacy ActivePivot services IAdministrationService and ILicensingService, which mirror the payloads of the removed SOAP web services, are no longer registered as Spring beans by default. Set the atoti.server.service.legacy.enabled property to true to restore them.
  • PIVOT-13948 Datastore: StoreDescription, OptimizationDescription and SimpleStoreDescriptionBuilder.keyFieldNames(...) now accept a Collection<String> instead of a List<String> for key/index field names to enhance the fact that the order is ignored.
  • PIVOT-13949 Upgraded Jackson’s version to 3.1.2.
  • PIVOT-13994 Distribution: Moved IMultiVersionDataActivePivot from package com.activeviam.activepivot.dist.impl.api.cube to com.activeviam.activepivot.dist.datanode.impl.api.cube.
  • PIVOT-14045 The Netty max message size property no longer accepts fully-qualified class names. Only the public message-type keywords are accepted and an unknown key raises a configuration error.
  • PIVOT-14076 Logging: AAdvancedPostProcessor.logger is now private instead of protected; subclasses should use their own logger (e.g. LoggerFactory.getLogger(PivotLoggingConstants.POST_PROCESSOR)). Pivot logger names are now public API in PivotLoggingConstants and moved to the atoti.server.pivot.* namespace; the old atoti.server.active_pivot.* names still work via LoggerSwitcher.
  • PIVOT-14086 DirectQuery: Upgraded Apache Arrow to 19.0.0. The Dremio connector now requires the --sun-misc-unsafe-memory-access=allow JVM flag on JDK 25+. See the migration notes.
  • PIVOT-14102 Experimental OR conditions: Return an empty GetAggregatesQuery result without executing any query when passing a FALSE condition.
  • PIVOT-14102 Experimental OR conditions: Attaching a FALSE condition no longer throws and properly returns an empty result.
  • PIVOT-14102 Query Engine: Return an empty drillthrough result without executing any query when multiple constraints (location, filters, security) fold into a FALSE condition.
  • PIVOT-14109: Spring AI: Bumped org.springframework.ai from 2.0.0-M6 to 2.0.0.
  • PIVOT-14110 DLC: Errors raised while creating a local CSV topic include more information.
  • PIVOT-14159 DirectQuery: All SQL-based connectors (Databricks, MS SQL, Redshift, Snowflake, Synapse, generic JDBC) now consistently route connections through their HikariCP connection pool. Previously some connectors opened a new JDBC connection on every query. The Snowflake, generic JDBC, and Databricks connectors gain two new configuration properties: see Snowflake, Generic JDBC, and Databricks connector documentation.
  • PIVOT-14260 Spring Boot starter: Atoti Server now enables virtual threads for HTTP request handling by default (spring.threads.virtual.enabled=true). Each incoming request gets its own virtual thread instead of borrowing from a fixed-size platform thread pool, preventing health check probes from being starved when the server is under heavy load. The setting can be overridden with spring.threads.virtual.enabled=false via environment variable or system property.
  • PIVOT-14293 Setting a system property for a feature flag that has been removed now logs a WARN message at startup, instead of silently having no effect.
  • PIVOT-14293 DirectQuery: Time-travel emulation is now enabled by default and the Features.EMULATED_TIME_TRAVEL flag has been removed. See Time-Travel Emulation.
  • PIVOT-14293 Cube: The AI-based aggregate provider optimizer is now enabled by default and the Features.AGGREGATE_PROVIDER_OPTIMIZER flag has been removed. See AI-based Optimizer.
  • PIVOT-14293 Distributed: QueryBlockerUtil is now enabled by default and the Features.QUERY_BLOCKER flag has been removed. See Distributed Data Roll Over.
  • PIVOT-14293 DirectQuery: The DirectQuery local cache is now enabled by default and the Features.DIRECTQUERY_LOCAL_CACHE flag has been removed. See Create and use a DirectQuery local cache.
  • PIVOT-14293 Cube: The dynamic aggregate provider is now enabled by default and the Features.DYNAMIC_AGGREGATE_PROVIDER flag has been removed. See Dynamic Aggregate Provider.
  • PIVOT-14302 Security: The JwtAuthenticationProvider bean is no longer @Primary. Injections of the bare AuthenticationProvider type no longer silently resolve to the JWT provider when several AuthenticationProvider beans exist: they resolve by parameter name, or fail at startup with NoUniqueBeanDefinitionException. See the migration notes.
  • PIVOT-14320 UI starter: Setting the legacy atoti.atoti-ui property prefix now logs a warning pointing to its replacement atoti.server.ui. The legacy prefix still works but is deprecated and scheduled for removal in 6.3.0.
  • PIVOT-14375 Cube: SubCubeProperties#clone() now returns SubCubeProperties instead of ISubCubeProperties.
  • PYTHON-908 Cube: The "NaturalOrder" comparator now truly sorts using natural order, comparing embedded digit sequences numerically instead of character by character, so "file1" < "file2" < "file10". Use "LexicographicalOrder" to keep the previous character-by-character behavior ("file1" < "file10" < "file2"). Levels with no explicit comparator default to "LexicographicalOrder", so this default behavior is unaffected. See the migration notes.

Deprecated

  • PIVOT-13676 IActivePivotContentServiceConfig is deprecated and scheduled for removal in 6.3.0. Inject IActivePivotContentService directly as a Spring bean instead of implementing this configuration interface.
  • PIVOT-13676 IActivePivotManagerDescriptionConfig is deprecated and scheduled for removal in 6.3.0. Declare IActivePivotManagerDescription (and optionally IEpochManagementPolicy) as @Bean methods in your own @Configuration class directly, without implementing this interface.
  • PIVOT-13676 IDatastoreConfig is deprecated and scheduled for removal in 6.3.0. Declare IDatastore as a @Bean method in your own @Configuration class directly, without implementing this interface.
  • PIVOT-13676 IRoleContextConfig is deprecated and scheduled for removal in 6.3.0. Declare IEntitlementsProvider as a @Bean method in your own @Configuration class directly, without implementing this interface.
  • PIVOT-13676 IDatastoreSchemaDescriptionConfig is deprecated and scheduled for removal in 6.3.0. Declare IDatastoreSchemaDescription as a @Bean method in your own @Configuration class directly, without implementing this interface.
  • PIVOT-13676 IParameterAwareDatastoreSchemaDescriptionConfig is deprecated and scheduled for removal in 6.3.0. Declare IDatastoreSchemaDescription and IParameterStoreConfiguration as @Bean methods in your own @Configuration class directly, without implementing this interface.
  • PIVOT-13856 Spring Boot starter: The legacy ActivePivot services IAdministrationService and ILicensingService are deprecated and planned for removal.
  • PIVOT-13886 REST API: In the query plan retrieval response, the measures field on retrievals is deprecated. Use measuresData instead.
  • PIVOT-14073 Cube: IMember#getHierarchyInfo() and IMember#getLevelInfo() are deprecated since 6.2.0 and planned for removal in 6.3.0. Use IMember#getLevelIdentifier() as a lighter replacement; for a single attribute, prefer IAxisMember#getLevelOrdinal() over getLevelInfo().getOrdinal(). See the migration notes.

Removed

  • PIVOT-7426 Datastore: Removed the deprecated IDatastoreSchemaDescription#getStoreDescriptions() and IDatastoreSchemaDescription#getReferenceDescriptions(). Use getTables() and getJoins() respectively.
  • PIVOT-7426 Datastore: Removed the deprecated IReferenceDescription#getOwnerStore() and IReferenceDescription#getTargetStore(). Use getSourceTableName() and getTargetTableName() respectively.
  • PIVOT-7426 Datastore: Removed the deprecated IStoreDescription#getKeyFields(). Use getKeyFieldNames() instead.
  • PIVOT-7426 Datastore: Removed the deprecated ReferenceDescription constructors taking field mappings as a List<? extends IPair<String, String>>. Use the constructor taking a Set<ITableJoin.FieldMapping> instead.
  • PIVOT-7426 Datastore: Removed the deprecated StoreDescription(String, Collection<String>, List<? extends IFieldDescription>) constructor. Use StoreDescription.builder() or StoreDescription.simpleBuilder() instead.
  • PIVOT-7426 Query: Removed the deprecated QueryExecution(Boolean) constructor. Use QueryExecution.builder() instead.
  • PIVOT-7426 Post-processors: Removed the deprecated AAdvancedPostProcessor.OUTPUT_TYPE constant. Use IPostProcessor.OUTPUT_TYPE_PROPERTY instead.
  • PIVOT-7426 Post-processors: Removed the deprecated protected AAdvancedPostProcessor.getLevel(String) method. Use HierarchiesUtil.getLevel(getActivePivot(), levelDescription) instead.
  • PIVOT-7426 Post-processors: Removed the deprecated protected AAdvancedPostProcessor.getHierarchy(String) method. Use HierarchiesUtil.getHierarchy(getActivePivot(), hierarchyDescription) instead.
  • PIVOT-10061 Parsers: Removed the deprecated integer and integer[] parser type keys (including sized and delimited variants). Use the equivalent int and int[] keys instead; the parsing behavior is unchanged.
  • PIVOT-10152 CSV Source: Removed the deprecated ICsvParserConfigPolicy interface (along with LineAndFileLimitCsvParserPolicy and NoRestrictionCsvParserConfigPolicy) and the getParserPolicy()/setParserPolicy() methods on CsvParserConfiguration. The line-limit, file-limit, and step-sampling functionality they provided has been removed with no replacement.
  • PIVOT-10152 Parquet Source: Removed the deprecated IParquetReaderPolicy interface and the IParquetParserBuilder.withPolicy(IParquetReaderPolicy) builder method. The line-limit, file-limit, and step-sampling functionality they provided has been removed with no replacement.
  • PIVOT-10152 Parquet Source: Removed getPublishedRecordCount() and getSkippedRecordCount() from IParquetParsingInfo. Use getRecordCount() instead of getPublishedRecordCount(); getSkippedRecordCount() always returned 0 and has no replacement.
  • PIVOT-10231 Direct Query Snowflake: Removed the deprecated SnowflakeDialectSettings#arrayAggWrapperFunctionName setting and the ARRAY_AGG_WRAPPER_FUNCTION_NAME connection option used to wrap ARRAY_AGG operations with a custom UDF. The built-in Snowflake SQL function is now faster, so the wrapper is no longer needed.
  • PIVOT-10724 Removed the deprecated ADirectQueryApplicationConfig#directQueryDatabase(), use ADirectQueryApplicationConfig#database() instead.
  • PIVOT-10885 Distribution: Removed the deprecated String-based distributing level APIs. IApplicationDescriptionBuilderWithId#withDistributingFields(String...), IDistributedApplicationDefinition#getDistributingFields(), and the QueryClusterDefinition.DistributedApplicationDefinition(String, List<String>) constructor have been removed; use withDistributingLevels(LevelIdentifier...), getDistributingLevels(), and QueryClusterDefinition.DistributedApplicationDefinition(String, List<LevelIdentifier>) instead. IApplicationDescriptionBuilderWithId#withoutDistributingFields() has been renamed to withoutDistributingLevels(), and QueryClusterDefinition.DistributedApplicationDefinitionV2 has been renamed to QueryClusterDefinition.DistributedApplicationDefinition.
  • PIVOT-12150 Removed the rangeSharing aggregate provider property (IAggregateProviderDefinition.RANGE_SHARING). Range sharing is still available through the IQueryExecution context value.
  • PIVOT-12455 Versioning: Removed IVersionLifecycleHandler from the public API.
  • PIVOT-13035 Removed the deprecated SnowflakeProperties.SnowflakePropertiesBuilder#additionalOption(SFSessionProperty, String), use SnowflakeProperties.SnowflakePropertiesBuilder#additionalOption(String, String) instead.
  • PIVOT-13113 Monitoring: Removed the APM startup configuration dump (ExtraLoggingConfig), which logged all resolved Spring environment properties and the classpath on the com.activeviam.apm.spring logger, along with its activeviam.apm.config.hide.properties.pattern property. Use Spring Boot’s Actuator env/configprops endpoints or the --debug startup flag instead.
  • PIVOT-13523 The JMX attributes and operations of the datastore TransactionManager (getLatestTransactionTime, getAvgTransactionTime, getNumberTransactions, getAddedOrUpdatedRecords, getRemovedRecords, addSpeed, removalSpeed) are no longer exposed. Use the metrics sent to the observability backend via OpenTelemetry instead.
  • PIVOT-13524 Removed the deprecated ICsvSourceConfiguration interface. Use CsvSourceConfiguration directly.
  • PIVOT-13525 Removed ICsvParserConfiguration, IFileParserConfiguration and FileParserConfiguration. Use CsvParserConfiguration directly.
  • PIVOT-13526 DataTable has been removed. Use StoreDescription for a datastore table or a TableDescription for a DirectQuery table.
  • PIVOT-13529 Removed the deprecated IParquetReaderFactory#create(InputFile, ReadSupport, org.apache.hadoop.conf.Configuration) overload. Use the overload taking a ParquetConfiguration instead; wrap an existing Hadoop Configuration with new HadoopParquetConfiguration(...).
  • PIVOT-13532 Distribution: Removed the deprecated concealed measures feature. The withConcealedMeasures builder methods, IDataClusterDefinition#getConcealedMeasures/setConcealedMeasures, and the now-redundant withAllMeasures builder step have been removed. Concealing hierarchies and branches is still supported.
  • PIVOT-13785 Removed IQuery#collectAdditionalSpanAttributes(BiConsumer<String, String>) and its implementations.
  • PIVOT-13811 Records: Removed the deprecated IRecordFormat#dictionarize and IRecordFormat#undictionarize static methods from the public API. They were intended only for internal use and have no public replacement.
  • PIVOT-13913 Direct Query Databricks: Removed the deprecated feature of UDAF for vector aggregation.
  • PIVOT-14016 Snowflake: Avoid a lag bug from the Snowflake platform triggered by interaction between incremental refresh and time travel. Remove the old workaround SnowflakeDatabaseSettings.lastAlteredMargin.
  • PIVOT-14017 Removed the deprecated StartBuilding.Builder#withEpochManager(IEpochManager) method. Use StartBuilding.Builder#withEpochPolicy(IEpochManagementPolicy) instead.
  • PIVOT-14019 Removed the deprecated PersistedBuilder#lockOptions(boolean) method, which was public by mistake. Use PersistedBuilder#databaseLocks(LockOptions) instead.
  • PIVOT-14020 Removed the unusable IMessengerDefinition.AGENTS and IMessengerDefinition.SEPARATOR constants. All IDistributedAgent implementations are internal API, so the constants had no supported use.
  • PIVOT-14025 Removed the deprecated duplicate APIs in the io.atoti.runtime.api.measures and io.atoti.server.common.api.plugins packages. Use their com.activeviam.atoti.application.api.measures and com.activeviam.atoti.server.common.api.plugins counterparts.
  • PIVOT-14026 Removed the public method ICanBuildCommonCubeDescription#withQueryExecutor(), which let configurations declare a custom query executor. The query executor is no longer user-replaceable. Use the ActivePivotQueryStarted and ActivePivotQueryDone health events to monitor queries.
  • PIVOT-14028 Distribution: Removed the deprecated IMultiVersionDistributedActivePivot#unloadMembersFromDataNode method, along with its internal UnloadMemberMessage, the IMessengerDefinition#UNLOAD_MEMBERS_MESSAGE_TIMEOUT property and the related distribution.unload_members_from_data_node.* metrics. Use IMultiVersionDataActivePivot#maskMembers and IMultiVersionDataActivePivot#unmaskMembers instead.
  • PIVOT-14035 Removed the deprecated 4-argument constructor of ActivePivotTransactionCommittedEvent. Use the 6-argument constructor instead, passing -1, -1 for the start and commit timings when they are unknown.
  • PIVOT-14038 Removed the deprecated IFieldDescription accessors isNullable(), supportEmptyString(), getDefault() and getContentClass(). Use getType() with the corresponding IFieldType methods (isNullable(), supportEmptyString(), getDefaultValue(), getDataClass()) instead.
  • PIVOT-14039 Removed the deprecated BITMAP_PLUGIN_TYPE, JIT_PLUGIN_TYPE and LEAF_PLUGIN_TYPE constants from IBuildableAggregateProviderDescriptionBuilder. Use the equivalents on IAggregateProviderDefinition.
  • PIVOT-14040 Removed IMultiVersionDistributedActivePivot#getDistributedApplicationInformation(). Use getApplicationNames() to list the distributed application names.
  • PIVOT-14041 Cube Filter: Removed CubeFilter.getSubCubeFromContext(IContext) (deprecated since 6.1; use CubeFilter.getSecurityAndFilter(IContext) instead) and CubeFilter.intersectWithSecurity(ICubeFilter, IContext) (deprecated since 6.1; no public replacement).
  • PIVOT-14044 Removed the deprecated IGenericAggregationFunction.SUM_PRODUCT_FUNCTION_PLUGIN_KEY constant. Use IMultiSourceAggregationFunction.SUM_PRODUCT_FUNCTION_PLUGIN_KEY instead.
  • PIVOT-14054 Query API: Removed the deprecated constructors of GetAggregatesQuery and DrillthroughQuery. Use their respective builders instead.
  • PIVOT-14054 CSV Source: Removed the deprecated constructors of CsvParserConfiguration and CsvSourceConfiguration. Use CsvParserConfiguration.builder() and CsvSourceConfiguration.builder() instead.
  • PIVOT-14096 Removed the empty Maven module com.activeviam.springboot:atoti-runtime-starter, kept as an alias since it was renamed in 6.1. Use com.activeviam.springboot:atoti-server-application-starter instead.
  • PIVOT-14097 Removed the empty Maven module com.activeviam.activepivot:activepivot-ext. Import com.activeviam.activepivot:activepivot-core and optionally com.activeviam.activepivot:activepivot-dist-impl instead.
  • PIVOT-14102 Experimental OR conditions: Removed interfaces ISecurityCubeRestriction and IQueryBasedCubeRestriction: directly use their respective implementations.
  • PIVOT-14306 Database: Removed the deprecated IDatabaseSchema#getDatabaseId() method.
  • PIVOT-14307 Datastore: Removed the deprecated SimpleStoreDescriptionBuilder#keyFields(List<String>) and keyFields(String...) methods. Use keyFieldNames(...) instead.
  • PIVOT-14315 Aggregation: Removed the deprecated IHistory#getContent() method. Use read() or the readXxx() accessors instead.
  • PIVOT-14324 MVCC: Removed the deprecated IEpochManager#IDENTIFIER constant, which was only used internally.
  • PIVOT-14325 Vectors: EmptyVector is now final and no longer implements Cloneable (its deprecated clone() method is removed); its EMPTY_VECTORS map and componentType field are no longer public. Use EmptyVector#emptyVector(int) to obtain an instance and getComponentType() to read the component type.
  • PIVOT-14345 Types: Removed the deprecated Types.TYPE_OBJECT_NOT_NULLABLE, Types.TYPE_DIC and Types.TYPE_DIC_NULLABLE constants. Use Types.TYPE_OBJECT_NON_NULLABLE, Types.TYPE_OBJECT_DIC and Types.TYPE_OBJECT_DIC_NULLABLE instead.
  • PIVOT-14347 REST: Removed the deprecated version() element of the @AtotiRestController annotation. Use versions() instead.
  • PIVOT-14373 Partitioning: Removed the deprecated legacy hash partitioning function name. Use modulo instead: a partitioning expression such as hash2(id) must now be written modulo2(id).
  • PIVOT-14374 Properties: Removed deprecated ActiveViamProperty constants:
    • THROW_ON_MISSING_DATA_NODE_REPONSE (misspelled) — use THROW_ON_MISSING_DATA_NODE_RESPONSE instead. Both mapped to the same activeviam.distribution.query.throwOnMissingResponse key, so JVM configuration is unaffected.
    • CSV_PARSING_REPORT_MAX_ANOMALIES — set the maximum number of reported parsing anomalies through CsvSourceConfiguration.builder().maxParsingAnomalies(int) instead.
    • LARGE_MDX_SET_OPTIMIZATION — control the large-MDX-set optimization through the IQueryExecution context value (QueryExecution.builder().largeMdxSetOptimizationEnabled(true)) instead. When unset, the optimization is disabled.
    • ENABLE_MMAP_TRACKING_PROPERTY — native-memory allocation and release JFR events are now always emitted, so the activeviam.mmap.tracking opt-in is no longer needed. Capture them with a JFR recording.
  • PIVOT-14374 Distribution: Removed the activeviam.distribution.cube.throwOnDifferentMeasureNames property. All data cubes within the same application must now expose the same measure names.
  • PIVOT-14375 Cube: Removed the deprecated SubCubeProperties#getSubCubeTree(String dimension, String hierarchy) method.
  • PIVOT-14377 Content service: Removed the deprecated 2-argument ActivePivotContentServiceBuilder…needInitialization(String calculatedMemberRole, String kpiRole). Use the 3-argument overload needInitialization(String calculatedMemberRole, String kpiRole, String namedSetRole), passing the role allowed to create named sets as the third argument.
  • PIVOT-14379 Cube: Removed the deprecated IAxisHierarchyVersion from the public API. Use IAxisHierarchy instead.
  • PIVOT-14380 Vectors: Removed the deprecated ZeroVector from the public API. Use SameValueVectorUtils instead, e.g. SameValueVectorUtils#doubleVector(10, 0.0).

Fixed

  • PIVOT-9136 Content Server: Fixed a race condition on websocket unregistration that lead to the error java.lang.IllegalStateException: The WebSocket session [id] has been closed and no method (apart from close()) may be called on a closed session
  • PIVOT-9136 Content Server: Closing a remote content listener no longer logs a spurious BadArgumentException caused by trying to unregister it again after its WebSocket session has already been closed.
  • PIVOT-11585 Content Server: Fixed a startup race in high-availability deployments where two instances initializing concurrently against a fresh shared database could both attempt to create the root directory, causing one of them to fail to start with IllegalStateException: Entry at path / already exists.
  • PIVOT-13743 Cube: Reduce the creation of transient HierarchyIdentifier objects.
  • PIVOT-13947 Continuous GAQ REST API: Stopping a publisher now cancels all the continuous queries it owns.
  • PIVOT-13986 MDX: Non-empty cross-join evaluation now periodically checks for interruption, attempting to exit early from a big cross-join when the query has been stopped (cancellation or timeout).
  • PIVOT-14012 DirectQuery: Primary-key discovery is now skipped for views, which have no primary key. This avoids discovery failures with JDBC drivers that reject the primary-key metadata query on a view instead of returning no rows.
  • PIVOT-14112 Cube: Fixed the leaf and bitmap aggregate providers returning incorrect results when SubCubeProperties.grantMembers uses custom ICondition as path elements on a multi-level hierarchy.
  • PIVOT-14123 Continuous GAQ: Full-refresh Arrow streams no longer expose measures the query did not request.
  • PIVOT-14140 Database: ICursor#toTuples() and ICursor#toRecords() no longer append all-null padding rows when materializing a cursor that returns fewer rows than the batch size for a batch (for instance, when a filter has to be evaluated on records joined across several stores). The materialized result now honors the row count returned by transfer.
  • PIVOT-14154 Database cache: Feeding the cache no longer holds the cached table’s transaction lock during the external-database read, so a slow or stalled feed no longer blocks other queries on the same table or leaves it locked indefinitely. Canceling a query that triggered a feed now aborts the in-flight external read, and a query waiting on another query’s feed stops waiting when canceled. A canceled or failed feed no longer prevents a later query from feeding the same partition. If the cancellation arrives while the rows are being written to the cache, that feed still completes, so the partition may stay cached even though the query was canceled; this is intended, as the cached data is valid and benefits later queries.
  • PIVOT-14183 Datastore: A continuous selection whose condition filters on a field reached through a reference now receives the same initial view regardless of when the listener subscribes. Previously, subscribing to an already-populated datastore could drop rows whose reference did not resolve, instead of keeping them with the referenced field’s default value.
  • PIVOT-14185 Datastore: A transaction whose commitTransaction() or rollbackTransaction() throws (for example on a duplicate key) no longer leaves a lock held. Previously this leaked lock caused subsequent schema updates to hang indefinitely.
  • PIVOT-14226 Distribution: Releasing a concealed branch on a data node no longer throws IllegalStateException.
  • PIVOT-14264 Database: ICursor#toTuples() and ICursor#toRecords() no longer throw UnsupportedOperationException on DirectQuery result cursors or on aggregate and distinct query result cursors.
  • PIVOT-14277 REST API: Endpoints reading a raw @RequestBody String from an application/json request (such as the Content Server POST/PUT /files) no longer fail with HTTP 400, this issue was introduced by the Spring Boot 4 upgrade.
  • PIVOT-14282 MDX: Continuous queries that use the Except function in a subselect no longer trigger a full recomputation of the query on every update.
  • PIVOT-14299 Datastore: Fixed a transaction performance regression introduced in 6.1.14. The partitions of a transaction were published sequentially on a single thread, which could significantly slow down data loads with many store partitions.
  • PIVOT-14301 DirectQuery Databricks: Connection string OAuth parameters are now correctly forwarded to the Databricks driver.
  • PIVOT-14313 Cube: Fixed a JIT deoptimization storm that could significantly slow down queries when a subcube filter combines several accepted values with OR on the same hierarchy level. The condition is now collapsed into an equivalent IN condition instead of falling back to a full member enumeration.
  • PIVOT-14334 DirectQuery: JDBC connection pools no longer eagerly open connections up to maximumPoolSize. Connections are now opened on demand: minimumIdle defaults to 0, and the value is still overridable through the HikariCP configuration file.
  • PIVOT-14371 Experimental OR conditions: A query slicing the Epoch hierarchy on a single branch inside a crossjoin no longer fails with “OR filter on Epoch”.
  • PIVOT-14382 Packaging: The activepivot-ext-<version>-sources.zip file published to Artifactory now contains the example post-processor sources it is meant to hold. It had previously been published empty.
  • PYTHON-913 CSV Source: LoggingCsvHealthEventHandler now accepts a custom ITagAcceptor via a new constructor, consistent with the Parquet and JDBC equivalents.
  • PYTHON-923 Monitoring: Setting a health log tag to OFF in the activeviam.health.log specification no longer throws a NullPointerException. The OFF rule now correctly silences its tags, and an exact OFF tag takes precedence over a less restrictive matching wildcard.
  • PYTHON-942 Parquet source: Fixed an UnsupportedOperationException when loading a Parquet source containing more than 1024 records per file. The internal block list was immutable and could not be recycled once a full block had been flushed.

Security

  • PIVOT-13914: Upgraded to Spring Boot 4.1.0.
  • PIVOT-13980 Security: Removed the activeviam.jwt.* application properties, deprecated since 6.1. Use the atoti.jwt.* equivalents instead. The expiration property is a Duration. The available formats are described in Spring’s documentation. For this property, a unitless integer will represent Seconds.
  • PIVOT-14285 Security: Excluded org.apache.hadoop:hadoop-yarn-client (transitive of org.apache.hadoop:hadoop-mapreduce-client-core) to fix the JLine Telnet server advisories GHSA-2r2c-cx56-8933 and GHSA-47qp-hqvx-6r3f. The YARN client is only needed to submit MapReduce jobs to a YARN cluster, which Atoti never does.
  • PIVOT-14395 Security: Pinned org.apache.tomcat.embed to 11.0.24 (ahead of Spring Boot 4.1.0) to fix CVE-2026-55276, CVE-2026-53434 and CVE-2026-53404.
  • PIVOT-14395 Security: Pinned io.netty to 4.2.16.Final (ahead of Spring Boot 4.1.0) to fix CVE-2026-44891.
  • PIVOT-14395 Security: Pinned org.apache.httpcomponents.core5:httpcore5 and org.apache.httpcomponents.core5:httpcore5-h2 to 5.4.3 (ahead of Spring Boot 4.1.0) to fix CVE-2026-54399 and CVE-2026-54428.
  • PIVOT-14395 Security: Pinned io.airlift:aircompressor (transitive of org.apache.parquet:parquet-hadoop) to 2.0.3 to fix CVE-2025-67721.
  • PIVOT-14395 Security: Pinned org.mozilla:rhino (transitive of Activiti) to 1.9.1 to fix CVE-2025-66453.
  • PIVOT-14395 Security: Pinned org.mybatis:mybatis (transitive of Activiti) to 3.5.19 to fix CVE-2020-26945.
  • PIVOT-14395 Security: Excluded com.sun.mail:javax.mail (transitive of Activiti through org.apache.commons:commons-email) to fix CVE-2025-7962, which has no fixed version. ActiveMonitor does not use Activiti’s email service task.