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.
The current
update
method ofReplaceChangeLogLockStatement
is not safe. It allows multiple owner (identified by thelockedBy
field) to acquire the lock simultaneously. And it also allows the release by a different owner. There isn't any fence in the current implementation:liquibase-mongodb/src/main/java/liquibase/ext/mongodb/lockservice/ReplaceChangeLogLockStatement.java
Lines 77 to 84 in 5582bcd
Indeed, by running the following code with the latest liquibase-mongodb version there will be also multiple exceptions:
The proposed implementation blocks multiple acquisition by taking advantage of the Mongo DuplicateKey error. Specifically, an owner will try to acquire only an unlocked lock. And we have multiple scenarios here:
The same approach is used to allow the lock release only by his owner.