[ https://issues.apache.org/jira/browse/FINERACT-2000?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Aleksandar Vidakovic updated FINERACT-2000: ------------------------------------------- Fix Version/s: 1.10.0 (was: 1.9.0) > Clean-up retryable error codes > ------------------------------ > > Key: FINERACT-2000 > URL: https://issues.apache.org/jira/browse/FINERACT-2000 > Project: Apache Fineract > Issue Type: Improvement > Components: Performance, Savings > Affects Versions: 1.9.0 > Reporter: Peter Santa > Priority: Major > Labels: BeanSalad > Fix For: 1.10.0 > > > Current Fineract behaviour: > * optimistic locking exception: 423 {{SC_LOCKED}} > the request was retried inside Fineract (configuration times) but was not > successful > * > ** status: FAILED > * > ** when: more than one thread is trying to modify the same entity > concurrently > * > ** caller: should retry with a NEW idempotency key > * > ** ams connector: implemented retry configuration times > * > ** issue: not ideal as 423 is a WebDav code > * > ** suggested: change to return code to 409 {{SC_CONFLICT}} > * pessimistic locking: 409 {{SC_CONFLICT}} > the request was retried inside Fineract (different configuration times) but > was not successful > * > ** status: not registered currently, should be FAILED > * > ** when: the COB process is currently running and we try to modify the entity > only implemented on Loan so we will not have it on SavingsAccount > * > ** caller: should retry with a NEW idempotency key > * > ** ams connector: no retry, currently returns null > * > ** issue: same code as process in progress, must be different - already on > prod, so finer act community should allow the change > * > ** suggested: fix audit log and keep return code 409 {{SC_CONFLICT}} > * process in progress: 409 {{SC_CONFLICT}} > the request was already started by a different thread > * > ** status: IN PROGRESS > * > ** when: the process with same idempotency key was already started by a > different thread > specially for jobs (async requests), or for other processes if more than one > instance can send the same request simultaneously (probably can not happen) > * > ** caller: should retry with the SAME idempotency key > * > ** ams connector: no retry, currently returns null because we do not have > async requests, so another instance should return the correct response > (success or failed) > * > ** issue: same code as pessimistic locking, must be different - already on > prod, so finer act community should allow the change > * > ** suggested: change return code to 425 {{Too Early (RFC 8470), return null > is probably ok}} > * deadlock: 500 (not handled so maybe different) > deadlock is automatically retried but takes significant time so better to > avoid > * > ** status: FAILED > * > ** when: example: two batches perform operation on the same entities but in > different order > * > ** caller: should retry with a NEW idempotency key > * > ** ams connector: not handled > * > ** issue: implement or better to change the logic > one of the deadlock types we already fixed in the ams connector: > batch1: account1 operation, account2 operation; batch2: account2 operation, > account1 operation > was changed to > batch1: account1 operation, account2 operation; batch2: account1 operation, > account2 operation > we also encountered deadlock on Savings transactions which is not handled yet > * > ** suggested: change Savings Transaction handling (core change) and handle > deadlock exception > change return code to 409 {{SC_CONFLICT}} -- This message was sent by Atlassian Jira (v8.20.10#820010)