From acf2ae2ceff50cc8a0afd83dc2ac4d919c88e267 Mon Sep 17 00:00:00 2001 From: Stepan Usatiuk Date: Fri, 22 Aug 2025 23:19:39 +0200 Subject: [PATCH] less commitSnapshots created --- .../objects/stores/WritebackObjectPersistentStore.java | 9 +++++++++ .../usatiuk/objects/transaction/TransactionService.java | 6 ++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/dhfs-parent/objects/src/main/java/com/usatiuk/objects/stores/WritebackObjectPersistentStore.java b/dhfs-parent/objects/src/main/java/com/usatiuk/objects/stores/WritebackObjectPersistentStore.java index e5ff5302..60414dbc 100644 --- a/dhfs-parent/objects/src/main/java/com/usatiuk/objects/stores/WritebackObjectPersistentStore.java +++ b/dhfs-parent/objects/src/main/java/com/usatiuk/objects/stores/WritebackObjectPersistentStore.java @@ -307,6 +307,15 @@ public class WritebackObjectPersistentStore { return r -> asyncFence(bundleId, r); } + /** + * Get the last committed transaction ID. + * + * @return the last committed transaction ID + */ + public long getLastCommitId() { + return _lastCommittedId.get(); + } + /** * Get a snapshot of the persistent store, including the pending writes. * diff --git a/dhfs-parent/objects/src/main/java/com/usatiuk/objects/transaction/TransactionService.java b/dhfs-parent/objects/src/main/java/com/usatiuk/objects/transaction/TransactionService.java index 659c6480..d1f7509d 100644 --- a/dhfs-parent/objects/src/main/java/com/usatiuk/objects/transaction/TransactionService.java +++ b/dhfs-parent/objects/src/main/java/com/usatiuk/objects/transaction/TransactionService.java @@ -165,7 +165,6 @@ public class TransactionService { toUnlock.add(lock); } - commitSnapshot = writebackObjectPersistentStore.getSnapshot(); } else { Log.trace("Committing transaction - no changes"); @@ -201,7 +200,10 @@ public class TransactionService { Log.trace("Committing transaction start"); var snapshotId = tx.snapshot().id(); - if (snapshotId != commitSnapshot.id()) { + // All dependencies are locked and could not be changed concurrently now + if (snapshotId != writebackObjectPersistentStore.getLastCommitId()) { + commitSnapshot = writebackObjectPersistentStore.getSnapshot(); + for (var read : readSet.entrySet()) { var current = commitSnapshot.readObject(read.getKey());