Skip to content

Releases: Activiti/activiti-cloud-common-chart

7.6.1

23 Nov 13:43
Compare
Choose a tag to compare

Full Changelog: 7.6.0...7.6.1

7.6.0

27 Oct 13:48
Compare
Choose a tag to compare

What's Changed

  • AAE-10134: use action instead of reusable workflow for dependabot aut… by @atchertchian in #91
  • Bump Alfresco/alfresco-build-tools from 1.13.0 to 1.16.0 by @dependabot in #99
  • Bump Alfresco/alfresco-build-tools from 1.16.0 to 1.17.0 by @dependabot in #102
  • Bump Alfresco/alfresco-build-tools from 1.17.0 to 1.18.0 by @dependabot in #107
  • Bump Alfresco/alfresco-build-tools from 1.18.0 to 1.18.1 by @dependabot in #108
  • Bump Alfresco/alfresco-build-tools from 1.18.1 to 1.19.0 by @dependabot in #110
  • Bump Alfresco/alfresco-build-tools from 1.19.0 to 1.19.2 by @dependabot in #114

Full Changelog: 7.5.1...7.6.0

7.5.1

27 Sep 17:38
Compare
Choose a tag to compare

Full Changelog: 7.5.0...7.5.1

7.5.0

12 Sep 14:05
Compare
Choose a tag to compare

7.4.0

27 Jun 13:04
Compare
Choose a tag to compare

7.3.0

10 May 14:07
Compare
Choose a tag to compare

7.2.0

31 Mar 08:06
Compare
Choose a tag to compare

7.1.0-M17

02 Feb 13:41
Compare
Choose a tag to compare

description: Release 7.1.0-M17

7.1.0-M17

You can consume all the Activiti artifacts for this release from Alfresco Nexus:

<repositories>
  <repository>
    <id>activiti-releases</id>
    <url>https://artifacts.alfresco.com/nexus/content/repositories/activiti-releases</url>
  </repository>
</repositories>

Activiti Cloud:

<dependencyManagement>
   <dependencies>
     <dependency>
       <groupId>org.activiti.cloud</groupId>
       <artifactId>activiti-cloud-dependencies</artifactId>
       <version>7.1.0-M17</version>
       <scope>import</scope>
       <type>pom</type>
     </dependency>
   </dependencies>
 </dependencyManagement>

Activiti Core

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-dependencies</artifactId>
        <version>7.1.0-M17</version>
        <scope>import</scope>
        <type>pom</type>
      </dependency>
    </dependencies>
  </dependencyManagement>

In the milestone 7.1.0-M17 you will find the following main fixes & features:

Changes from previous milestones

Support Horizontal Pod Autoscaling (HPA) on Activiti Cloud full chart.

Kubernetes supports horizontal scalability through Horizontal Pod Autoscaler (HPA) mechanism.
In activiti-cloud-full-chart it is now possible to enable HPA for the runtime-bundle and activiti-cloud-query microservices.

Requirements

The HorizontalPodAutoscaler can fetch metrics from aggregated APIs that, for Kubernetes (metrics.k8s.io), are provided by an add-on named Metrics Server.

So, Metric Server needs to be installed and launched to use the HPA feature. Please refer to this page for its installation.

HPA Configuration

In the activiti-cloud-full-chart the HorizontalPodAutoscaler is disabled by default for backward compatibility. Please
add the following configuration to your values.yaml to enable and use it:

runtime-bundle:
  hpa:
    enabled: true
    minReplicas: 1
    maxReplicas: 6
    cpu: 90
    memory: "2000Mi"
activiti-cloud-query:
  hpa:
    enabled: true
    minReplicas: 1
    maxReplicas: 4
    cpu: 90

This configuration (present in the hpa-values.yaml file in this repository) enable HPA for both runtime-bundle and activiti-cloud-query.

⚠️ WARNING: the provided values are just an example. Please adjust the values to your specific use case.

Configuration Properties
Name Description Default
enabled enables the HPA feature false
minReplicas starting number of replicas to be spawned
maxReplicas max number of replicas to be spawned
cpu +1 replica over this average % CPU value
memory +1 replica over this average memory value
scalingPolicesEnabled enables the scaling policies true
Activiti Cloud Query and HPA

