Giter Site home page Giter Site logo

Comments (5)

ikyriak avatar ikyriak commented on September 13, 2024 3

Hello @william-keller,

The related improvement has been included in the 1.0.0 RC.01 release.

Please read the README.md and CHANGELOG.md files because this release has breaking changes.

You can find the 1.0.0 RC.01 NuGet packages here.

If you have any suggestions or comments please, do not hesitate to send them 😉

from idempotentapi.

william-keller avatar william-keller commented on September 13, 2024 1

Hi @ikyriak ... how are you doing?

We've finally solved this problem by adding this code in our startup.cs file:

ThreadPool.SetMinThreads(100, 100);

It was probaly a thread poll issue

Many Thanks

from idempotentapi.

william-keller avatar william-keller commented on September 13, 2024

Hi @ikyriak
We found a scenario when this error occurs more frequently

Try to run locally (2 or more) docker containers with the same application/controller, such as a scalable cloud enviroment
Then, try to send 2 post requests with the same idempotencykey many times

from idempotentapi.

ikyriak avatar ikyriak commented on September 13, 2024

Hello @william-keller

The standard IDistributedCache interface doesn't support an atomic command to GetOrSet a cached value. For that reason, the current implementation cannon prevent multiple concurrent requests and guarantee that only one will be executed. So, they will be both executed in a scenario of two concurrent requests with the same idempotency key.

Additionally, there is the scenario of a Distributed Cache failure (e.g., timeout) when setting the controller action's result. In such a case, we would need a retry mechanism on the server instance (that has the result) and reject the subsequent requests (in the instances that don't have the result). So, we should use a local memory cache.

The good news is that we could use the FusionCache implementation, which supports both the GetOrSet method and several fail-safe mechanisms. I have started writing the tests for these scenarios, and then I will try to use the FusionCache.

from idempotentapi.

ikyriak avatar ikyriak commented on September 13, 2024

Hello @william-keller,

That's very interesting.
I am happy that you solved it and informed us about your solution.

Have a nice day,

from idempotentapi.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.