Skip to main content
This guide explains the changes required to migrate to the stated version of the Atoti FRTB.

6.0.9 to 6.0.10

Who needs to act

Find the rows below that describe the deployment, and read the sections they name. A deployment matching none of them needs no action. Every deployment Customized projects only

Number and output changes

Crypto 2b measures removed

Crypto 2b Risk Weight and Crypto 2b are removed, and Portfolio Risk Charge no longer includes the Crypto 2b term. The exposure measures and the data loading pipeline stay, under the StandardisedApproach\Crypto 2b folder, with unchanged names. Remove the sa.crypto.group-2b.risk-weight row from any local copy of FRTBParameters.csv. Crypto 2b Exposure Max returns an empty value instead of 0 when both exposures are empty. The Crypto2bRw post-processor and the FRTBParameters.CRYPTO_2B_RW constant are removed.

Pro-Rata below a reference level on the pro-rata hierarchy

With ReferenceLevel on the pro-rata hierarchy, the allocation proceeds one level at a time. Pro-Rata figures change for that configuration. No action is required. See the release notes.

Optionality flags on exported Curvature and Vega data

The ETL sets Optionality and OriginalOptionality to Y on Curvature and Vega sensitivities, where they took the store default N. Calculations are unchanged. An export of sensitivity data that includes those columns shows Y for those rows, and the Optionality hierarchy is now visible in the SA cube.

Trade attributes RRAO synthesis now opt-in

The ETL no longer reads the deprecated ResidualRisk, ExoticUnderlying, OtherResidualRiskType and RRAOCategory columns of Trade_Attributes.csv. Move that data to RRAO_Trade.csv. To keep the old behavior while migrating, set rrao.use-trade-attributes=true; the property is removed in 6.1.0. A project constructing TradesTuplePublisher(datastore, summary) must use the 3-argument constructor to pass the flag; the 2-argument one passes false.

Fixes that change reported numbers

No action is required for these; see the changelog for each fix.
  • FX Vega is computed with the FX vertex configuration instead of the Equity one; figures change where the two differ.
  • The FX Delta and Curvature risk weight measures report a blank value for the N/A bucket.
  • The SQUARE operation of the SIMPLE_MATH post-processor returns the square instead of its input.
  • Under DirectQuery, a parameter set two or more hops from the root regains the overrides inherited from an intermediate ancestor, as it always did in memory. Bucket, quality or sector can change.
  • The CSR Euler capital allocation no longer shares one bucket-correlation cache across risk classes and parameter sets, so Euler figures can change for a query that spans two parameter sets.

Post-processor partitioning levels

The shipped post-processors forbid the levels below from their partitioning, on a single node as well as across nodes; rows marked unchanged behaved the same at 6.0.9. Distributed deployments validate measure values on query and data nodes after upgrading. For custom post-processors, see Post-processor interface migration.

Configuration and dashboard changes

Snowflake key-pair authentication

The shipped DirectQuery configuration uses key-pair authentication, as Snowflake is deprecating passwords. directquery.database.snowflake.password still binds but should no longer be used.
  1. Generate a PKCS#8 RSA key pair: openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -out rsa_key.p8 -nocrypt, then openssl rsa -in rsa_key.p8 -pubout -out rsa_key.pub.
  2. Register the public key on the Snowflake user: ALTER USER <user> SET RSA_PUBLIC_KEY='<key without header, footer and line breaks>'.
  3. Set SNOWFLAKE_PRIVATE_KEY_BASE64 to base64 < rsa_key.p8 | tr -d '\n', and drop SNOWFLAKE_PASSWORD.
For the full walkthrough, see Snowflake key-pair authentication.

Parent-child hierarchy depth validated at startup

parent-child.book-depth and parent-child.legal-entity-depth below 1 are rejected at startup. The defaults, 15 and 5, are unchanged.

Tracing scope renamed

The accelerator traces under its own OpenTelemetry scope, atoti.frtb, instead of atoti.server. Update any monitoring filter or dashboard keyed on the old scope. See Tracing.

ReferenceCurrency context value no longer exposed

The ReferenceCurrency context value no longer appears in the Context Values drawer and can no longer be set. A saved dashboard or an MDX query that sets ReferenceCurrency must set the current member of displayCurrency instead. Capital numbers are unchanged.

REST API changes