Activiti Cloud supports both RabbitMQ and Kafka message broker. Activiti Cloud Query is a consumer of the message broker, so we need to be extra careful in the configuration of the automatic scalability in order to keep it working properly.

As a general rule, the automatic horizontal scalability for the query consumers should be enabled only when the Activiti Cloud has enabled partitioning.

Activiti Cloud Query and HPA with Kafka

In a partitioned installation, Kafka allows the consumers to connect to one or more partitions with the maximum ratio of 1:1 between partitions and consumers.

So when configuring HPA please don't specify the maxReplicas value greater than the partitionCount.

Activiti Cloud Query and HPA with RabbitMQ

When partitioning RabbitMQ the configuration will spawn one replica for every partition, so you should avoid activating the HorizontalPodAutoscaler in this case.

Improved Query Event Handling Performance

  • Optimized entities hash code and equals to be consistent across all state transitions using entity identifier
  • Changed Audit entity identity generator to use sequence generator
  • Changed Query variable entity identity generator to use sequence generator
  • Enabled Hibernate query batching for Audit and Query event handlers
  • Optimized Audit event entities to be immutable to avoid extra update queries
  • Optimized Audit event entities to use dynamic insert query behavior
  • Optimized Query event entities to use dynamic insert and update query behavior
  • Replaced Spring Data Repository with JPA EntityManager to reduce N+1 queries overhead
  • Optimized Query event handler entity graph fetching to reduce N+1 select queries
  • Optimized task variables and task created events handling order

Query Performance Optimization Results M16 vs M17

7.1.0-M16
  • Average Latency: 41ms
  • 95p Latency: 62ms
  • Throughput: 24tps
7.1.0-M17
  • Average Latency: 3.6ms
  • 95p Latency: 7ms
  • Throughput: 277tps

Consistency on variables propagation

