For user-facing changes, see the Release notes.
For information on upgrading from previous versions, see the
Migration guide.
This release does not ship any changes.
Added
- LIM-2227: Added an implementation of the audit screen that uses the new workflow service.
Fixed
- LIM-2233: Fixed deletion of a limit failing on the connected Atoti server when one of its calculated members (“available amount” / “utilization %”) had already been removed by a concurrent measure refresh. The drop is now idempotent, so an already-removed member no longer raises a “does not exist” error or leaves the deletion workflow in error.
- LIM-2243: Fixed limit creation, update and deletion failing with a 409
ConflictException(You cannot delete this member because other members depend on it), which could make the whole application unusable, when a user-defined calculated measure depended on a Limits-created measure (“Available Amount” or “Utilization %”). Limits measures are now only created when missing and only dropped once their KPI no longer has any limit; a measure that another calculated member depends on is kept and the failure logged, instead of aborting the operation. - LIM-2252: Fixed
IndexOutOfBoundsExceptionin the incidents SSE listener when processing datastore transactions, which could cause real-time incident updates to stop being pushed to the UI. - LIM-2253 Limits: Improved the performance of limit operations for large applications with tens of thousands of limits, where operations could previously take 30s to 1min each.
- LIM-2256: Fixed a race when several limits are deleted concurrently, where two
KpiCrudService.refreshKPIs()runs both tried toDROPthe same orphaned KPI on the connected server, causing the second drop to fail with a 404 (NotFoundException) and the deletion to surface as HTTP 500. The refresh is now serialized and a 404 onDROP KPIis treated as a successful (idempotent) deletion. - LIM-2259: Fixed new limit creation failing with
LimitsCrudException: No value presentwhen the new limit’s date range overlapped multiple existing active limits sharing the same structure, scope, and limit type. - LIM-2267: Fixed KPI measures not being correctly created for new workflow limits because KPIs were refreshed before the limits were added to the connected server’s cache.
- PIVOT-14077: Fixed the ID of a deleted limit being re-issued to a subsequently created limit.
- LIM-2264: Fixed the Limit Structure delete action remaining available in the UI when no live limits exist for that structure.
Changed
Group IDs of dependencies have changed and must be updated. See the migration notes for more details.- LIM-2239: Scope strings now use backslash escaping for the reserved characters
| = < > & + [ ] \, so level, hierarchy, dimension and member names containing any of these characters are preserved through a scope-string round-trip. Existing scope strings without backslashes parse unchanged. See the scope overview and advanced scopes pages for the escape rules.
Fixed
- LIM-2172: Member selection in limit scope sometimes does not allow to remove members. Switching between simple and advanced mode can lead to empty tiles being displayed.
- LIM-2215 Permissions: Fixed limit permission checks being silently ignored for users authenticated via SSO.
- LIM-2238: Fixed editing a limit’s attachment in the Six-Eyes approval workflow failing with a 500 Internal Server Error when re-saving the limit.
- LIM-2240: Fixed
ScopeCacheService.refresh()throwingIllegalStateException: Duplicate key ... (attempted merging values X and Y)on every restart when the datastore contained twoLimitStructures declaring the same scope keys in a different order. The in-process scope-id dedup inScopeTupleGeneratornow keys by the canonical (sorted) scope form, matching whatScopeCacheService.refresh()uses, so equivalent scopes share a single id instead of being persisted as two store rows that later collide. - LIM-2241: Fixed the Add Limit button being incorrectly disabled when the structure’s history contained a deleted limit with an advanced scope, which prevented the creation of new limits.
- LIM-2242: Fixed KPIs not displaying on dashboards for limits with
TOTAL_EQUALS/TOTAL_EXCEPTadvanced scopes on multi-level hierarchies. - LIM-2244 Temporary limits: Fixed temporary limit creation failing from the KPI Drawer when selecting a different member on a multi-level hierarchy.
- LIM-2251: Fixed Atoti Limits failing to start for applications with a very large number of workflows. Warming the workflow cache at startup previously fetched tasks one workflow id at a time and queried their variables with one bind parameter per workflow, which could exceed the database’s per-query parameter limit (such as SQL Server’s 2100-parameter cap) and fail with a “query too large” error. Tasks are now retrieved in a single bulk query and their variables are fetched in batches sized to stay under each database’s parameter limit.
- PIVOT-13934: Fixed an NPE on Limits startup when the content server held a calculated measure whose content was not readable by the Limits service account (for example a measure created by another user with restrictive owners/readers). Such measures are now skipped with a WARN log identifying the measure name and the reason (missing read permission, empty content, or directory entry).
Added
- LIM-1877: Users with the
ROLE_AUTO_APPROVE_LIMITpermission can now upload Six-Eyes limits and have them auto-approved. - LIM-2113: Users with the
ROLE_AUTO_APPROVE_LIMITrole can now bypass the approval workflow when uploading limits via a new “Bypass Approval” checkbox in the limit upload dialog. - LIM-2157: Limit scope accepts free text values using the search input.
Deprecated
- LIM-2164: The
POST /limits/rest/v2/limitEvaluation/unscheduleendpoint has been deprecated. Please use theDELETE /limits/rest/v2/evaluation/schedulingendpoint instead.
Fixed
- LIM-2158: Scope dropdown not showing members with no contributions.
- LIM-2162: Stale entries in the identity generator cache were not being cleaned up.
- LIM-2163: Persisted workflow information was not being correctly re-loaded when restarting Atoti Limits.
- LIM-2164: The scheduled limit structure evaluation.
- LIM-2165: Error thrown in limits inventory when the limits server is configured without legacy workflows.
- LIM-2168: Limits datastore containing objects that failed validation on save in persistent mode.
- LIM-2169: Scope keys for limits on slicing multi-level hierarchies are now correctly resolved against their limit structure.
- LIM-2170: Restarting the limits server did not update the limits cache on the connected server.
Added
- LIM-2060: A new direct limit approval process has been added as a default workflow, which does not require any approvals for limits to be created, updated or deleted. This workflow uses the more performant
workflow-serviceand should be preferred to theStraightThroughworkflow. See this section for more details. - LIM-2073: Added a new configuration property
limits.autoconfiguration.connect-on-application-ready-event(default: true) which determines if the application server should automatically connect to Atoti Limits on startup upon receiving the SpringApplicationReadyEvent. Set this property tofalseto disable automatic connection and enable manual connection control. - LIM-2073: Added a new POST endpoint
/limits/autoconfig/connectin the application server that will allow users to manually trigger a connection to Atoti Limits whenlimits.autoconfiguration.connect-on-application-ready-eventis set tofalse. - LIM-2074: Improved performance in
LookUpPostProcessorandLimitsKpiEvaluatorby caching work across locations and failing invalid evaluations faster.
Changed
- LIM-2032:
IAuthenticatedLimitsUserServicenow uses a Spring authentication object for improved compatibility. - LIM-2078: Upgraded the Atoti Server dependencies for version-specific modules to versions
6.1.16,6.0.27-sb3and6.0.27. - LIM-2106: The
limits.autoconfiguration.server-nameproperty is now required to be set if the connected server uses the default catalog name (‘Catalog’), otherwise the connection will fail.
Deprecated
- LIM-2073: Deprecated the
limits/autoconfig/connectingendpoint for removal in favor of thelimits/autoconfig/connectedendpoint, both of which were previously doing the same thing.
Fixed
- LIM-1928: Fixed an issue where real-time updates in the status screen weren’t respecting the filters applied to the screen.
- LIM-2041: Fixed an issue where workflow variable changes were being applied before approval in the Six-Eyes Approval Process.
- LIM-2084: Fixed an issue where the calculated measures for limits with workflows using the new workflow service were not being created immediately after limits were approved.
- LIM-2121: Fixed an issue where temporary limits were not being exported.
- LIM-2124: Fixed incorrect parsing of localized numbers on the limits viewer.
Added
- LIM-357: Added a new six-eyes workflow for limits that require two levels of approval before they can be evaluated.
- LIM-1809: We have added new services to start Activiti workflows in bulk.
- LIM-1812: All workflow variables are now visible on the status screen table.
- LIM-1818: Added a new set of properties,
LimitsInitialLoadConfigurationProperties, to replaceLimitsDlcConfigurationPropertiesfor the new file loading service. - LIM-1819: Added a new service,
ILimitsFileLoadingServicewith default implementationDefaultLimitsFileLoadingService, to replace the DLC in the initial load of Limits data. - LIM-1829: Added a new column to the table to display the ‘limit type’ of each incident.
- LIM-1836: Added a new set of properties and a new API,
ILimitsStatusMananager, that allow for statuses in custom workflows to be mapped to limit actions. - LIM-1839: Added a field
limitTypeto theIncidentclass. This indicates which type of limit was used in the evaluation:OFFICIALorTEMPORARY - LIM-1853: The audit differences drawer now supports array / JSON payloads from the server.
- LIM-1854: Filter on limit ID is automatically applied to the table when navigating from the Status screen to the limit structure screen using links.
- LIM-1856: Added a rest endpoint in the auto-configuration module to retrieve the limits with a location and a kpi name.
- LIM-1862: Added a new endpoint
/activeviam/limits/rest/v2/startup, which is used to ping the Atoti Limits server. - LIM-1864: Added a new endpoint
/limits/rest/v2/incidents/filter-with-variablesto retrieve the incidents along with their workflow variables, which is used to dynamically generate columns in the status screen. - LIM-1864: Added an optional request parameter
includeVariableDefinitionsto the endpoint/limits/sse/v2/incidents/subscribe/filterto send the initial incidents along with their workflow variables, which is used to dynamically generate columns in the status screen. - LIM-1921: Added a new endpoint
/activeviam/limits/rest/v2/workflow-service/workflow-history/{workflow-type}/{object-id}for retrieving workflow histories in the new format. - LIM-1923: Added a new field
actionNameto theWorkflowTaskActionExecutionDTO. - LIM-1924: Updated Atoti Server to version 6.1.13. This includes the upgrade of artifacts required to connect to 6.1.13 versions of Atoti Server.
- LIM-1924: Added a new endpoint
/activeviam/limits/rest/v2/dataexport/downloadin the auto-configuration modules to handle evaluation responses. - LIM-1943: Added a new Incident workflow,
incident-review-process.bpmn, that uses the new workflow service. - LIM-1962: Added new columns for limit structure files:
Limit Workflow VariablesandIncident Workflow Variablesthat are used to populate new fields in the limit structure table:Limit Workflow DetailsandIncident Workflow Details. - LIM-1962: Added new properties
limits.workflow.limit-business-functionsandlimits.workflow.incident-business-functionsto map the business functions used for limit and incident workflows respectively. - LIM-2019: Added a new column for setting limit workflow initialization variables
- LIM-2027: Added new property
limits.workflow.structure-deletion-workflowsto configure the workflows where structure deletion is enabled
Changed
- LIM-1506: Removed server-specific properties from
application.yml. Properties specific to theConnectedAccreference test servers released with Atoti Limits can be found inapplication-connectedacc.ymland can be activated with theconnectedaccSpring profile. - LIM-1750: Realtime mode can now be toggled off during a long initial load.
- LIM-1809: The default implementation of
ILimitsProcessInstanceWorkflowCacheServiceis now a no-operation implementation as this class is unused. - LIM-1810: The status screen is filtered by default to only show the user’s outstanding tasks.
- LIM-1838: Enhanced the filtering of the Server-sent events replacing the
asOfDatesandincidentTypesby aFilterConditionDTOs. - LIM-1849: Improved performance of executing workflow actions using the default workflows by skipping unnecessary retrieval of limit workflow information.
- LIM-1849: Scope hierarchies are now disabled by default to improve performance. They can be enabled by setting
limits.cube.scope-hierarchies-enabled=true. - LIM-1862: The optional property
limits.autoconfiguration.limits-ping-urlis now auto-configured to point at the newly introduced endpoint/activeviam/limits/rest/v2/startup - LIM-1912: The name of the process in
limit-process-straight-through.bpmnhas been renamed fromStraight-through instance processtoStraightThroughto match the name in the UI. - LIM-1912: The name of the process in
limit-process-four-eyes.bpmnhas been renamed fromFour-eyes instance processtoFourEyesto match the name in the UI. - LIM-1912: The name of the process in
limit-process-exception.bpmnhas been renamed fromException WorkflowtoExceptionto match the name in the UI. - LIM-1912: The property to define the file types allowed to be uploaded as attachments in the
workflow has changed from
limits.workflow.allowed-file-upload-extensionstoactiveviam.apps.workflow-service.settings.allowed-file-upload-extensions. - LIM-1912: The property to define the file storage path for uploaded attachments in the workflow
has changed from
limits.workflow.file-storage-pathtoactiveviam.apps.workflow-service.settings.file-storage-path. - LIM-1923: The field
taskKeyinWorkflowTaskActionDTOhas been renamed totaskName. - LIM-1924: The default value of the
limits.autoconfiguration.atoti-mdx-download-urlproperty has been changed from/dataexport/downloadto/activeviam/limits/rest/v2/dataexport/download. - LIM-2034: The
limitValuefield on theLimitandIncidentobjects has been changed from adouble arrayto adouble. Thedouble arraywas previously unused.
Deprecated
- LIM-1809:
ILimitsProcessInstanceWorkflowCacheServiceis unused and has been deprecated for removal. It is still present to avoid breaking the API. - LIM-1809:
IEvaluationTaskManagerhas been deprecated for removal because most of its methods are unused. - LIM-1912:
LimitsWorkflowServicehas been renamed toLegacyLimitsWorkflowServiceand deprecated for removal in a future release.
Removed
- LIM-1822: Removed the DLC and all related configuration properties and classes. It has been replaced by
ILimitsFileLoadingService.
Fixed
- LIM-1777: The limits viewer sometimes incorrectly displays a notification that a limit was added on another table page
- LIM-1799: Errors while creating a structure sometimes do not show up on the screen.
- LIM-1811: Input fields are now properly disabled while submitting workflow actions.
- LIM-1827: Fixed the logic and wording for warning thresholds. The warning threshold is now directly correlated to the limit utilization percentage.
- LIM-1846: Fixed an issue where JWT tokens were not being refreshed causing requests between servers to fail after token expiration (default is 12 hours).
- LIM-1848: Fixed an issue where duplicate incident events may be published by the SSE emitters.
- LIM-1851: Fixed an issue where the Atoti Limits KPIs were not updated after a change of KPI description.
- LIM-1862: Fixed an issue where the reconnection to the Atoti Limits server wouldn’t happen properly if the Atoti Limits server was behind a loadbalancer.
- LIM-1865: Fixed an issue where a limit could not be created if it overlapped with an inactive limit.
- LIM-1915: Fixed an issue where structures created without a
Limit Changesworkflow defaulted to using theStraightThroughworkflow instead of throwing an exception. - LIM-1924: Fixed an issue where evaluation requests were failing due to the streaming responses.
- LIM-1936: Fixed an issue where limit statuses were defaulting to
INITIALIZEDif they were not set on creation inLimitsCrudService. - LIM-1954: You can now create limits on calculated measures where the underlying is a hierarchy.
- LIM-2002: Fixed an issue where creating and updating structures, limits and incidents simultaneously could fail intermittently.