Diagnostics redirect endpoints removed

DiagnosticsRedirectController is removed. GET /tree/cubes and GET /tree/measures?pivotId=... return 404. Call the platform measure-lineage diagnostics endpoint directly, as the shipped Atoti Admin UI does.

parentBranch on the What-If submit endpoint

POST /services/rest/whatif/{operationId}/submit now honors parentBranch: when toBranch does not exist, it is created from that branch instead of from the current head; when toBranch exists, parentBranch is ignored. An unknown or unreadable parentBranch is rejected with 400. A request that already sends parentBranch is now acted upon; confirm it names the intended branch.

Trade duplication requires a suffix

The scaleTrade endpoint rejects duplicate=true without a suffix as 400 Bad Request. Send a non-empty suffix with every duplication request.

Distributed discovery no longer fails when a data cube never joins

The discovery REST endpoint succeeds where it threw IllegalStateException for a query-cube measure whose data-cube measure never joined the cluster; the measure falls back to the Object type. Only code relying on that exception is affected.

Migration helper REST controller

MigrationHelperRestController is replaced by FRTBMigrationHelperRestController, and the local com.activeviam.frtb.migration.export package by the Common Library’s com.activeviam.accelerator.common.directquery.migration.export: DatabaseExtractionDTO is immutable and built with DatabaseExtractionDTO.builder()...build() instead of setters. Two properties are new: frtb.migration.export.enabled (default true) and frtb.migration.export.base-dir (default ${java.io.tmpdir}). A request whose outputDirectory is outside base-dir is rejected; set base-dir to the export directory. The generated DDL now creates the BOOK_HIERARCHY and LEGAL_ENTITY_HIERARCHY tables, which the deployment populates itself; see Populating hierarchy tables from parent-child stores.

Level path endpoint served by the Atoti Limits connector

Atoti FRTB no longer serves GET /services/rest/v1/levelPath/{cubeId}. The Atoti Limits server calls it through the Limits connector to resolve parent-child hierarchies for limits. With connector 4.2.0 or earlier, the Limits server’s calls to the endpoint fail. Import LevelPathRestService from a configuration class the application context loads, by import or component scan:
Do not add it with connector 4.2.1 or later; with 6.1.20 and later, startup fails with Ambiguous mapping.

Opt-in features

Each enabled property defaults to false, and nothing changes until it is set.

EU delegated act support

The new EU-DA parameter set changes no number under any other parameter set while the RRAO Zero Risk Weight flag is off. Its two opt-in treatments, frtb.eu-da.rrao-zero-risk-weight.enabled and frtb.eu-da.drc-contractual-maturity.enabled, have manual steps for pinned parser columns, DirectQuery databases, the SACubeRRAOExport extract and customized projects. See How to enable the opt-in treatments on the EU-DA page.

Optionality Service curvature-shift alignment

optionality-service.align-with-curvature-shift=true aligns OptionalityService with the CurvatureToDeltaShift post-processor: GIRR is matched by Bucket on Yield curves, Equity by Underlying on Spot risk factors, and an existing Y is never overwritten with N. This can change capital numbers, so validate before enabling in production. OptionalityService is deprecated since 6.0.10. In 6.1.0 the property and the legacy matching are removed, the aligned behavior becomes the only one, and a new interface replaces subclassing; the extension points curvatureKeys, underlyings and condition go with the legacy path.

Pro-Rata totals across several hierarchies

With frtb.pro-rata.multi-hierarchy-totals=true and a combination such as BookHierarchy;Risk Classes appended to pro-rata.hierarchies.list, which ships no combination, the Total column is the sum of the risk classes. See ProRataHierarchy. An overridden parentLocation on a ProRata subclass is not consulted for the summed totals.

Build and dependencies

Atoti Server upgrade to 6.1.24

Atoti FRTB moves from Atoti Server 6.1.19 to 6.1.24, with common-parent-pom and common-dependencies-bom 2.6.0. No Atoti Server Java API used by Atoti FRTB changed. The Atoti Server BOM is now imported ahead of common-dependencies-bom, so its dependency versions win; for the versions and CVEs, see the Atoti Server 6.1 changelog. Hibernate moves from 6.6.36.Final to 6.6.53.Final, the Spring Boot selection, and H2 stays at 2.3.232. Two dependencies resolve lower than before and are left so: commons-io 2.21.0 to 2.20.0 and velocity-engine-core 2.4.1 to 2.4. No action is required unless the deployment overrides h2.version or hibernate-orm.version. Such an override works only for a deployment that inherits this POM through <parent>; a deployment importing it with <scope>import</scope> must declare its own dependencyManagement entry instead.

