From 8f860cd52a206789778f4501770a8723e70a40af Mon Sep 17 00:00:00 2001 From: Rafael Veck Date: Tue, 9 Nov 2021 17:01:24 -0300 Subject: [PATCH] execute update of databasechangelock with upsert true only first execution --- .../lockservice/ReplaceChangeLogLockStatement.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/main/java/liquibase/ext/mongodb/lockservice/ReplaceChangeLogLockStatement.java b/src/main/java/liquibase/ext/mongodb/lockservice/ReplaceChangeLogLockStatement.java index d339452e..b79e36b8 100644 --- a/src/main/java/liquibase/ext/mongodb/lockservice/ReplaceChangeLogLockStatement.java +++ b/src/main/java/liquibase/ext/mongodb/lockservice/ReplaceChangeLogLockStatement.java @@ -70,10 +70,16 @@ public int update(final MongoLiquibaseDatabase database) { , MongoChangeLogLock.formLockedBy(), locked); final Document inputDocument = new MongoChangeLogLockToDocumentConverter().toDocument(entry); inputDocument.put(MongoChangeLogLock.Fields.locked, locked); + + long qtDocuments = database.getMongoDatabase().getCollection(collectionName).countDocuments(); + boolean upsert = qtDocuments == 0; + final Optional changeLogLock = Optional.ofNullable( - database.getMongoDatabase().getCollection(collectionName) - .findOneAndReplace(Filters.eq(MongoChangeLogLock.Fields.id, entry.getId()), inputDocument, - new FindOneAndReplaceOptions().upsert(true).returnDocument(ReturnDocument.AFTER)) + database.getMongoDatabase() + .getCollection(collectionName) + .findOneAndReplace(Filters.eq(MongoChangeLogLock.Fields.id, + entry.getId()), inputDocument, + new FindOneAndReplaceOptions().upsert(upsert).returnDocument(ReturnDocument.AFTER)) ); return changeLogLock.map(e -> 1).orElse(0); }