Previously, the propagation of variables to the process instance level was not consistent between user tasks and service tasks: while user tasks were mapping variables directly from the
local scope to the process level, service tasks were also updating variables in the execution context before propagating them to the process level.
This was leading to some misbehaviour depending on the execution order (see Activiti/Activiti#3787).

Starting from this release, service tasks are no longer updating the execution context, but updating directly the process instance variables based on the defined mappings.

Possible side effects: with the previous implementation, connector outputs were made available to the current execution even in the case where no mapping was defined,
meaning that connector outputs could be directly used in expressions for sequence flow expressions. After this change this will be no longer the case: in order to use
connector outputs in further expressions you'll need to define a mapping for it (either explicitly or using one of the MAP_ALL_OUTPUTS or MAP_ALL options).

7.1.0-M16

23 Nov 17:39
Compare
Choose a tag to compare

description: Release 7.1.0-M16

7.1.0-M16

You can consume all the Activiti artifacts for this release from Alfresco Nexus:

<repositories>
  <repository>
    <id>activiti-releases</id>
    <url>https://artifacts.alfresco.com/nexus/content/repositories/activiti-releases</url>
  </repository>
</repositories>

Activiti Cloud:

<dependencyManagement>
   <dependencies>
     <dependency>
       <groupId>org.activiti.cloud</groupId>
       <artifactId>activiti-cloud-dependencies</artifactId>
       <version>7.1.0-M16</version>
       <scope>import</scope>
       <type>pom</type>
     </dependency>
   </dependencies>
 </dependencyManagement>

Activiti Core

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-dependencies</artifactId>
        <version>7.1.0-M16</version>
        <scope>import</scope>
        <type>pom</type>
      </dependency>
    </dependencies>
  </dependencyManagement>

In the milestone 7.1.0-M16 you will find the following main fixes & features:

For the complete list of new features and bug fixes, please refer to https://github.com/Activiti/Activiti/milestone/40?closed=1.

Changes from previous milestones

  • Added support ability to configure all message topics destinations used by AAE applications.
    This PR provides configurations to customize destination names for static, i.e. engineEvents and dynamic destinations used by cloud connectors.

Given the following channel binding properties in the application environment context:

spring.cloud.stream.bindings.auditProducer.destination=engineEvents
spring.cloud.stream.bindings.auditConsumer.destination=engineEvents
spring.cloud.stream.bindings.queryConsumer.destination=engineEvents

When the following configuration property is also present in the application environment context:

# to override engineEvents destination name
activiti.cloud.messaging.destinations.engineEvents.name=engine-events

Then the result destination for all three bindings with matching engineEvents key will be configured to

spring.cloud.stream.bindings.auditProducer.destination=engine-events
spring.cloud.stream.bindings.auditConsumer.destination=engine-events
spring.cloud.stream.bindings.queryConsumer.destination=engine-events
  • All destinations support prefix configuration. Destination prefix can be configured using activiti.cloud.messaging.destination-prefix property.

Given the following channel binding properties in the application environment context:

spring.cloud.stream.bindings.auditProducer.destination=engineEvents
spring.cloud.stream.bindings.auditConsumer.destination=engineEvents
spring.cloud.stream.bindings.queryConsumer.destination=engineEvents

When the following configuration property is also present in the application environment context:

# to set the prefix and separator
activiti.cloud.messaging.destination-prefix=namespace

Then the result destination for all three bindings with matching engineEvents key will be configured to

spring.cloud.stream.bindings.auditProducer.destination=namespace_engineEvents
spring.cloud.stream.bindings.auditConsumer.destination=namespace_engineEvents
spring.cloud.stream.bindings.queryConsumer.destination=namespace_engineEvents
  • Destinations support destination separator configuration. Destination separator can be configured using activiti.cloud.messaging.destination-separator property.

Given the following channel binding properties in the application environment context:

# to set the prefix
activiti.cloud.messaging.destination-prefix=namespace

spring.cloud.stream.bindings.auditProducer.destination=engineEvents
spring.cloud.stream.bindings.auditConsumer.destination=engineEvents
spring.cloud.stream.bindings.queryConsumer.destination=engineEvents

When the following configuration property is also present in the application environment context:

# to set the separator
activiti.cloud.messaging.destination-separator=.

Then the result destination for all three bindings with matching engineEvents key will be configured to

spring.cloud.stream.bindings.auditProducer.destination=namespace.engineEvents
spring.cloud.stream.bindings.auditConsumer.destination=namespace.engineEvents
spring.cloud.stream.bindings.queryConsumer.destination=namespace.engineEvents
  • Destination names can be customized via messaging configuration properties to use lower case via transformer configuration properties.

Given the following channel binding properties in the application environment context:

spring.cloud.stream.bindings.auditProducer.destination=engineEvents
spring.cloud.stream.bindings.auditConsumer.destination=engineEvents
spring.cloud.stream.bindings.queryConsumer.destination=engineEvents

When the following configuration property is also present in the application environment context:

# to transform to lower case
activiti.cloud.messaging.destination-transformers-enabled=true
activiti.cloud.messaging.destination-transformers=toLowerCase

Then the result destination for all three bindings with matching engineEvents key will be configured to

spring.cloud.stream.bindings.auditProducer.destination=engineevents
spring.cloud.stream.bindings.auditConsumer.destination=engineevents
spring.cloud.stream.bindings.queryConsumer.destination=engineevents
  • The following configuration properties are introduced to configure Activiti messaging destination properties. The Activiti messaging destinations configuration uses channel destinations as key to configure binding service properties during application context initialization. The effective channel destinations will be configured at runtime by BindingServiceProperties bean post processors.
# Set destination separator to use to build full destinations, i.e. prefix_destination. Default is _
activiti.cloud.messaging.destination-separator

# Set destination prefix to use to build destinations, i.e. prefix_destination. Default is empty string.
activiti.cloud.messaging.destination-prefix

# Enable destination name transformers to apply conversion to all destination name for producers, consumers     
activiti.cloud.messaging.destination-transformers-enabled

# Configure comma-delimited list of destination transformers functions to apply conversion to all destination name for producers, consumers     
activiti.cloud.messaging.destination-transformers

# Configure regex expression to use for replacement of illegal characters in the destination names. Default is [\\t\\s*#:]
activiti.cloud.messaging.destination-illegal-chars-regex

# Configure replacement character for illegal characters in the destination names. Default is -
activiti.cloud.messaging.destination-illegal-chars-replacement

# Configure destination properties to apply customization to producers and consumer channel bindings with matching destination key.
# Destination name to apply for matching channel binding destinations. If empty the key is used as name. Default is empty string.
activiti.cloud.messaging.destinations.[channelBindingDestination].name

# Destination scope to add to destination name, i.e. name.scope. Default is null
activiti.cloud.messaging.destinations.[channelBindingDestination].scope

# Destination prefix to override common destination prefix. Default is null
activiti.cloud.messaging.destinations.[channelBindingDestination].prefix

# Destination separator to override common destination separator. Default is null
activiti.cloud.messaging.destinations.[channelBindingDestination].separator
  • The default property source uses classpath:config/activiti-cloud-messaging.properties with the following default values for backward compatibility with existing destinations:
activiti.cloud.messaging.destination-separator=${ACT_MESSAGING_DEST_SEPARATOR:_}
activiti.cloud.messaging.destination-prefix=${ACT_MESSAGING_DEST_PREFIX:}
activiti.cloud.messaging.destination-transformers-enabled=${ACT_MESSAGING_DEST_TRANSFORMERS_ENABLED:false}
activiti.cloud.messaging.destination-transformers=${ACT_MESSAGING_DEST_TRANSFORMERS:toLowerCase,escapeIllegalChars}

# Default destination scope mappings for cloud stream bindings with matching channel destination
activiti.cloud.messaging.destinations.engineEvents.name=${ACT_RB_ENG_EVT_DEST:engineEvents}
activiti.cloud.messaging.destinations.signalEvent.name=${ACT_RB_SIG_EVT_DEST:signalEvent}
activiti.cloud.messaging.destinations.commandConsumer.name=${ACT_RB_CMD_CONSUMER_DEST:commandConsumer}
activiti.cloud.messaging.destinations.commandConsumer.scope=${activiti.cloud.application.name}
activiti.cloud.messaging.destinations.asyncExecutorJobs.name=${ACT_RB_ASYNC_JOB_EXEC_DEST...
Read more

7.1.0-M15

08 Oct 13:52
Compare
Choose a tag to compare

description: Release 7.1.0-M15

7.1.0-M15

You can consume all the Activiti artifacts for this release from Alfresco Nexus:

<repositories>
  <repository>
    <id>activiti-releases</id>
    <url>https://artifacts.alfresco.com/nexus/content/repositories/activiti-releases</url>
  </repository>
</repositories>

Activiti Cloud:

<dependencyManagement>
   <dependencies>
     <dependency>
       <groupId>org.activiti.cloud</groupId>
       <artifactId>activiti-cloud-dependencies</artifactId>
       <version>7.1.0-M15</version>
       <scope>import</scope>
       <type>pom</type>
     </dependency>
   </dependencies>
 </dependencyManagement>

Activiti Core

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.activiti</groupId>
        <artifactId>activiti-dependencies</artifactId>
        <version>7.1.0-M15</version>
        <scope>import</scope>
        <type>pom</type>
      </dependency>
    </dependencies>
  </dependencyManagement>

In the milestone 7.1.0-M15 you will find the following main fixes & features:

Changes from previous milestones

  • Enhance Kafka Deployment Strategy by enabling dynamic scaling of the query consumer PODs: previously, while using partioned message streams, the property partitionCount was used to define at the same time the number of partitions and the number of replicas for query service for both RabbitMQ and Kafka binders. However, Kafka binder supports dynamically scaling and one replica can handle more than one partition. Starting from version 7.1.0-M15 the number of partitions and the number of replica for query service are set independently while using Kafka binder: partitionCount is used to define the number of partions and replicaCount is used to define the number of replicas for query service.partitionCount should be greater than or equals to replicaCount.
global:
  messaging:
    broker: kafka
    partitioned: true
    # global.messaging.partitionCount -- set the Kafka partition number
    partitionCount: 4
activiti-cloud-query:
  # replicaCount -- set the Kafka consumer number
  replicaCount: 2
  • Use client/secret auth for Keycloak Admin Client: previously, in order to retrieve users and groups from Keycloak, Activiti Cloud used to connect using the credentials (username/password) of a special user called client that was added to the Realm. Starting from the version 7.1.0-M15 the user client was removed in favor of a new keycloak client called (activiti-keycloak). As consenquence:
    • The following mandatory properties has been added:
      • activiti.keycloak.client-id=${ACT_KEYCLOAK_CLIENT_ID:activiti-keycloak}
      • activiti.keycloak.client-secret=${ACT_KEYCLOAK_CLIENT_SECRET:}
    • The following properties has been removed:
      • activiti.keycloak.admin-client-app=${ACT_KEYCLOAK_CLIENT_APP:admin-cli}
      • activiti.keycloak.client-user=${ACT_KEYCLOAK_CLIENT_USER:client}
      • activiti.keycloak.client-password=${ACT_KEYCLOAK_CLIENT_PASSWORD:client}

Configuration with Helm charts:

It's possible to create a default Activiti Keycloak Client Kubernetes secret with Helm by using the following values (replace changeit by the secret of your choice):

global:
  keycloak:
    clientSecret: changeit

Or, if you prefer, you can use existing Activiti Keycloak Client Kubernetes secret by enablinguseExistingClientSecret:

kubectl create secret generic activiti-keycloak-client \
   --from-literal=clientId=activiti-keycloak \
   --from-literal=clientSecret=changeit
global:
  keycloak:
    clientSecretName: activiti-keycloak-client
    useExistingClientSecret: true

Under the hood, the deployment will add the following environment variables to container specs:

specs:
  containers:
    - name: runtime-bundle
      env:
        - name: ACTIVITI_KEYCLOAK_CLIENT_ID
          valueFrom:
            secretKeyRef:
              key: clientId
              name: activiti-keycloak-secret
        - name: ACTIVITI_KEYCLOAK_CLIENT_SECRET
          valueFrom:
            secretKeyRef:
              key: clientSecret
              name: activiti-keycloak-secret
  • Removal of activiti-cloud-services-common-identity-keycloak from connector starter: activiti-cloud-starter-connector is no longer bringing the depencency toactiviti-cloud-services-common-identity-keycloak, please add it explicitly in the case where your connector implementation was rellying on it.

  • Improve message event handling when there are several runtime bundles: by default, binding destinations related to BPMN Messages are now scoped by Activiti Cloud Application. This allow having more than one Runtime Bundle using the same message broker. This change should be transparent for most of the users, but here are the changes performed:

    New default values starting from version 7.1.0-m15:

spring.cloud.stream.bindings.input.destination=messageEvents${activiti.cloud.messaging.destination-separator}${activiti.cloud.application.name}
spring.cloud.stream.bindings.output.destination=commandConsumer${activiti.cloud.messaging.destination-separator}${activiti.cloud.application.name}
spring.cloud.stream.bindings.commandConsumer.destination=${ACT_RB_COMMAND_CONSUMER_DEST:commandConsumer${activiti.cloud.messaging.destination-separator}${activiti.cloud.application.name}}
spring.cloud.stream.bindings.commandResults.destination=${ACT_RB_COMMAND_RESULTS_DEST:commandResults${activiti.cloud.messaging.destination-separator}${activiti.cloud.application.name}}
spring.cloud.stream.bindings.messageEvents.destination=messageEvents${activiti.cloud.messaging.destination-separator}${activiti.cloud.application.name}

Previous default values:

spring.cloud.stream.bindings.input.destination=messageEvents
spring.cloud.stream.bindings.output.destination=commandConsumer
spring.cloud.stream.bindings.commandConsumer.destination=commandConsumer
spring.cloud.stream.bindings.commandResults.destination=commandResults
spring.cloud.stream.bindings.messageEvents.destination=messageEvents