Objects: add a "never lock option" to avoid deadlocks

This commit is contained in:
2025-03-21 23:43:29 +01:00
parent 4f397cd2d4
commit 16eb1d28d9
2 changed files with 10 additions and 2 deletions

View File

@@ -1,14 +1,16 @@
package com.usatiuk.dhfs.objects.transaction;
import com.usatiuk.dhfs.objects.*;
import com.usatiuk.dhfs.objects.JData;
import com.usatiuk.dhfs.objects.JDataVersionedWrapper;
import com.usatiuk.dhfs.objects.JObjectKey;
import com.usatiuk.dhfs.objects.iterators.*;
import com.usatiuk.dhfs.objects.iterators.IteratorStart;
import com.usatiuk.dhfs.objects.snapshot.Snapshot;
import com.usatiuk.dhfs.objects.snapshot.SnapshotManager;
import io.quarkus.logging.Log;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import org.apache.commons.lang3.tuple.Pair;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import java.util.*;
@@ -18,6 +20,8 @@ public class TransactionFactoryImpl implements TransactionFactory {
SnapshotManager snapshotManager;
@Inject
LockManager lockManager;
@ConfigProperty(name = "dhfs.objects.transaction.never-lock")
boolean neverLock;
@Override
public TransactionPrivate createTransaction() {
@@ -195,6 +199,9 @@ public class TransactionFactoryImpl implements TransactionFactory {
}
}
if (neverLock)
return getFromSource(type, key);
return switch (strategy) {
case OPTIMISTIC -> getFromSource(type, key);
case WRITE -> getWriteLockedFromSource(type, key);

View File

@@ -6,5 +6,6 @@ dhfs.objects.lock_timeout_secs=15
dhfs.objects.persistence.files.root=${HOME}/dhfs_default/data/objs
quarkus.package.jar.decompiler.enabled=true
dhfs.objects.persistence.snapshot-extra-checks=false
dhfs.objects.transaction.never-lock=true
quarkus.log.category."com.usatiuk.dhfs.objects.iterators".level=INFO
quarkus.log.category."com.usatiuk.dhfs.objects.iterators".min-level=INFO