Migrate to 5.10
Datastore
Primaryindexes are now calledUniqueindexes (All the rows in an index of this type must be unique).TransactionManagerUtil.resetBranchwas moved inITransactionManager.- Rename
ARemoveUnknowKeyListenertoARemoveUnknownKeyListenerto fix typo. - Move
NumaSelectorFromStoreDescriptionfromcom.qfs.desctocom.qfs.desc.implpackage. - Move
ADefaultEpochPolicyfromcom.qfs.multiversiontocom.qfs.multiversion.implpackage. - Rename
ImmutableRecordListtoImmutableRecordBlockto match the naming pattern used by sibling classes.
ActivePivot
- Change the hierarchy builder:
hierarchyBuilder.factless().withStoreName(...)was replaced byhierarchyBuilder.fromStore(...). It cannot be called afterfactless()nornotFactless(). - Rename
MultiVersionAxisHierarchy.FIELD_NAME_PROPERTYtoMultiVersionAxisHierarchy.FIELD_EXPRESSION_PROPERTY.
Copper
- All published Copper measure must now be named. Expressions like
Copper.sum("pnl").publish(context)have to be replaced withCopper.sum("pnl").withName("pnl.SUM").publish(context). Copper.newSingleLevelHierarchy(...).from(CopperStoreField)was replaced byCopper.newHierarchy(...).fromField(CopperStoreField).Copper.newSingleLevelHierarchy(...).from(CopperLevelValues)was replaced byCopper.newHierarchy(...).fromValues(CopperLevelValues).
Distribution
- The
JGroupsMessengerhas been removed. Now, ActivePivot relies on two messenger types, theLocalMessengerand theNettyMessenger. Note that theNettyMessengerstill uses JGroups for member discovery and group membership. More details on this topic in Distributed Messenger - The property
NotificationMember#AWAIT_NOTIFICATIONShas been renamed toIDataClusterDefinition#AWAIT_NOTIFICATIONS_TIME.
Functional Interfaces
The functional interfaces in packagecom.qfs.func have been moved and renamed.
| Old location | New location |
|---|---|
com.qfs.func.IBiIntPredicate | com.activeviam.util.function.BiIntPredicate |
com.qfs.func.IFloatUnaryOperator | com.activeviam.util.function.FloatUnaryOperator |
com.qfs.func.IntBiFunction | com.activeviam.util.function.IntBiFunction |
com.qfs.func.ITriFunction | com.activeviam.util.function.TriFunction |
com.quartetfs.fwk.util.FloatBinaryOperator | com.activeviam.util.function.FloatBinaryOperator |
com.qfs.func.IEither | com.activeviam.util.function.IEither |
com.qfs.func.IOptionalEither | com.activeviam.util.function.IOptionalEither |
com.qfs.func.impl.Either | com.activeviam.util.function.impl.Either |
com.qfs.func.impl.OptionalEither | com.activeviam.util.function.impl.OptionalEither |
Query Results Context Value
The default behavior forQueriesResultLimit context value have changed from QueriesResultLimit#withoutLimit() to QueriesResultLimit#defaultLimit()
(the default transient and intermediate result limit amount to 100,000 and 1,000,000 point locations respectively). The default limits may appear low for certain projects,
in this case the configuration can be easily overridden. This is explained in the respective documentation section.
ActiveViam Properties
activeviam.datastore.query.maxLookupsOnPrimarywas renamedactiveviam.datastore.query.maxLookupsOnUnique.ActiveViamProperty.MAX_LOOKUPS_ON_PRIMARY_INDEXwas renamedActiveViamProperty.MAX_LOOKUPS_ON_UNIQUE_INDEX.
Spring Configuration Changes
The ActivePivot Configuration does not automatically contain theContextValueFilter bean anymore,
thus preventing conflicts with Spring Boot.
Azure Cloud Source migration
The Azure Cloud Source has migrated its dependency to the Azure Blob Storage SDK from v8 to v12.A migration guide from v8 to v12 can be found on the Azure SDK repository.
Renamed Classes
All classes of the Azure Cloud Source have been changed to include the wordAzure
as a prefix. As a result, the following classes had their name changed:
| 5.9 | 5.10 |
|---|---|
CloudBlobPath | AzureBlobPath |
BlockBlobPath | AzureBlockBlobPath |
AppendBlobPath | AzureAppendBlobPath |
PageBlobPath | AzurePageBlobPath |
Changed Classes
- The handling of client-side encryption has undergone some major changes to better match the new architecture of the Azure Blob Storage SDK. Changes about this are detailed in the below section.
-
IAzureCloudDirectory:- Now extends
ICloudDirectory<BlobClientBase>instead ofICloudDirectory<CloudBlob>. getTBlob(String)return types were updated with the new types from the Azure SDK.
- Now extends
-
Removed
IAzureEntityPath.upload(InputStream, long, BlobRequestOptions). Prefer usinggetUnderlying()to get a reference to the underlying blob client and use blob-specific configuration for uploads. -
Uploading with an unknown length is not supported anymore for page blobs, and will throw
an
UnsupportedOperationExceptionif attempted. -
Records#getGlobalDefaultValuedirectly uses the content type value passed as anintinstead ofILiteralType.
Client-side Encryption
In the Azure Blob Storage SDK, client-side encryption is now implemented in the package com.azure:azure-storage-blob-cryptography. With the SDK upgrade, client-side encryption cannot be configured at the Azure service client level anymore. It needs to be specified on a per-blob basis, before uploading or downloading content. As a result, two new classes have been introduced to handle client-side encryption:AzureEncryptedCloudDirectory: a variant ofAzureCloudDirectorythat additionally holds encryption keys for client-side encryption, and that can produceAzureEncryptedBlobPaths to existing and non-existing encrypted blobs.AzureEncryptedBlobPath: a path to an encrypted blob; essentially a wrapper around anEncryptedBlobClient.
The other classesThey accept three additional arguments in their constructor compared to their non-encrypted counterparts:AzureBlobPath,AzureBlockBlobPath,AzureAppendBlobPath,AzurePageBlobPathandAzureCloudDirectoryare all unaware of client-side encryption. They will not encrypt uploaded data and will not decrypt downloaded data.
- a key-wrapping algorithm (
String) - a key encryption key (
com.azure.core.cryptography.AsyncKeyEncryptionKey) - a key encryption key resolver (
com.azure.core.cryptography.AsyncKeyEncryptionKeyResolver)
null:
| operations | required |
|---|---|
| download | key encryption key resolver |
| upload | key-wrapping algorithm, key encryption key |
| download and upload | all arguments |
KeyWrapAlgorithm
from com.azure:azure-security-keyvault-keys
(the dependency is not included in the Azure Cloud Source).
Some snippets of AsyncKeyEncryptionKey creation from a local key or from an
Azure Key Vault can be found in the
readme of com.azure:azure-storage-blob-cryptography.
Important: the new implementation of client-side encryption in Azure Blob
Storage SDK v12 only permits uploads to client-side-encrypted block blobs.
The creation of client-side-encrypted blobs of other types (append and page)
is not supported anymore.
Downloads of client-side encrypted page and append blobs that were already created
through other means is still possible through the AzureEncryptedBlobPath.