Common Library upgrade to 2.1.17

Two lookup contracts and the DirectQuery Migrator change without a compile error: DatabaseDiscovery.discoverAndFix also validates the aggregate tables; a missing table or column throws DatabaseDiscoveryException.

ActivePivot Maven artifact rename

activepivot-impl and activepivot-intf are replaced by core. A POM declaring either artifact explicitly must declare com.activeviam.activepivot:core instead. Transitive users need no change. See the Atoti Server 6.1 migration notes.

Sign-Off and Adjustments Services dependency alignment

signoff-api-lib moves to group ID com.activeviam.modules.signoff-api and adjustments-services to com.activeviam.modules. Artifact IDs, packages and Spring configuration are unchanged.
Both versions now default to ${activepivot.version}. Neither library publishes a build for every Atoti Server patch, so a project that overrides activepivot.version must confirm both have a matching version, or pin signoff-api.version and adjustments-services.version to the last published one. The BranchAwareAdjustmentRequestDTO constructor (key, user, filters, input, toBranch) is replaced by (key, user, parentBranch, filters, input, toBranch). A call to the old form no longer compiles, and a precompiled caller fails with NoSuchMethodError. The no-argument constructor and setters are unchanged.

Java customizations

The sections below apply only to projects with custom code. A standard deployment needs none of them.

API signature changes

Each change below fails to compile where the row says so, and the compiler names the member.

Post-processor interface migration

Post-processors across frtb-core implement IDistributedPostProcessor instead of IPostProcessorPartitioningManagerAware. A subclass that referenced the partitioningManager or partitioningManagerFactory field, or overrode setPartitioningManagerFactory, no longer compiles: drop that wiring. A client post-processor implementing IPostProcessorPartitioningManagerAware directly still works; migrating it is recommended. A subclass of ABasicPostProcessor or ABaseDynamicAggregationPostProcessor needs nothing more: canBeDistributed returning true is correct and reduce needs no aggregation. A post-processor that fans out across a breakdown, or aggregates across a level, follows two rules, both driven by one predicate so they cannot drift apart:
  • setPartitioningLevels removes exactly the levels a prefetch changes on the requested location, such as a childLocation drill-down; a setFilter pin to a constant or an ancestorLocation call does not count. It always calls super first. A class extending AAdvancedPostProcessor directly must declare the override.
  • canBeDistributed returns true unconditionally for a post-processor that reads the database, through getDatastore(), an IDatabaseVersion, a store cursor or an IUnfilteredParameterRetriever; one that resolves everything through IParameterRetriever defers to the predicate. ScaledVectorValue is the reference implementation.
The levels the shipped post-processors forbid are listed under Post-processor partitioning levels.

Partitioning manager beans no longer used

postProcessorPartitioningManagerFactory, postProcessorPartitioningManagerAllAddedLevelDescriptions and postProcessorPartitioningManagerAllRemovedLevelDescriptions on FRTBPostProcessorConfig are deprecated for removal. No shipped post-processor implements IPostProcessorPartitioningManagerAware any more, so an override of either bean no longer affects them; a client post-processor implementing that interface still receives the factory built from both. Re-express the customization by overriding setPartitioningLevels on the post-processors concerned.

GrossJTD and VegaExpand output type validated

The output type of a GROSS_JTD or VEGA_EXPAND measure is read from its outputType property and must be a nullable double; another type fails at startup with PostProcessorInitializationException. A measure configuring no outputType keeps the nullable double as before.

Parameter lookups return empty collections

Fifteen parameter-lookup members return an empty collection or array instead of null when no tuple matches, and are annotated @NonNull: the ConfigurationParametersUtils members getVertices (both), getGIRRVegaResidualMaturities, getAllVertices (both), getAllUnderlyingVertices, getGIRRVerticesWeightingsQuery, getLHtoIndexMap, getIndexToLHMap, getCSRBuckets, getGIRRMajorCurrencies and getCsrNonSecHighRatings; DRCJTDCalculations.getDRCRiskWeights and getERBARiskWeights; and LiquidityHorizonCoefficient.retrieveLiquidityHorizonsToIndexesMap. Code compiles unchanged, but a == null branch applying a local default no longer runs. Replace null checks with emptiness checks:

Unmodifiable collections

AWeightedSensitivitiesAggregatesMap.toHierarchyInfos, ConfigurationParametersUtils.getCSRBuckets and getGIRRMajorCurrencies, ZeroRiskWeightFilter.getMembers, ARiskMeasureDoubleSums.leafCoordinates, CategoriesConfig.categoriesTuples, InitialDataLoadDates.initialLoadAsOfDates and InitialDataLoadDatesCloudConfig.initialLoadAsOfDatesCloud return unmodifiable lists, as do the DimensionsConstants.SAME_DIFFERENT_ORDER and TYPE_AND_MATURITY_LEVELS_ORDER constants. Code that sorts, adds to or replaces an element of the result throws UnsupportedOperationException at runtime. Wrap the result in new ArrayList<>(...) first.

Parser column constants immutable

ALL_FIELDS in RraoFileConstants, RraoSummaryFileConstants, BookDescriptionFileConstants, TradeAttributesFileConstants, DRCFileConstants and DRCSummaryFileConstants is built with List.of, and the matching FileColumnsConfig beans return unmodifiable lists. ALL_FIELDS.add(...) throws UnsupportedOperationException at startup; build a new list instead. A column appended by a property, such as the regulatory book classification or the EU-DA columns, is added to the bean only, so getColumnIndex returns -1 for it: read column positions from the injected bean.

AggregatesMap changes

AggregatesMap.Key.set(int, Object), Key.set(Object...) and Key.map(int, Object) keep their signatures but no longer insert an unmapped coordinate; they look it up and leave the dimension unmapped. Key.accumulate(Object...) is the inserting replacement, createKey still inserts as before, AggregatesMap.lookupKey(Object...) builds a key by lookup only, and Key.getMapped(int) can now return a negative value. Key.get(int) and AggregatesMap.add(Key, double) throw IllegalStateException on an unmapped coordinate. AggregatesMap.get(Key) no longer mutates the map, and returns 0.0 instead of throwing on an empty zero-dimension map. Code using the old accumulation pattern, key.set(...) then add(key, value), compiles unchanged and throws at query time: switch it to key.accumulate(...). AggregatesMap.publish() is new and must be called once after the last add and before the map is shared across threads; a subclass of AWeightedSensitivitiesAggregatesMap overriding compute must call it.

CSR bucket-indices helper

CSRNSDeltaCalculations.bucketIndices and CSRSecCTPDeltaCalculations.bucketIndices return BucketIndices instead of IDictionary<Object>, and evaluateRiskChargeDoubleSums, gammaCorrelations and gammaSectorCorrelations take it. BucketIndices exposes size(), getPosition(Object) and read(int), which returns String and throws ArrayIndexOutOfBoundsException out of range. No numeric output changes. A subclass of CSRNSDeltaRiskChargeDoubleSums, CSRNSVegaRiskChargeDoubleSums, CSRSecCtpDeltaRiskChargeDoubleSums or CSRSecCtpVegaRiskChargeDoubleSums that touches the bucket-indices parameter in getUnderlyingParameters, evaluateRiskMeasureDoubleSums or getVectorSize still compiles, because those members take Object, and fails at query time with ClassCastException. Update it to BucketIndices.

Datastore customization order

Every shipped DatastoreConfiguratorConsumer bean declares an @Order from DatastoreCustomisationSpringBeanOrder, and the customization list is no longer filtered on @Qualifier(SP_QUALIFIER__CUSTOMISATIONS); the constant is deprecated for removal and a bean still carrying it is applied as before. A project declaring its own consumers must annotate each one; PROJECT places a field before the sign-off key fields. Two silent changes to check: an unqualified consumer bean is now applied at startup, and a project injecting the qualified list no longer receives the shipped beans, so inject by type.
For the contract, see What determines the order of datastore customizations?.

Crypto 2a exchange bean moved

addCrypto2aExchangeToUnderlyingStore now lives in FeatureDatastoreCustomisationsConfig. A project that overrides, excludes or references the bean through DatastoreCustomisationsConfig must retarget it. Other projects need no action.

