diff --git a/dhfs-parent/crapfs/src/main/java/org/acme/files/service/DhfsFileService.java b/dhfs-parent/crapfs/src/main/java/org/acme/files/service/DhfsFileService.java index 9b7744a1..977dd4f2 100644 --- a/dhfs-parent/crapfs/src/main/java/org/acme/files/service/DhfsFileService.java +++ b/dhfs-parent/crapfs/src/main/java/org/acme/files/service/DhfsFileService.java @@ -72,6 +72,7 @@ public class DhfsFileService { return txm.run(() -> { var file = alloc.create(File.class, new JObjectKey(path)); + file.setChunks(new TreeMap<>()); curTx.putObject(file); return Optional.of(path); }); diff --git a/dhfs-parent/crapfs/src/main/resources/application.properties b/dhfs-parent/crapfs/src/main/resources/application.properties index 493f31e3..4181868b 100644 --- a/dhfs-parent/crapfs/src/main/resources/application.properties +++ b/dhfs-parent/crapfs/src/main/resources/application.properties @@ -10,13 +10,12 @@ dhfs.files.write_merge_limit=1.2 # Don't take blocks of this size and above when merging dhfs.files.write_merge_max_chunk_to_take=1 dhfs.files.write_last_chunk_limit=1.5 -quarkus.log.category."com.usatiuk.dhfs".min-level=TRACE -quarkus.log.category."com.usatiuk.dhfs".level=TRACE +quarkus.log.category."com.usatiuk.dhfs".min-level=INFO +quarkus.log.category."com.usatiuk.dhfs".level=INFO quarkus.http.insecure-requests=enabled quarkus.http.ssl.client-auth=required - +dhfs.objects.persistence.files.root=${HOME}/dhfs_default/dhfsdb quarkus.hibernate-orm.database.generation=drop-and-create quarkus.datasource.jdbc.url=jdbc:h2:file:${HOME}/dhfs_default/dhfsdb quarkus.datasource.db-kind=h2 - quarkus.hibernate-orm.cache."org.acme.files.objects.ChunkData".memory.object-count=500 \ No newline at end of file diff --git a/dhfs-parent/objects/pom.xml b/dhfs-parent/objects/pom.xml index 96e660a5..e20ad13e 100644 --- a/dhfs-parent/objects/pom.xml +++ b/dhfs-parent/objects/pom.xml @@ -80,11 +80,11 @@ objects-common 1.0-SNAPSHOT - - com.usatiuk - objects-common-deployment - 1.0-SNAPSHOT - + + + + + diff --git a/dhfs-parent/objects/src/main/java/com/usatiuk/dhfs/objects/JObjectManager.java b/dhfs-parent/objects/src/main/java/com/usatiuk/dhfs/objects/JObjectManager.java index e7466e59..674454f5 100644 --- a/dhfs-parent/objects/src/main/java/com/usatiuk/dhfs/objects/JObjectManager.java +++ b/dhfs-parent/objects/src/main/java/com/usatiuk/dhfs/objects/JObjectManager.java @@ -13,6 +13,7 @@ import io.quarkus.logging.Log; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; +import java.io.Serializable; import java.lang.ref.Cleaner; import java.lang.ref.WeakReference; import java.util.*; @@ -85,7 +86,7 @@ public class JObjectManager { //noinspection unused try (var readLock = _storageReadLocker.lock(key)) { var read = objectStorage.readObject(key).orElse(null); - if (read == null) throw new IllegalArgumentException("Object not found: " + key); + if (read == null) return null; var got = objectSerializer.deserialize(read); @@ -168,6 +169,27 @@ public class JObjectManager { return transactionFactory.createTransaction(counter, new TransactionObjectSourceImpl(counter)); } + // FIXME: + private static class SimpleTxManifest implements Serializable, TxManifest { + private final List _written; + private final List _deleted; + + public SimpleTxManifest(List written, List deleted) { + _written = written; + _deleted = deleted; + } + + @Override + public List getWritten() { + return _written; + } + + @Override + public List getDeleted() { + return _deleted; + } + } + public void commit(TransactionPrivate tx) { // This also holds the weak references var toUnlock = new LinkedList(); @@ -290,18 +312,7 @@ public class JObjectManager { Log.tracef("Committing transaction %d to storage", tx.getId()); - objectStorage.commitTx(new TxManifest() { - @Override - public List getWritten() { - // FIXME: - return written.stream().map(JData::getKey).toList(); - } - - @Override - public List getDeleted() { - return List.of(); - } - }); + objectStorage.commitTx(new SimpleTxManifest(written.stream().map(JData::getKey).toList(), Collections.emptyList())); } catch (Throwable t) { Log.error("Error when committing transaction", t); throw t; diff --git a/dhfs-parent/objects/src/main/java/com/usatiuk/dhfs/objects/TransactionManager.java b/dhfs-parent/objects/src/main/java/com/usatiuk/dhfs/objects/TransactionManager.java index 39a3b9a2..8e9c061a 100644 --- a/dhfs-parent/objects/src/main/java/com/usatiuk/dhfs/objects/TransactionManager.java +++ b/dhfs-parent/objects/src/main/java/com/usatiuk/dhfs/objects/TransactionManager.java @@ -13,6 +13,10 @@ public interface TransactionManager { void rollback(); default T run(Supplier supplier) { + if (current() != null) { + return supplier.get(); + } + begin(); try { var ret = supplier.get(); @@ -25,6 +29,11 @@ public interface TransactionManager { } default void run(VoidFn fn) { + if (current() != null) { + fn.apply(); + return; + } + begin(); try { fn.apply(); diff --git a/dhfs-parent/objects/src/main/resources/META-INF/beans.xml b/dhfs-parent/objects/src/main/resources/META-INF/beans.xml new file mode 100644 index 00000000..e69de29b