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.
Previously, diagram saves (for example, during realtime collaboration) would follow these steps:
Since updating diagrams was not atomic, there was a potential for clashes while updating a diagram: for example an update could be initiated by another client while the server is between steps 2 and 4, resulting in corrupted stored data.
This PR changes the process to enable atomic updates, resolving this issue:
The
DiagramStorageService
interface is updated with two additional methods:DiagramFileStorageService
provides implementations for both of these methods. It will rate limit calls tosaveDiagram()
and calls topatchDiagram()
in a single queue, as the purpose of the rate limiting is to avoid frequently modifying the diagram files on the filesystem regardless of the nature of the change (i.e. a patch will be overwritten by a following save and vice-versa, so they should be debounced w.r.t. each other).