Trade-scaling What-If definitions split

TradeRescaleRestServiceController uses two definitions, TradeDuplicateSimulationDefinition and TradeScalingSimulationDefinition, configured through TradeRescaleStoreFields. The former TradeDuplicateAndRescaleSimulationDefinition still works and is deprecated for removal; persisted simulations and REST payloads naming its plugin key continue to run. Migrate customizations to the two new ones. TradeScaleDTO is removed.

6.0.8 to 6.0.9

Summary

SACubeRRAOExport column header rename

The SACubeRRAOExport DEE template now exports the RRAO Category column under the header RRAOCategory instead of OtherResidualRiskType. Downstream consumers that parse the export by header name must be updated from OtherResidualRiskType to RRAOCategory.

Distributed messaging API (if customized)

This section applies only if your project customizes distributed messaging classes. The IMessageHandlerRegistrar pattern introduced in 6.0.8 has been replaced. The following classes have been removed:
  • BusinessDayCalendarMessageHandler
  • FrtbCoreMessageHandlerRegistrar
  • DatastoreMetadataMessenger
BusinessDayCalendarMessage is now a Java record implementing Request (from com.activeviam.activepivot.dist.impl.avinternal.communication). Its answer is a nested record implementing Answer and ProcessedOutput. Handler registration is done inline using the CommunicationRegistration fluent API instead of the @AtotiExtendedPluginValue annotation. Before (6.0.8):
After (6.0.9):
The DistributedParametersRetriever constructor now requires an additional IActivePivotManager parameter. Update any custom instantiations accordingly.

6.0.7 to 6.0.8

Summary

New DLC Unload Topic Aliases

Eight new unload topic aliases have been added to allow selective, per-cube data unloading via DLC: UnloadSA, UnloadIMA, UnloadIMADRC, UnloadPL, UnloadStressCalibration, UnloadCommon, UnloadParameters, and UnloadAllData. No migration is required; these are purely additive. See Unload Topic Aliases for details.

OpenTelemetry configuration changes

OpenTelemetry has been upgraded and simplified:
  • SDK: 1.49.0 → 1.56.0
  • Instrumentation: 1.33.0-alpha → 2.22.0 (stable)
Breaking changes:
  1. tracing.enabled property removed — The OpenTelemetryTracingConfig class has been removed. Tracing is now configured entirely through OpenTelemetry Spring Boot auto-configuration.
  2. Exporters disabled by default — OpenTelemetry exporters (traces, metrics, logs) are now set to none by default. Previously, tracing was enabled by default when tracing.enabled=true.
Migration steps:
  • The tracing.enabled property can be removed from your configuration as it is no longer used.
  • If you were using tracing.enabled=false to disable tracing: No action needed (tracing is now off by default).
  • If you were using tracing.enabled=true with -Dotel.java.global-autoconfigure.enabled=true, replace with the new VM flags:
Before:
After:

JGroups protocol files

The AtotiAuthToken class has been replaced with SharedSecretAuthToken. Update all JGroups protocol XML files to use the new class name. Before:
After:

Distributed messaging API (if customized)

This section applies only if your project customizes distributed messaging classes. The following API changes have been made:
  • IAuthenticatedBroadcastMessage now takes 1 type parameter instead of 3. Update any class that implements or references this interface.
  • BusinessDayCalendarMessage has been simplified to AUniqueBroadcastMessage<BusinessDayCalendarMessageAnswer>. Handler logic previously embedded in the message class now lives in BusinessDayCalendarMessageHandler.
  • DatastoreMetadataMessenger is deprecated for removal. Its third type parameter has changed from IDistributedHierarchyManager to Void.
  • Custom message handlers should now implement IMessageHandlerRegistrar and register using @AtotiExtendedPluginValue(intf = IMessageHandlerRegistrar.class), rather than embedding logic in the message class itself.

Import changes

The constants AUTO_CONTRIBUTE_UNKNOWN_MEMBER_ALWAYS and AUTO_CONTRIBUTE_UNKNOWN_MEMBER_PROPERTY have moved from AxisHierarchyBase to IAxisHierarchyDescription. Update any imports or references in your project. Before:
After:

6.0.6 to 6.0.7

No migration needed.

6.0.5 to 6.0.6

Summary

