Migrate to 5.9
Java 8 is no longer supported. ActivePivot 5.9 is compatible with Java 11.
ActivePivot
New Copper API
Shipped as an experimental feature in ActivePivot 5.8.3, the new Copper API is officially replacing the one released with ActivePivot 5.7.0, which is now abandoned.
Shift measure creation
The Copper shift measure creation methods have changed : CopperMeasure#at([...])
methods have been changed to a unified CopperMeasure#shift(CopperLevelsAt...)
method.
Find more information in our user guide for updated examples.
Parent Value
The method Copper.parentValue(measure, hierarchy)
has been changed to measure.parentValueOn(hierarchy)
.
Setting the designated type of measure
To improve clarity, the method CopperMeasure#cast([...])
has been renamed to CopperMeasure#withType([...])
.
Level and hierarchy representation
LevelCoordinate
has been renamed and is now LevelIdentifier
.
HierarchyCoordinate
has been renamed and is now HierarchyIdentifier
.
Test jar
The Copper test utils that were previously packaged in a test-jar
have been moved to their own module:
<groupId>com.activeviam.activepivot</groupId>
<artifactId>activepivot-copper-test</artifactId>
Spring Configuration Changes
Schema configuration
ActivePivotConfig
now requires an IActivePivotManagerDescriptionConfig
.
IDatastoreDescriptionConfig
was merged into IActivePivotManagerDescriptionConfig
and
IParameterAwareDatastoreDescriptionConfig
was renamed IParameterAwareActivePivotManagerDescriptionConfig
.
In IActivePivotManagerDescriptionConfig
you must now implement userManagerDescription()
(respectively named userSchemaDescription()
) instead of managerDescription()
(respectively schemaDescription()
).
The way the description post-processors are applied has been changed. You are impacted if you explicitly build the Datastore or
the ActivePivotManager in your project instead of using DatastoreConfig
and ActivePivotConfig
.
In this case, define an IActivePivotManagerDescriptionConfig
and give the results of the managerDescription()
and schemaDescription()
default methods to the builders.
IActivePivotConfig.activePivotManagerDescription()
was removed and replaced by IActivePivotManagerDescriptionConfig.managerDescription()
.
CORS configuration
The CORS configuration now relies on Spring standards. Instead of our own ICorsFilterConfig
that created a
SpringCorsFilter
, we moved to Spring CorsConfigurationSource
. As internal components require a knowledge of the
CORS configuration before we can define the actual CorsConfigurationSource, a new interface ICorsConfig
has been introduced, detailing the information of a standard CORS configuration. This is used in internal services to create REST and WS
services compatible with the configuration. This is used in the sandbox project to create the final CORS configuration.
ICorsConfig
only requires you to define the list of allowed origins. The other methods provide the accepted and exposed headers the authorized methods.
Those have default implementations compatible with the ActivePivot stack.
SpringCorsFilter
has been deleted. Thanks to CorsConfigurationSource
, Spring automatically creates the filter.
Miscellaneous
ActivePivotServicesConfig
removes an internal attribute, creating an unused dependency to IDatastoreConfig
.
If needed, you can restore this dependency by extending the configuration class and restoring the attribute.
I18nConfig
was renamed AI18nConfig
. Many of the static methods have changed to instance methods to allow
easier extensions and refinements.
Aggregation Procedures
Interface
The interface was slightly changed to support more features in Copper (getDatastorePrefetch
and createContext
).
This change should be transparent for procedures extending AAnalysisAggregationProcedure
.
Additional validation checks
To offer support for Aggregation Procedures depending on other Procedures, ActivePivot uses the property
IAnalysisAggregationProcedureDescription#getUnderlyingLevels()
to identify the dependencies between Procedures.
This drives a change to the API, preventing Procedures to define their own handled levels in the list of underlying levels.
This constraint is enforced by the validation procedure of the description. Configurations may need to be updated. Particularly,
in 5.8, you always had to define a handled hierarchy from builders. You can now avoid this with the method
withoutHierarchies()
.
Option to disable the Epoch level
The epoch level of the epoch dimension can now be enabled or disabled.
The epoch dimension is still enabled by default. The epoch level is now disabled by default. To enable it,
use IEpochDimensionDescription.setEpochLevelEnabled(boolean)
or IEpochDimensionBuilder.withEpochLevel
.
The IEpochDimensionBuilder.withBranchesLevel
method was renamed IEpochDimensionBuilder.withBranchLevel
.
The methods in IEpochDimensionDescription
were also renamed from *epochsLevel*
and *branchesLevel*
(e.g. getEpochsLevelComparator
or getBranchesLevelFormatter
) to *epochLevel*
and *branchLevel*
(e.g. getEpochLevelComparator
and getBranchLevelFormatter
).
Distributed Cube no longer supports the epoch level
New default aggregation functions
Aggregation functions that maintain a history state, like AVG, MIN, or MAX are memory intensive. Thus, for the MIN and MAX
aggregation functions, the new default behavior is append-only. This means that disaggregation is not supported for these
two functions. For disaggregation support, please use MIN_HISTORY
and MAX_HISTORY
aggregation functions
(e.g. value.MIN_HISTORY
or value.MAX_HISTORY
).
Default Distributed Message Size Limits
Previous ActivePivot versions had a maximum default distributed message size of 1GB for every message type. This limit has been reduced. The default maximum size is:
- 64MB for
IInitialDiscoveryMessage
messages - 4MB for
ITransactionCommittedMessage
messages - 4MB for
ScopedAggregatesRetrievalResultTransporter
answers wrapped inBroadcastResult
messages - 32MB for
DrillthroughMessageWithHeadersAnswers
answers wrapped inBroadcastResult
messages - 2MB for any other message types
You can still override these values using the property NETTY_MAX_SIZE_PROPERTY
of the ActiveViamProperty
.
In addition to the older configuration method using class names, it is possible to configure the message default size limit using the constants (enum)
defined in NettyStreamUtils#MessageType
as follows:
INITIAL_DISCOVERY_MESSAGE
for initial discovery messagesITRANSACTION_COMMITTED_MESSAGE
for transaction commit messageSCOPEDAGGREGATES_RETRIEVAL_TRANSPORTER
for single Gaq query result messagesDRILLTHROUGH_HEADER
for drillthrough header query result messagesDRILLTHROUGH_MESSAGE_WITH_HEADERS_ANSWER
for drillthrough query result messagesGLOBAL_MESSAGE
for global configuration
For instance, the following statement used in prior versions:
- -Dqfs.distribution.netty.message.maxSize=com.quartetfs.biz.pivot.cellset.impl.ScopedAggregatesRetrievalResultTransporter=42m,com.qfs.messenger.message.IInitialDiscoveryMessage=200m
becomes:
+ -Dactiveviam.distribution.nettyMessageMaxSize=com.quartetfs.biz.pivot.cellset.impl.ScopedAggregatesRetrievalResultTransporter=42m,com.activeviam.messenger.message.IInitialDiscoveryMessage=200m
or
+ -Dactiveviam.distribution.nettyMessageMaxSize=singleGaqResult=42m,initialDiscovery=200m
Miscellaneous
ALocationShiftPostProcessor#handleNoUnderlyingMeasure
is renamed intoALocationShiftPostProcessor#handleNoUnderlyingMeasure
to fix the typo - missing "g".
REST and WS APIs
With the introduction of a new REST call to export query plans and another REST endpoint to forward client traces to a tracing server, the version of ActivePivot REST API has changed from v4 to v5. With the addition of the metadata to the WS updates of the Content Service entries, the WS API has changed from v4 to v5.
As components of the REST and WS API versions remain synchronized, these changes result in the following URL changes:
Before | After |
---|---|
pivot/rest/v4/... | pivot/rest/v5/... |
pivot/ws/v4/... | pivot/ws/v5/... |
content/rest/v4/... | content/rest/v5/... |
content/ws/v4/... | content/ws/v5/... |
Impacted REST services:
- ActivePivot services for queries, context configurations, etc
- Datastore service for queries and updates
- Content Service
- Tracing Service
CSV Source
The CSV Source can now accept incomplete lines (where the number of columns is smaller than the
expected number of attributes of a record). You can set this in CSVParserConfiguration
's full constructor, or through
its setAcceptIncompleteLines(boolean)
. It can finally be set through ParserContext#setAcceptIncompleteLines(boolean)
method. This sets this property on its underlying CSVParserConfiguration
.
You can also sample the input files to work on a small portion of the input files. The sampling policy
is passed as an argument of type ICsvParserConfigPolicy
to the constructor of CSVParserConfiguration
, or using
the method CSVParserConfiguration#setParserPolicy(ICsvParserConfigPolicy)
.
The Core Product ships basic policies to load the first lines of one or more files, or load a limited number of files.
Those are available in ICsvParserConfigPolicy
static methods.
Parquet Source
The Parquet Source benefited from the same sampling policies as the CSV Source. They implement IParquetReaderPolicy
,
that are passed in the constructor of ParquetParser
. Like the CSV Source, basic policies are available in
IParquetReaderPolicy
to load a limited number of lines or files.
Other changes
LogWriteException
is now a runtime exception. This exception is still thrown when an error occurs during the writing of the Transaction Log.- One of the signatures of
ITransactionManager.performInTransaction
was removed.