Hello Marta,

This change targets Transactions executed on Savings Accounts? Question is
raised because I see that Test Case is for Savings. What about repayments
on Loans?

Regards

Victor Romero

El mar, 2 ene 2024 a las 22:07, Márta Jankovics (<marta.jankov...@dpc.hu>)
escribió:

> Hi All,
>
> I’ve created a pull request to clean-up the retryable error codes.
> [image: 3592.png]
>
> FINERACT-2000: Clean-up retryable error codes by marta-jankovics · Pull
> Request #3592 · apache/fineract
> <https://github.com/apache/fineract/pull/3592>
> github.com <https://github.com/apache/fineract/pull/3592>
> <https://github.com/apache/fineract/pull/3592>
>
> The goal was that based on the response HTTP code, the caller should be
> able to decide if the requests worth trying again.
>
> Failed requests, that the caller can *retry with a NEW idempotency key*
> will return *409 Conflict* from now on. Fineract also retries these
> requests internally (how many times, is configured by
> resilience4j.retry.instances) In case the internal retry runs out of
> options, the request will fail with response code 409.
> What are these cases:
>
>    - Optimistic locking. Use-case: more than one thread is trying to
>    modify the same entity concurrently and the entity is versioned
>    (technically, it has a @Version annotated property). The save process
>    may fail with a JPA, or with a database error, both cases are handled.
>    Previously, this returned 500 Server Error.
>    - Pessimistic locking. Use-case: Closure of Business jobs are running
>    and the entity is explicitly hard locked by the framework. Currently
>    implemented for Loan only. For this special case, the response code was 409
>    before, so no change here. But now any existing or upcoming use-case of
>    pessimistic locking scenarios will be handled.
>    - Deadlock. Use-case: for example, two batches try to perform
>    operations on the same entities but in different order so the two threads
>    are waiting for each other. This case was not handled at all, so the
>    response code was unpredictable, 500 Server Error or 403 Forbidden or
>    something else.
>
>
> There is another type of retryable use-cases, for which the caller should 
> *retry
> the request with the SAME idempotency* *key, *will now return *425 **Too
> Early* (RFC 8470). Fineract also retries this type of failure internally,
> depending on the configuration.
>
>    - Use-case: the process - with the same idempotency key - was already
>    started by a different thread and the status of the command is currently IN
>    PROGRESS. It can especially occur for jobs and other async requests
>    (or for any process if more than one instance can send the same request
>    simultaneously). Note: this was returning 409 before, which has been
>    changed now, to differentiate from the ’retry with new idempotency key’
>    response.
>
>
> For more details, please read the story description:
> https://issues.apache.org/jira/browse/FINERACT-2000.
>
> I hope, that this change will help you to design your Fineract environment
> more efficiently.
>
> Thank you for your constructive feedbacks,
>
> Marta Jankovics
>
>

Reply via email to