Changes to the frtb-starter

  • The IFileUploadDataNodeClient interface has been updated in the frtb-starter module, the method createBranchForUIWithoutSimulation has been added to it.
  • The class FileUploadQueryNodeService has been changed extensively. It needs to be copied as is to your upgraded project.
  • In the class FileUploadQueryNodeRestController, the method resetDataNodeFiles does not throw an exception in its signature any more:
6.0.5:
6.0.6:
  • The method createBranchForUI has been updated:
6.0.5:
6.0.6:
  • In the class FileUploadPayload, the Lombok @EqualsAndHashCode annotation has been added, the topics attribute is now a set instead of a list, and the visibility of the topics and filePathSeparator attributes has been changed:
6.0.5:
6.0.6:
  • The class FileUploadRestServiceController has been changed extensively. It needs to be copied as is to your upgraded project.
  • In the class FileUploadTopic, the Lombok @EqualsAndHashCode annotation has been added, the files attribute is now a set instead of a list, and the visibility of the files and name attributes has been changed:
6.0.5:
6.0.6:
  • In the CommonDimensionsConfig class, hard-coded strings have been replaced by constants:
6.0.5:
6.0.6:

6.0.4 to 6.0.5

Summary

  • Crypto 2a Support: Added configuration, cube dimensions, measures, and starter module components to support Group 2a cryptoassets.
  • SBM Correlation Scenarios: Introduced a new cube dimension allowing user-defined correlation scenarios for enhanced control over SBM risk calculations.

Configuration files

Parameters

The following parameters have been added to the file FRTBParameters.csv:

Vertices

The following vertices have been added to the file Vertices.csv:

Configuration properties

Properties added

Datastores

Added stores

Modified stores

Cube schema

Added

Measures

Added

Integration of Crypto 2a into the frtb-starter module

The following classes have been added to the frtb-starter module:
  • Crypto2aService
  • Crypto2aConfig
and are imported in the FRTBConfig class:
The Crypto2aConfigurationProperties is now included in the list of configuration properties classes in the class FRTBConfig:
The following classes have been modified to take into account the datastore and cube dimensions modifications needed:
  • CommonDimensionsConfig
    • In the getSARiskDimension method, the argument Crypto2aConfigurationProperties crypto2aProp has been added. Before:
      Now:
    • The implementation of that method has been changed to add the Crypto 2a Exchange hierarchy: Before:
      Now:
  • The following method has been added:
  • CubesDimensionsConfig The Crypto2aConfigurationProperties crypto2aProp configuration properties are now used in the standardisedApproachCubeDimensions bean, and the new Correlation Scenario dimension has been added to that bean. Before:
    Now:
  • DatastoreCustomisationsConfig The following bean has been added:

Miscellaneous

The following dependency has been added to the frtb-starter POM file:

6.0.3 to 6.0.4

Summary

6.0.2 to 6.0.3

Summary

  • Virtual hierarchies can be set with the property frtb.configuration.virtual-hierarchies.
  • The new Curvature CVR measure will be disabled by default in 6.0.x versions of Atoti FRTB. To enable it, set the property frtb.curvature-cvr.enabled=true in the application.yaml file.
  • Cube distribution can now handle data overlap. This means it is possible to have several data cubes with duplicated data. you need to set frtb.distribution.enable-data-duplication=true.
  • HistoricalDatesProvider no longer queries the base stores for the list of historical dates. This is achieved by using the database statistics to gather the set of unique dates. The HistoricalDatesProvider can be reverted to the previous behavior of executing distinct datastore queries by setting the property frtb.historical-dates-provider.is-using-approximate-members=false.
  • The zero risk-weight can now be specified per obligor and jurisdiction, defaulting to 0%.

Breaking changes

None.

Deprecations

  • Cube distribution by field: Distribution of data cubes across nodes by defining clustering fields is deprecated, it should be done with distribution levels.

Input file formats

Added

Configuration properties

Properties added

Properties deprecated

Properties files

Files Modified

frtb-data-load.properties
New properties:

Datastores

Added stores

Databases

Added tables

Measures

Added

6.0.1 to 6.0.2

No migration needed.

6.0.0 to 6.0.1

No migration needed.

Breaking changes

None

Summary

  • Upgraded to Data Connectors 5.0.4

5.3.0 to 6.0.0

