mirror of
https://github.com/usatiuk/dhfs.git
synced 2025-10-28 20:47:49 +01:00
tests fix
check data instance, so it fails if it's changed
This commit is contained in:
@@ -186,6 +186,7 @@ public class JObjectManager {
|
||||
|
||||
var current = new LinkedHashMap<JObjectKey, TxRecord.TxObjectRecord<?>>();
|
||||
var dependenciesLocked = new LinkedHashMap<JObjectKey, TransactionObjectLocked<?>>();
|
||||
Map<JObjectKey, TransactionObject<?>> reads;
|
||||
var toUnlock = new ArrayList<AutoCloseableNoThrow>();
|
||||
|
||||
Consumer<JObjectKey> addDependency =
|
||||
@@ -220,8 +221,6 @@ public class JObjectManager {
|
||||
try {
|
||||
Collection<TxRecord.TxObjectRecord<?>> drained;
|
||||
while (!(drained = tx.drainNewWrites()).isEmpty()) {
|
||||
var toLock = new ArrayList<JObjectKey>();
|
||||
|
||||
Log.trace("Commit iteration with " + drained.size() + " records");
|
||||
|
||||
drained.stream()
|
||||
@@ -249,7 +248,8 @@ public class JObjectManager {
|
||||
}
|
||||
}
|
||||
|
||||
for (var read : tx.reads().entrySet()) {
|
||||
reads = tx.reads();
|
||||
for (var read : reads.entrySet()) {
|
||||
addDependency.accept(read.getKey());
|
||||
if (read.getValue() instanceof TransactionObjectLocked<?> locked) {
|
||||
toUnlock.add(locked.lock);
|
||||
@@ -257,13 +257,23 @@ public class JObjectManager {
|
||||
}
|
||||
|
||||
for (var dep : dependenciesLocked.entrySet()) {
|
||||
Log.trace("Checking dependency " + dep.getKey());
|
||||
|
||||
if (dep.getValue().data().isEmpty()) continue;
|
||||
if (dep.getValue().data().isEmpty()) {
|
||||
Log.trace("Checking dependency " + dep.getKey() + " - not found");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (dep.getValue().data().get().version() >= tx.getId()) {
|
||||
Log.trace("Checking dependency " + dep.getKey() + " - newer than");
|
||||
throw new IllegalStateException("Serialization hazard: " + dep.getValue().data().get().version() + " vs " + tx.getId());
|
||||
}
|
||||
|
||||
var read = reads.get(dep.getKey());
|
||||
if (read != null && read.data().orElse(null) != dep.getValue().data().orElse(null)) {
|
||||
Log.trace("Checking dependency " + dep.getKey() + " - read mismatch");
|
||||
throw new IllegalStateException("Read mismatch for " + dep.getKey() + ": " + read + " vs " + dep.getValue());
|
||||
}
|
||||
|
||||
Log.trace("Checking dependency " + dep.getKey() + " - ok");
|
||||
}
|
||||
|
||||
Log.tracef("Flushing transaction %d to storage", tx.getId());
|
||||
|
||||
@@ -158,6 +158,7 @@ public class ObjectsTest {
|
||||
Log.warn("Thread 1");
|
||||
txm.begin();
|
||||
barrier.await();
|
||||
var got = curTx.get(Parent.class, new JObjectKey("Parent2")).orElse(null);
|
||||
var newParent = new Parent(JObjectKey.of("Parent2"), "John");
|
||||
curTx.put(newParent);
|
||||
Log.warn("Thread 1 commit");
|
||||
@@ -173,6 +174,7 @@ public class ObjectsTest {
|
||||
Log.warn("Thread 2");
|
||||
txm.begin();
|
||||
barrier.await();
|
||||
var got = curTx.get(Parent.class, new JObjectKey("Parent2")).orElse(null);
|
||||
var newParent = new Parent(JObjectKey.of("Parent2"), "John2");
|
||||
curTx.put(newParent);
|
||||
Log.warn("Thread 2 commit");
|
||||
|
||||
Reference in New Issue
Block a user