Hi guys…
After migrating from 7.9 to 7.11, I started having problems finishing processes due the following error:
### Error flushing statements. Cause: org.apache.ibatis.executor.BatchExecutorException:
org.camunda.bpm.engine.impl.persistence.entity.HistoricActivityInstanceEntity.updateHistoricActivityInstancesByRootProcessInstanceId (batch index #7) failed. 6 prior sub executor(s) completed successfully, but will be rolled back.
Cause: java.sql.BatchUpdateException: Data truncation:
Incorrect datetime value: '5881630-06-06 17:57:19.537' for column 'REMOVAL_TIME_' at row 1
Notice the quite strange year of the timestamp it’s setting for removal_time_.
Any Idea of what could be happening ? 
PS.: mysql database, java 11
@fcordova how did you upgrade the camunda?
To upgrade camunda version 7.9 to 7.11,
- Execute patch update db script 7.9.x to 7.9.y
- Execute minor version update db script 7.10
- Execute patch update db script 7.10.x to 7.10.y
- Execute minor version update db script 7.11
1 Like
Do I have to execute path updates for each version before migrating between minor versions? I really expected all patches were included in minor version’s script…
But, considering REMOVAL_TIME_ fields were create on 7.9 to 7.10 script and 7.10’s only patch doesn’t mention REMOVAL_TIME, do you think it’s somehow related to the error I reported?
@fcordova patch script won’t be available in minor update script. It’s incremental approach. You have to execute patch update before the minor version update
OK, I understand…
But I still can’t see how this could be related to the error I reported.
As I said, REMOVAL_TIME_ fields were created in 7.9_to_7.10 and haven’t changed in any patch ever since.
As far as I see, the engine is somehow trying to insert an invalid timestamp, isn’t it?
@fcordova, did you provide custom implementation for HistoryRemovalTimeProvider
in the process engine config by setting this property setHistoryRemovalTimeProvider(HistoryRemovalTimeProvider removalTimeProvider)
?
From the class HistoricActivityInstanceManager.java below function is called, so you can debug this function and caller.
public void addRemovalTimeToActivityInstancesByRootProcessInstanceId(String rootProcessInstanceId, Date removalTime) {
Map<String, Object> parameters = new HashMap<>();
parameters.put("rootProcessInstanceId", rootProcessInstanceId);
parameters.put("removalTime", removalTime);
getDbEntityManager()
.updatePreserveOrder(HistoricActivityInstanceEventEntity.class, "updateHistoricActivityInstancesByRootProcessInstanceId", parameters);
}
The DB Query is referenced from here for the above function,
<update id="updateHistoricActivityInstancesByRootProcessInstanceId"
parameterType="java.util.Map">
update ${prefix}ACT_HI_ACTINST set
REMOVAL_TIME_ = #{removalTime, jdbcType=TIMESTAMP}
where ROOT_PROC_INST_ID_ = #{rootProcessInstanceId, jdbcType=VARCHAR}
</update>
Call Hierarchy for above function is:
Not a custom provider but I have:
- changed cleanup strategy with
cfg.setHistoryCleanupStrategy("endTimeBased");
- changed HistoryTimeToLive to Integer.MAX_VALUE
Looking now, I guess this error could be caused by item 2 since maxvalue is too big… the idea here was to keep it forever, what could be achieved using 0 instead, right?
@fcordova We can configure either of the two history cleanup strategies:
Two avialable history cleanup strategies: Removal-Time-based or End-Time-based strategy. The Removal-Time-based strategy is the default strategy and recommended in most scenarios.
History and Audit Event Log | docs.camunda.org.
Since your History TTL is too high value, removal time has been set to maximum years. Also it doesn’t match the ISO date format yyyy-MM-ddTHH:mm:sssZ
I believe that setting Integer.MAX_VALUE to HistoryTimeToLive is not a good practice and not a valid use case.
Configure reasonable History TTL according to docs: History and Audit Event Log | docs.camunda.org
-
If you want to retain the history forever for certain process definitions, then remove the TTL settings at engine level and History TTL field in bpmn model also keep it blank.
-
Configure History TTL at process definition level whose history only need to be removed after certain period of time.
2 Likes