Upgrading from version 5.3.0, see Atoti FRTB 6.0 Release Notes. Atoti FRTB uses Atoti Server 6.1.7 and Atoti UI 5.2.x. For new features and fixes included in these releases, please see the Atoti UI documentation and Atoti UI Migration Notes, and the release notes for Atoti Server.

Breaking changes

  • Measure Configuration: The text replacement template for measure configuration now uses the pattern #{_name_} instead of ${_name_}. See Startup Properties.
  • frtb-application module: Some of the content of the frtb-starter module has been moved to the new frtb-application module.
  • DLC 5.0 Upgrade: With the new version of the DLC, the configuration of the ETL has been simplified.
  • What-if endpoints: The (undocumented) what-if REST endpoints used by the Switch Desk Model and Switch Book Desk what-if simulations have changed.
  • DoctorPivot endpoint: DoctorPivot is now embedded within the AdminUI. See Relocation of DoctorPivot for more.

Headline announcement

  • Upgraded to Atoti Server 6.1.7 : Upgraded to the latest Atoti Server.
  • Upgraded to JDK 21 : Upgraded from JDK 17 to JDK 21 to utilize the latest features.
  • Removed ActiveMonitor : The Active-Monitor module and related features have been removed.
  • frtb-application module: The frtb-application module replaces the frtb-starter module. All customizations should now be done in the frtb-application module, or in a new module based on the frtb-application module.
  • Sign-Off Service Availability: The Sign-Off REST service now throws ServiceUnavailableExceptions until the initial data loading phase has been completed. The Sign-Off REST service now provides a GET /enabled endpoint to check if the service is currently enabled.
  • Simplified OpenTelemetry Configuration: Atoti FRTB now relies on OpenTelemetry’s GlobalOpenTelemetry to configure the export of logs and metrics.
  • OpenRewrite recipes As an experimental feature, OpenRewrite recipes have been added to automate some of the migration steps.

OpenRewrite recipes

These OpenRewrite recipes are included as an experimental feature, and feedback is welcome on their usefulness during migration. This feedback can then be evaluated for potential inclusion of the feature in future releases. Please report any issues encountered through the normal Jira channels.
To help with upgrades, a set of OpenRewrite recipes is provided that can be used to automatically perform some of the migration steps from 5.3 to 6.0. The recipes included in this release are: See Using OpenRewrite in Atoti FRTB for instructions on how to run the recipes.

frtb-application module

The new frtb-application Maven module has been split out of the frtb-starter Maven module.

Components moved

The following components have been moved into the new module:
  • FRTBApplication class including the main() method.
  • Spring security configuration
  • OpenTelemetry configuration
  • Logging configuration
  • Content Service configuration
  • Configuration files

Configuration classes moved

For the full list of configuration classes that have been moved into the frtb-application module, see the Moved Classes section.

Data & Test folders moved

The sample data located at /frtb-starter/src/test/resources/ has been moved out of the frtb-starter module to the /sample-data/ folder located at the root of the project. The tests included in the frtb-starter module have been moved into the new frtb-application-tests module.

OpenTelemetry Configuration

The previous OpenTelemetry configuration has been replaced with a simple OpenTelemetry bean. To enable the autoconfiguration of this bean, set -Dotel.java.global-autoconfigure.enabled=true on the command line.

FX Translation Risk

The field “Translation Risk Currency” has been added to support loading translation risk for different reporting currencies. It is now possible to load different translation risks for different reporting currencies. This field is only used if FXComplexTrade=Y (otherwise the translation risk is calculated automatically).
  • If this field is empty, the sensitivity is not treated as translation risk but instead treated normally.
  • If this field is set, then the sensitivity will be interpreted as translation risk for that currency. It will be filtered and only used if the translation risk currency is the same as the reporting currency.

Alternative root parameter sets

The property parameter-set.root has been added to specify the root parameter set in the configuration and input files. It is expected that input files are generated for the parameter set specified in this property. Additionally, the configuration files containing parameters will need to be adapted to the new root parameter set.
  • Previously, when no parameter set was specified in the configuration it was assumed to be “BCBS”. Now, these parameters will default to the specified root parameter set.
  • Parameter configuration will need to be modified for the new root parameter set.
For example, for the bucket used for CSR non-Sec covered bonds, the FRTBParameters.csv file contains: If you want to set CRR2 as the root parameter set, the above two lines can change to become: So that the value in the CRR2 parameter set is still “10”, and the value for the BCBS parameter set is still “8”.

