diff --git a/dhfs-parent/objects/src/main/java/com/usatiuk/objects/stores/CachingObjectPersistentStore.java b/dhfs-parent/objects/src/main/java/com/usatiuk/objects/stores/CachingObjectPersistentStore.java index 85ad5e32..8f4b36d6 100644 --- a/dhfs-parent/objects/src/main/java/com/usatiuk/objects/stores/CachingObjectPersistentStore.java +++ b/dhfs-parent/objects/src/main/java/com/usatiuk/objects/stores/CachingObjectPersistentStore.java @@ -31,7 +31,6 @@ public class CachingObjectPersistentStore { SerializingObjectPersistentStore delegate; @ConfigProperty(name = "dhfs.objects.lru.print-stats") boolean printStats; - private ExecutorService _commitExecutor; private ExecutorService _statusExecutor; private AtomicLong _cached = new AtomicLong(); private AtomicLong _cacheTries = new AtomicLong(); @@ -47,7 +46,6 @@ public class CachingObjectPersistentStore { _cache.set(_cache.get().withVersion(s.id())); } - _commitExecutor = Executors.newSingleThreadExecutor(); if (printStats) { _statusExecutor = Executors.newSingleThreadExecutor(); _statusExecutor.submit(() -> { @@ -68,7 +66,6 @@ public class CachingObjectPersistentStore { Log.tracev("Committing: {0} writes, {1} deletes", objs.written().size(), objs.deleted().size()); var cache = _cache.get(); - var commitFuture = _commitExecutor.submit(() -> delegate.prepareTx(objs, txId).run()); for (var write : objs.written()) { cache = cache.withPut(write.getLeft(), Optional.of(write.getRight())); } @@ -76,11 +73,7 @@ public class CachingObjectPersistentStore { cache = cache.withPut(del, Optional.empty()); } cache = cache.withVersion(txId); - try { - commitFuture.get(); - } catch (Exception e) { - throw new RuntimeException(e); - } + delegate.commitTx(objs, txId); _cache.set(cache); Log.tracev("Committed: {0} writes, {1} deletes", objs.written().size(), objs.deleted().size()); diff --git a/dhfs-parent/objects/src/main/java/com/usatiuk/objects/stores/LmdbObjectPersistentStore.java b/dhfs-parent/objects/src/main/java/com/usatiuk/objects/stores/LmdbObjectPersistentStore.java index 69e389a8..6927f069 100644 --- a/dhfs-parent/objects/src/main/java/com/usatiuk/objects/stores/LmdbObjectPersistentStore.java +++ b/dhfs-parent/objects/src/main/java/com/usatiuk/objects/stores/LmdbObjectPersistentStore.java @@ -145,10 +145,9 @@ public class LmdbObjectPersistentStore implements ObjectPersistentStore { } @Override - public Runnable prepareTx(TxManifestRaw names, long txId) { + public void commitTx(TxManifestRaw names, long txId) { verifyReady(); - var txn = _env.txnWrite(); - try { + try (var txn = _env.txnWrite()) { for (var written : names.written()) { var putBb = _db.reserve(txn, written.getKey().toByteBuffer(), written.getValue().size()); written.getValue().copyTo(putBb); @@ -163,17 +162,8 @@ public class LmdbObjectPersistentStore implements ObjectPersistentStore { bbData.putLong(txId); bbData.flip(); _db.put(txn, DB_VER_OBJ_NAME.asReadOnlyBuffer(), bbData); - } catch (Throwable t) { - txn.close(); - throw t; + txn.commit(); } - return () -> { - try { - txn.commit(); - } finally { - txn.close(); - } - }; } @Override diff --git a/dhfs-parent/objects/src/main/java/com/usatiuk/objects/stores/MemoryObjectPersistentStore.java b/dhfs-parent/objects/src/main/java/com/usatiuk/objects/stores/MemoryObjectPersistentStore.java index 6f39a770..af5909a8 100644 --- a/dhfs-parent/objects/src/main/java/com/usatiuk/objects/stores/MemoryObjectPersistentStore.java +++ b/dhfs-parent/objects/src/main/java/com/usatiuk/objects/stores/MemoryObjectPersistentStore.java @@ -53,19 +53,18 @@ public class MemoryObjectPersistentStore implements ObjectPersistentStore { } } - public Runnable prepareTx(TxManifestRaw names, long txId) { - return () -> { - synchronized (this) { - for (var written : names.written()) { - _objects = _objects.plus(written.getKey(), written.getValue()); - } - for (JObjectKey key : names.deleted()) { - _objects = _objects.minus(key); - } - assert txId > _lastCommitId; - _lastCommitId = txId; + @Override + public void commitTx(TxManifestRaw names, long txId) { + synchronized (this) { + for (var written : names.written()) { + _objects = _objects.plus(written.getKey(), written.getValue()); } - }; + for (JObjectKey key : names.deleted()) { + _objects = _objects.minus(key); + } + assert txId > _lastCommitId; + _lastCommitId = txId; + } } @Override diff --git a/dhfs-parent/objects/src/main/java/com/usatiuk/objects/stores/ObjectPersistentStore.java b/dhfs-parent/objects/src/main/java/com/usatiuk/objects/stores/ObjectPersistentStore.java index d1918de2..60c0e381 100644 --- a/dhfs-parent/objects/src/main/java/com/usatiuk/objects/stores/ObjectPersistentStore.java +++ b/dhfs-parent/objects/src/main/java/com/usatiuk/objects/stores/ObjectPersistentStore.java @@ -13,7 +13,7 @@ import java.util.Optional; public interface ObjectPersistentStore { Snapshot getSnapshot(); - Runnable prepareTx(TxManifestRaw names, long txId); + void commitTx(TxManifestRaw names, long txId); long getTotalSpace(); diff --git a/dhfs-parent/objects/src/main/java/com/usatiuk/objects/stores/SerializingObjectPersistentStore.java b/dhfs-parent/objects/src/main/java/com/usatiuk/objects/stores/SerializingObjectPersistentStore.java index cbb6637c..edda87ea 100644 --- a/dhfs-parent/objects/src/main/java/com/usatiuk/objects/stores/SerializingObjectPersistentStore.java +++ b/dhfs-parent/objects/src/main/java/com/usatiuk/objects/stores/SerializingObjectPersistentStore.java @@ -62,7 +62,7 @@ public class SerializingObjectPersistentStore { , objs.deleted()); } - Runnable prepareTx(TxManifestObj objects, long txId) { - return delegateStore.prepareTx(prepareManifest(objects), txId); + void commitTx(TxManifestObj objects, long txId) { + delegateStore.commitTx(prepareManifest(objects), txId); } }