Adding a lock to AssessmentSubmissionService #2685
Draft
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.
📝 A short description of the changes
A race condition could potentially occur in the perform method of the AssessmentSubmissionService class. This method involves several operations that read from and write to the database, and if these operations are not properly synchronized, it could lead to inconsistent data.
Two or more requests to submit the same assessment could be processed at the same time. This could happen if a user accidentally double-clicks the submit button, or if multiple users are working on the same assessment.
The first request reads the current state of the assessment from the database.
The second request also reads the current state of the assessment from the database. Because this happens before the first request has had a chance to update the database, the second request gets the old state of the assessment.
The first request updates the assessment and writes the new state to the database.
The second request updates the assessment based on the old state it read earlier, and writes this outdated state to the database. This overwrites the update made by the first request.