Summing Sensitivities

When multiple sensitivities with the same key fields are loaded, they are now summed. Previously this was only done when processing a chunk within a file, now it is done across the whole transaction. The following configuration has been added to application.yaml and will sum sensitivities and PVs for the SASensitivities store, making sure that the currency and a few other fields are the same.

FRTB Modules

Removed

Added

DLC 5.0 upgrade

The upgrade to DLC 5.0 has brought some significant changes to the ETL configuration. For non-FRTB specific DLC migration, please see the DLC 5.0 Migration Guide. DLC configurations for Atoti FRTB have now been organized into FrtbDlcConfig.

Loading Topic Configurations

Before the DLC redesign, ChannelParameters were being used to encapsulate DLC configurations into beans. Now, configurations that were previously found as ChannelParameters beans can be found as Topic Descriptions in the following classes: Column calculators are now configured as DLC CustomFieldDescription beans and have been organized into CustomFieldDescriptionConfig. The DLC implicitly adds CSVColumnParser column calculators based on the store being targeted. Those calculators have therefore been removed from the topic configurations. The new DLC also lets you configure parser overrides. In Atoti FRTB they can be found in ColumnParserOverridesDescriptionConfig. Tuple publishers are now configured as DLC TargetDescription beans and have been organized into TargetDescriptionsConfig.

Unloading Topic Configurations

Unloading topics are now completely separate from loading topics. They are configured in UnloadTopicDescriptionsConfig.

Topic Aliases

Topic Ordering Logic

ETL Extension Updates

See the following sections on how the ETL extensions have changed with the new DLC:

Removed classes

See the list of classes removed as part of the DLC 5.0 upgrade.

Video overview

See the following video on migrating to Data Connectors 5.0 in Atoti FRTB 6.0:

Input file formats

Modified

Startup properties

The file frtb-config.properties is now loaded into the Spring Boot environment. As a result, the properties in this file can be overridden on the command line. The file measures-config.json is now also loaded into the Spring Boot environment. The json file is converted to properties with the prefix “measures”. The text replacement template in these files now uses the pattern #{_name_} instead of ${_name_}. The ${_name_} pattern can still be used for Spring Boot’s property placeholders. Updated properties: changed values or renamed Changed values: Renamed Deleted properties:

Configuration files

Files Modified

FRTBParameters.csv
frtb-config.properties

Datastores

Modified stores

Databases

Modified tables

Cube schema

Added

Modified Classes

The following classes have been added, removed or had their function replaced with new classes.

Added Classes

Removed Classes

DataLoadController
The following classes related to the DLC and data loading have been removed as part of the DLC 5.0 upgrade.
WhatIf
The following classes have been replaced with DatastoreChangeSimulations because the configuration of WhatIfs has changed.
Services

Moved Classes

Migrating to using Atoti Starters

Atoti Server now provides Spring Boot Starters to aid in application development. These starters will auto-configure some basic and required beans for the application to run. Atoti FRTB has been updated to use these starters. The following changes have been made:

Historical Date Provider Service

The historical dates used for the Lookback hierarchy measures are now configurable via a IHistoricalDatesProvider bean. By default, a HistoricalDatesProvider (configured in HistoricalDatesProviderConfig) will be created that provides all AsOfDates available in all base stores.

Sign-Off REST services

The implementation of the Sign-Off REST service now has a Boolean to enable state flag. Out of the box, the Sign-Off REST services are disabled until the initial load is completed. This prevents the Sign-Off server from sending requests on those services before the end of the initial load. The status of the Sign-Off service can be retrieved through a GET request at /enabled. Atoti Server exceptions are now used instead of the previously used Javax exceptions. Error messages and constants have been fixed. Their prefix and/or content was previously incorrect.In particular, the constant ERROR_MESSAGE has been replaced by the constant ERROR_MESSAGE_NO_VALID_DTO_PROVIDED. The exception message prefix has been changed from "[EXPORT]" to "[SIGN-OFF]" in the error message constants.

Relocation of DoctorPivot

DoctorPivot has been moved from the endpoint /frtb-starter/doctorpivot to now being embedded within the AdminUI’s Measures dependencies tab which is located at: /frtb-starter/admin/ui/index.html#/measures-dependencies.