Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add thread safety to ActiveFile #229

Merged

Conversation

dmitriy-kiriyenko
Copy link
Contributor

@dmitriy-kiriyenko dmitriy-kiriyenko commented Jun 5, 2021

ActiveFile is not thread-safe, which results in the following: if the very first request to ActiveFile goes simultaneously from even two threads, the first one is going to return as if the data was empty. The second request will immediately fix that, but that unlucky thread will receive a bad value. It may store it in the database or memoize it, which will result in further problem escalation.

We can't just synchronise it, because we check the variable very far from reload. While we must synchronise, it's not enough. We have to flag it as 'done' only after it's loaded.

Another problem is that we touch all in process of reloading, which will check data_loaded flag and try to reload again. To counter that, I come out with a method that won't trigger reload, to use it in methods that work during reload.

Resolves #159.

ActiveFile is not thread-safe, which results in the following: if the
very first request to ActiveFile goes simultaneously from even two
threads, the first one is going to return as if the data was empty. The
second request will immediately fix that, but that unlucky thread will
receive a bad value. It may store it in the database or memoize it,
which will result in further problem escalation.

We can't just synchronize it, because we check the variable very far
from reload. While we must synchronize, it's not enough. We have to flag
it as 'done' only after it's loaded.

Another problem is that we touch `all` in process of reloading, which
will check `data_loaded` flag and try to reload again. To counter that,
I come out with a method that won't trigger reload, to use it in methods
that work during reload.
@dmitriy-kiriyenko
Copy link
Contributor Author

@zilkey any chance?

@ghost
Copy link

ghost commented Oct 21, 2021

@zilkey If you have the time, Please see a bit little 🙏

@yujideveloper
Copy link
Contributor

@adampal @kbrock
I believe we should merge this pr.
Could you review this?

@adampal
Copy link
Member

adampal commented Jul 20, 2022

Thanks @dmitriy-kiriyenko I tested locally and confirmed this definitely fixes the issue @DRMNick saw in #159

@adampal adampal merged commit e9291d1 into active-hash:master Jul 20, 2022
@adampal adampal mentioned this pull request Jul 20, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Thread Safety
3 participants