ActivitiOptimisticLockException and multiple async executors
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-22-2016 05:49 AM
Hi,
why ActivitiOptimisticLockException is thrown after serviceTask is completed, not before its execution? During stress tests I can see, that executor which get AOLE done given serviceTask and after that exception is thrown, so task will be executed again?
Why lock is not checked before serviceTask execution? And another question - how I can handle such case to avoid such situations?
why ActivitiOptimisticLockException is thrown after serviceTask is completed, not before its execution? During stress tests I can see, that executor which get AOLE done given serviceTask and after that exception is thrown, so task will be executed again?
Why lock is not checked before serviceTask execution? And another question - how I can handle such case to avoid such situations?
Labels:
- Labels:
-
Archive
2 REPLIES 2
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-22-2016 08:30 AM
Additionally I enabled DEBUG level and I see such logs:
<code>
dev-8097
EBUG [2016-02-22 14:15:59.905] [,org.activiti.engine.impl.db.DbSqlSession,provideTaskExecutor-1,,,,] insert JobEntity [id=6a5d299d-d966-11e5-80df-ac87a327df39]
dev-8097
EBUG [2016-02-22 14:15:59.905] [,org.activiti.engine.impl.db.DbSqlSession,provideTaskExecutor-1,,,,] inserting: JobEntity [id=6a5d299d-d966-11e5-80df-ac87a327df39]
dev-8097
EBUG [2016-02-22 14:15:59.905] [,o.a.e.i.p.entity.JobEntity.insertMessage,provideTaskExecutor-1,,,,] ==> Parameters: 6a5d299d-d966-11e5-80df-ac87a327df39(String), null, null, true(Boolean), cafab7c5-d95e-11e5-890a-ac87a327df39(String), 5cca19f3-d95e-11e5-890a-ac87a327df39(String), exchange-processing:18:a4737b75-d92f-11e5-b0f5-ac87a327df39(String), 2016-02-22 14:20:59.905(Timestamp), 3(Integer), null, null, async-continuation(String), null, (String)
dev-8097
EBUG [2016-02-22 14:21:45.417] [,o.a.engine.impl.cmd.LockExclusiveJobCmd ,provideTaskExecutor-1,,,,] Executing lock exclusive job 6a5d299d-d966-11e5-80df-ac87a327df39 cafab7c5-d95e-11e5-890a-ac87a327df39
dev-8097
EBUG [2016-02-22 14:21:45.418] [,o.a.engine.impl.cmd.ExecuteAsyncJobCmd ,provideTaskExecutor-1,,,,] Executing async job 6a5d299d-d966-11e5-80df-ac87a327df39
dev-8097
EBUG [2016-02-22 14:21:50.884] [B099000688,org.activiti.engine.impl.db.DbSqlSession,provideTaskExecutor-1,,,729480,1000764210] delete JobEntity [id=6a5d299d-d966-11e5-80df-ac87a327df39]
dev-8097
EBUG [2016-02-22 14:21:50.887] [B099000688,org.activiti.engine.impl.db.DbSqlSession,provideTaskExecutor-1,,,729480,1000764210] executing: delete JobEntity [id=6a5d299d-d966-11e5-80df-ac87a327df39]
dev-8097
EBUG [2016-02-22 14:21:50.887] [B099000688,o.a.e.i.p.entity.JobEntity.deleteMessage,provideTaskExecutor-1,,,729480,1000764210] ==> Parameters: 6a5d299d-d966-11e5-80df-ac87a327df39(String), 1(Integer)
dev-8097
EBUG [2016-02-22 14:21:50.887] [B099000688,o.a.e.impl.interceptor.CommandContext ,provideTaskExecutor-1,,,729480,1000764210] Optimistic locking exception : org.activiti.engine.ActivitiOptimisticLockingException: JobEntity [id=6a5d299d-d966-11e5-80df-ac87a327df39] was updated by another transaction concurrently
dev-8097
EBUG [2016-02-22 14:21:50.888] [B099000688,o.a.e.i.p.entity.JobEntity.selectJob ,provideTaskExecutor-1,,,729480,1000764210] ==> Parameters: 6a5d299d-d966-11e5-80df-ac87a327df39(String)
dev-8097
EBUG [2016-02-22 14:21:50.889] [B099000688,org.activiti.engine.impl.db.DbSqlSession,provideTaskExecutor-1,,,729480,1000764210] update JobEntity [id=6a5d299d-d966-11e5-80df-ac87a327df39]
dev-8097
EBUG [2016-02-22 14:21:50.889] [B099000688,org.activiti.engine.impl.db.DbSqlSession,provideTaskExecutor-1,,,729480,1000764210] updating: JobEntity [id=6a5d299d-d966-11e5-80df-ac87a327df39]
dev-8097
EBUG [2016-02-22 14:21:50.889] [B099000688,o.a.e.i.p.entity.JobEntity.updateMessage,provideTaskExecutor-1,,,729480,1000764210] ==> Parameters: 3(Integer), null, null, 2(Integer), 3b911190-d967-11e5-80df-ac87a327df39(String), JobEntity [id=6a5d299d-d966-11e5-80df-ac87a327df39] was updated by another transaction concurrently(String), 2016-02-22 14:26:50.889(Timestamp), 6a5d299d-d966-11e5-80df-ac87a327df39(String), 2(Integer)
dev-8097
EBUG [2016-02-22 14:21:50.890] [B099000688,p.p.e.ComLoggingExecuteAsyncRunnable ,provideTaskExecutor-1,,,729480,1000764210] Optimistic locking exception during job: 6a5d299d-d966-11e5-80df-ac87a327df39 / executionId: cafab7c5-d95e-11e5-890a-ac87a327df39 / processInstance: 5cca19f3-d95e-11e5-890a-ac87a327df39
dev-8097
EBUG [2016-02-22 14:21:50.890] [B099000688,o.a.e.impl.cmd.UnlockExclusiveJobCmd ,provideTaskExecutor-1,,,729480,1000764210] Unlocking exclusive job 6a5d299d-d966-11e5-80df-ac87a327df39
</code>
I don't see any additional updates, so why AOLE is thrown? JobEntity is executed only on one app instance as you can see from log file name.
<code>
dev-8097

dev-8097

dev-8097

dev-8097

dev-8097

dev-8097

dev-8097

dev-8097

dev-8097

dev-8097

dev-8097

dev-8097

dev-8097

dev-8097

dev-8097

</code>
I don't see any additional updates, so why AOLE is thrown? JobEntity is executed only on one app instance as you can see from log file name.
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
02-24-2016 04:42 AM
Optimistic locking on itself is not a problem. If you have multiple executors, it is even expected, as multiple executors are battling for the same jobs. Nothing to worry about.. (see other thread where I replied too)
