Warning
The C7 Data Migrator is still in development and not yet ready for production use.
However, even though the C7 Data Migrator is not yet ready for production, we encourage users to try it out, play around with the current functionality and provide feedback.
- Prerequisites: Use Java 21
- Consider whether any of the migration limitations apply to your current C7 models and apply any changes necessary.
- Stop C7 process execution. I.e., shut down your engines.
- Migrate your models
- Can use https://migration-analyzer.consulting-sandbox.camunda.cloud/ to migrate your C7 models.
- If required, make any manual adjustments required in the C8 models. Note the migrator tool will leave hints in your diagram.
- Add "migrator" End Execution listener of the start event of each C8 model. Example: link.
- Start C8.
- Deploy migrated C8 process models and any other required resources such as referenced DMN or forms.
- Build or download the distribution.
- Start Migrator (start.sh/start.bat) and wait to finish.
- Navigate to Operate and check result.
- When a process instance gets skipped, you can start C7 again, modify the process instance into a supported state and shut down C7 again.
- To migrate running process instances, the historic process instance must exist.
- You cannot migrate running instances when you have configured history level to
NONE
or a custom history level that doesn't create historic process instances. - The minimum supported history level is
ACTIVITY
.
- You cannot migrate running instances when you have configured history level to
- You need to add an execution listener of type
migrator
to all your start events.
- Async before/after wait states
- C8 does not support asynchronous continuation (before/after) wait states. Therefore, if you were to migrate an instance currently waiting asynchronously at an element in a C7 model, this instance would just continue without waiting in the equivalent C8 model. Please adjust your model's logic accordingly prior to migration
- Data changed via user operations
- Data set via user operations like setting a due date to a user task cannot be migrated currently. We plan to address this limitation with [this ticket.
- Message events
- only message catch and throw events are supported for migration
- depending on your implementation, you may need to add a correlation variable to the instance pre migration
- Message and Signal start events
- If your process starts with a message/signal start event, no token exists until the message/signal is received and hence no migration is possible until that moment
- Once the message/signal is received, the token is created and moved down the execution flow and may be waiting at a migratable element inside the process. However, due to how the migration logic is implemented, at the moment the data migrator only supports processes that start with a normal start event. This is to be addressed with this ticket
- Triggered Boundary events
- C7 boundary events do not have a natural wait state
- If the process instance to be migrated is currently at a triggered boundary event in Camunda 7, there may still be a job associated with that event, either waiting to be executed or currently running. In this state, the token is considered to be at the element where the job is created: typically the first activity of the boundary event’s handler flow, or technically the point after the boundary event if asyncAfter is used.
- During migration to Camunda 8, the token will be mapped to the corresponding target element. However, if that element expects input data that is normally produced by the boundary event’s job (e.g. setting variables), this data may be missing in the migrated instance.
- Recommendation: To ensure a consistent migration, allow boundary event executions to complete before initiating the migration.
- There are elements that are supported in C7 but not supported in C8. Please refer to the documentation for more details on element support in C8 and adjust your models accordingly before migration.
- Call Activity
- To migrate a subprocess that is started from a call activity, the migrator must set the
legacyId
variable for the subprocess. This requires propagating the parent variables. This can be achieved by updating the C8 call activity in one of the following ways:- Set
propagateAllParentVariables
totrue
(this is the default) in thezeebe:calledElement
extension element. - Or, if
propagateAllParentVariables
is set tofalse
, provide an explicit input mapping:
- Set
<zeebe:ioMapping> <zeebe:input source="=legacyId" target="legacyId" /> </zeebe:ioMapping>
- To migrate a subprocess that is started from a call activity, the migrator must set the
- Multi-instance:
- Processes with active multi-instance elements can currently not be migrated. We recommend to finish the execution of any multi-instance elements prior to migration.
- Timer events:
- Processes with active tokens in timer events are not yet supported for migration. We have this ticket to address this limitation in the future.
- migrator.batch-size - configure number of items (process instances, jobs) to be processed per iteration. Default: 500
- Prerequisites: Use Java 21
- Set up Camunda 8
- Download Camunda c8run-8.8
- Extract files
- Start from distribution root by running
./start.sh
(orc8run.exe start
)
- Clone this repository
- Build from root with
mvn clean install
(add-DskipTests
to skip the tests) - (Optional) Run the example data generator
- (Optional) Run the migrator
- Either using the example
- Or by building, extracting and running the distribution
Read the Contributions Guide.
Every source file in an open-source repository needs to contain the following license header at the top, formatted as this file: license header.
The source files in this repository are made available under the Camunda License Version 1.0