4 Commits

Author SHA1 Message Date
3eb7164c0f Dhfs-fuse: fix LazyFsIT tests 2025-05-10 16:49:58 +02:00
f544a67fb5 Objects: cleanup AutoCloseableNoThrow 2025-05-10 13:49:42 +02:00
964b3da951 Objects: remove getUsableSpace 2025-05-10 11:20:34 +02:00
cb33472dc5 Utils: remove VoidFn 2025-05-10 11:07:40 +02:00
10 changed files with 25 additions and 51 deletions

View File

@@ -154,7 +154,7 @@ public class LazyFsIT {
Thread.sleep(3000); Thread.sleep(3000);
Log.info("Killing"); Log.info("Killing");
lazyFs1.crash(); lazyFs1.crash();
waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("Caused by: org.lmdbjava"), 60, TimeUnit.SECONDS); waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("org.lmdbjava.LmdbNativeException"), 60, TimeUnit.SECONDS);
var client = DockerClientFactory.instance().client(); var client = DockerClientFactory.instance().client();
client.killContainerCmd(container1.getContainerId()).exec(); client.killContainerCmd(container1.getContainerId()).exec();
container1.stop(); container1.stop();
@@ -195,7 +195,7 @@ public class LazyFsIT {
lazyFs1.crash(); lazyFs1.crash();
} }
try { try {
waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("Caused by: org.lmdbjava"), 60, TimeUnit.SECONDS); waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("org.lmdbjava.LmdbNativeException"), 60, TimeUnit.SECONDS);
} catch (TimeoutException e) { } catch (TimeoutException e) {
// Sometimes crash doesn't work // Sometimes crash doesn't work
Log.info("Failed to crash: " + testInfo.getDisplayName()); Log.info("Failed to crash: " + testInfo.getDisplayName());
@@ -237,7 +237,7 @@ public class LazyFsIT {
Thread.sleep(3000); Thread.sleep(3000);
Log.info("Killing"); Log.info("Killing");
lazyFs1.crash(); lazyFs1.crash();
waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("Caused by: org.lmdbjava"), 60, TimeUnit.SECONDS); waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("org.lmdbjava.LmdbNativeException"), 60, TimeUnit.SECONDS);
var client = DockerClientFactory.instance().client(); var client = DockerClientFactory.instance().client();
client.killContainerCmd(container1.getContainerId()).exec(); client.killContainerCmd(container1.getContainerId()).exec();
container1.stop(); container1.stop();
@@ -279,7 +279,7 @@ public class LazyFsIT {
lazyFs1.crash(); lazyFs1.crash();
} }
try { try {
waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("Caused by: org.lmdbjava"), 60, TimeUnit.SECONDS); waitingConsumer1.waitUntil(frame -> frame.getUtf8String().contains("org.lmdbjava.LmdbNativeException"), 60, TimeUnit.SECONDS);
} catch (TimeoutException e) { } catch (TimeoutException e) {
// Sometimes crash doesn't work // Sometimes crash doesn't work
Log.info("Failed to crash: " + testInfo.getDisplayName()); Log.info("Failed to crash: " + testInfo.getDisplayName());
@@ -322,7 +322,7 @@ public class LazyFsIT {
Log.info("Killing"); Log.info("Killing");
lazyFs2.crash(); lazyFs2.crash();
container1.execInContainer("/bin/sh", "-c", "touch /tmp/stopprinting1"); container1.execInContainer("/bin/sh", "-c", "touch /tmp/stopprinting1");
waitingConsumer2.waitUntil(frame -> frame.getUtf8String().contains("Caused by: org.lmdbjava"), 60, TimeUnit.SECONDS); waitingConsumer2.waitUntil(frame -> frame.getUtf8String().contains("org.lmdbjava.LmdbNativeException"), 60, TimeUnit.SECONDS);
var client = DockerClientFactory.instance().client(); var client = DockerClientFactory.instance().client();
client.killContainerCmd(container2.getContainerId()).exec(); client.killContainerCmd(container2.getContainerId()).exec();
container2.stop(); container2.stop();
@@ -366,7 +366,7 @@ public class LazyFsIT {
} }
container1.execInContainer("/bin/sh", "-c", "touch /tmp/stopprinting2"); container1.execInContainer("/bin/sh", "-c", "touch /tmp/stopprinting2");
try { try {
waitingConsumer2.waitUntil(frame -> frame.getUtf8String().contains("Caused by: org.lmdbjava"), 60, TimeUnit.SECONDS); waitingConsumer2.waitUntil(frame -> frame.getUtf8String().contains("org.lmdbjava.LmdbNativeException"), 60, TimeUnit.SECONDS);
} catch (TimeoutException e) { } catch (TimeoutException e) {
// Sometimes crash doesn't work // Sometimes crash doesn't work
Log.info("Failed to crash: " + testInfo.getDisplayName()); Log.info("Failed to crash: " + testInfo.getDisplayName());
@@ -409,7 +409,7 @@ public class LazyFsIT {
Log.info("Killing"); Log.info("Killing");
lazyFs2.crash(); lazyFs2.crash();
container1.execInContainer("/bin/sh", "-c", "touch /tmp/stopprinting1"); container1.execInContainer("/bin/sh", "-c", "touch /tmp/stopprinting1");
waitingConsumer2.waitUntil(frame -> frame.getUtf8String().contains("Caused by: org.lmdbjava"), 60, TimeUnit.SECONDS); waitingConsumer2.waitUntil(frame -> frame.getUtf8String().contains("org.lmdbjava.LmdbNativeException"), 60, TimeUnit.SECONDS);
var client = DockerClientFactory.instance().client(); var client = DockerClientFactory.instance().client();
client.killContainerCmd(container2.getContainerId()).exec(); client.killContainerCmd(container2.getContainerId()).exec();
container2.stop(); container2.stop();
@@ -453,7 +453,7 @@ public class LazyFsIT {
} }
container1.execInContainer("/bin/sh", "-c", "touch /tmp/stopprinting2"); container1.execInContainer("/bin/sh", "-c", "touch /tmp/stopprinting2");
try { try {
waitingConsumer2.waitUntil(frame -> frame.getUtf8String().contains("Caused by: org.lmdbjava"), 60, TimeUnit.SECONDS); waitingConsumer2.waitUntil(frame -> frame.getUtf8String().contains("org.lmdbjava.LmdbNativeException"), 60, TimeUnit.SECONDS);
} catch (TimeoutException e) { } catch (TimeoutException e) {
// Sometimes crash doesn't work // Sometimes crash doesn't work
Log.info("Failed to crash: " + testInfo.getDisplayName()); Log.info("Failed to crash: " + testInfo.getDisplayName());

View File

@@ -1,11 +1,10 @@
package com.usatiuk.objects.iterators; package com.usatiuk.objects.iterators;
import com.usatiuk.utils.AutoCloseableNoThrow;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import java.util.Iterator; import java.util.Iterator;
public interface CloseableKvIterator<K extends Comparable<? super K>, V> extends Iterator<Pair<K, V>>, AutoCloseableNoThrow { public interface CloseableKvIterator<K extends Comparable<? super K>, V> extends Iterator<Pair<K, V>>, AutoCloseable {
K peekNextKey(); K peekNextKey();
void skip(); void skip();
@@ -21,4 +20,7 @@ public interface CloseableKvIterator<K extends Comparable<? super K>, V> extends
default CloseableKvIterator<K, V> reversed() { default CloseableKvIterator<K, V> reversed() {
return new ReversedKvIterator<K, V>(this); return new ReversedKvIterator<K, V>(this);
} }
@Override
void close();
} }

View File

@@ -3,19 +3,20 @@ package com.usatiuk.objects.snapshot;
import com.usatiuk.objects.iterators.CloseableKvIterator; import com.usatiuk.objects.iterators.CloseableKvIterator;
import com.usatiuk.objects.iterators.IteratorStart; import com.usatiuk.objects.iterators.IteratorStart;
import com.usatiuk.objects.iterators.MaybeTombstone; import com.usatiuk.objects.iterators.MaybeTombstone;
import com.usatiuk.objects.iterators.Tombstone;
import com.usatiuk.utils.AutoCloseableNoThrow;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Stream;
public interface Snapshot<K extends Comparable<K>, V> extends AutoCloseableNoThrow { public interface Snapshot<K extends Comparable<K>, V> extends AutoCloseable {
List<CloseableKvIterator<K, MaybeTombstone<V>>> getIterator(IteratorStart start, K key); List<CloseableKvIterator<K, MaybeTombstone<V>>> getIterator(IteratorStart start, K key);
@Nonnull @Nonnull
Optional<V> readObject(K name); Optional<V> readObject(K name);
long id(); long id();
@Override
void close();
} }

View File

@@ -178,12 +178,6 @@ public class LmdbObjectPersistentStore implements ObjectPersistentStore {
return _root.toFile().getFreeSpace(); return _root.toFile().getFreeSpace();
} }
@Override
public long getUsableSpace() {
verifyReady();
return _root.toFile().getUsableSpace();
}
private class LmdbKvIterator extends ReversibleKvIterator<JObjectKey, MaybeTombstone<ByteBuffer>> { private class LmdbKvIterator extends ReversibleKvIterator<JObjectKey, MaybeTombstone<ByteBuffer>> {
private static final Cleaner CLEANER = Cleaner.create(); private static final Cleaner CLEANER = Cleaner.create();
private final Txn<ByteBuffer> _txn; // Managed by the snapshot private final Txn<ByteBuffer> _txn; // Managed by the snapshot

View File

@@ -76,9 +76,4 @@ public class MemoryObjectPersistentStore implements ObjectPersistentStore {
public long getFreeSpace() { public long getFreeSpace() {
return 0; return 0;
} }
@Override
public long getUsableSpace() {
return 0;
}
} }

View File

@@ -18,6 +18,4 @@ public interface ObjectPersistentStore {
long getTotalSpace(); long getTotalSpace();
long getFreeSpace(); long getFreeSpace();
long getUsableSpace();
} }

View File

@@ -5,14 +5,13 @@ import com.usatiuk.objects.JDataVersionedWrapper;
import com.usatiuk.objects.JObjectKey; import com.usatiuk.objects.JObjectKey;
import com.usatiuk.objects.iterators.*; import com.usatiuk.objects.iterators.*;
import com.usatiuk.objects.snapshot.Snapshot; import com.usatiuk.objects.snapshot.Snapshot;
import com.usatiuk.utils.AutoCloseableNoThrow;
import com.usatiuk.utils.ListUtils; import com.usatiuk.utils.ListUtils;
import io.quarkus.logging.Log; import io.quarkus.logging.Log;
import org.apache.commons.lang3.tuple.Pair; import org.apache.commons.lang3.tuple.Pair;
import java.util.*; import java.util.*;
class TransactionImpl implements Transaction, AutoCloseableNoThrow { class TransactionImpl implements Transaction, AutoCloseable {
private final Map<JObjectKey, Optional<JDataVersionedWrapper>> _readSet = new HashMap<>(); private final Map<JObjectKey, Optional<JDataVersionedWrapper>> _readSet = new HashMap<>();
private final NavigableMap<JObjectKey, TxRecord.TxObjectRecord<?>> _writes = new TreeMap<>(); private final NavigableMap<JObjectKey, TxRecord.TxObjectRecord<?>> _writes = new TreeMap<>();
private final List<Runnable> _onCommit = new LinkedList<>(); private final List<Runnable> _onCommit = new LinkedList<>();

View File

@@ -1,6 +1,5 @@
package com.usatiuk.objects.transaction; package com.usatiuk.objects.transaction;
import com.usatiuk.utils.VoidFn;
import io.quarkus.logging.Log; import io.quarkus.logging.Log;
import java.util.function.Supplier; import java.util.function.Supplier;
@@ -41,9 +40,9 @@ public interface TransactionManager {
} }
} }
default TransactionHandle runTries(VoidFn fn, int tries, boolean nest) { default TransactionHandle runTries(Runnable fn, int tries, boolean nest) {
if (!nest && current() != null) { if (!nest && current() != null) {
fn.apply(); fn.run();
return new TransactionHandle() { return new TransactionHandle() {
@Override @Override
public void onFlush(Runnable runnable) { public void onFlush(Runnable runnable) {
@@ -56,7 +55,7 @@ public interface TransactionManager {
begin(); begin();
boolean commit = false; boolean commit = false;
try { try {
fn.apply(); fn.run();
commit = true; commit = true;
var ret = commit(); var ret = commit();
return ret; return ret;
@@ -80,11 +79,11 @@ public interface TransactionManager {
return runTries(supplier, tries, false); return runTries(supplier, tries, false);
} }
default TransactionHandle runTries(VoidFn fn, int tries) { default TransactionHandle runTries(Runnable fn, int tries) {
return runTries(fn, tries, false); return runTries(fn, tries, false);
} }
default TransactionHandle run(VoidFn fn, boolean nest) { default TransactionHandle run(Runnable fn, boolean nest) {
return runTries(fn, 10, nest); return runTries(fn, 10, nest);
} }
@@ -92,7 +91,7 @@ public interface TransactionManager {
return runTries(supplier, 10, nest); return runTries(supplier, 10, nest);
} }
default TransactionHandle run(VoidFn fn) { default TransactionHandle run(Runnable fn) {
return run(fn, false); return run(fn, false);
} }
@@ -100,7 +99,7 @@ public interface TransactionManager {
return run(supplier, false); return run(supplier, false);
} }
default void executeTx(VoidFn fn) { default void executeTx(Runnable fn) {
run(fn, false); run(fn, false);
} }

View File

@@ -1,7 +0,0 @@
package com.usatiuk.utils;
@FunctionalInterface
public interface VoidFn {
void apply();
}

View File

@@ -1,7 +0,0 @@
package com.usatiuk.utils;
@FunctionalInterface
public interface VoidFnThrows {
void apply() throws Throwable;
}