fix(dao): ensure find and create functions thread safe #845
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Due to the fact that
find
andcreate
operations are not atomic, potential concurrency issues may arise, leading to multiple executions of thecreate
operation (while the expectation is to executecreate
only once). This results in the possibility of multiplepages
or similar entries in the data table. This PR addresses concurrency issues by utilizing mutex locks at the underlying level viasingleflight
.We provide a tool for merging (due to this issue) duplicate pages. To run this tool when Artalk starts, add the environment variable
ATK_DB_MIGRATOR_FUNC_MERGE_PAGES=1
. Before executing this tool, be sure to backup the original data.