Server: separate JMapRefcounterTxHook

This commit is contained in:
2025-03-08 14:56:47 +01:00
parent 6e14e05c4a
commit 46a67b61e5
2 changed files with 63 additions and 29 deletions

View File

@@ -1,6 +1,5 @@
package com.usatiuk.dhfs.objects;
import com.usatiuk.dhfs.objects.jmap.JMapEntry;
import com.usatiuk.dhfs.objects.transaction.Transaction;
import io.quarkus.logging.Log;
import jakarta.enterprise.context.ApplicationScoped;
@@ -23,18 +22,6 @@ public class RefcounterTxHook implements PreCommitTxHook {
@Override
public void onChange(JObjectKey key, JData old, JData cur) {
if (cur instanceof JMapEntry<?> me) {
var oldMe = (JMapEntry<?>) old;
var oldRef = oldMe.ref();
var curRef = me.ref();
var referencedOld = getRef(oldRef);
curTx.put(referencedOld.withRefsFrom(referencedOld.refsFrom().minus(key)));
var referencedCur = getRef(curRef);
curTx.put(referencedCur.withRefsFrom(referencedCur.refsFrom().plus(key)));
Log.tracev("Removed ref from {0} to {1}, added ref to {2}", key, oldRef, curRef);
return;
}
if (!(cur instanceof JDataRefcounted refCur)) {
return;
}
@@ -62,14 +49,6 @@ public class RefcounterTxHook implements PreCommitTxHook {
@Override
public void onCreate(JObjectKey key, JData cur) {
if (cur instanceof JMapEntry<?> me) {
var curRef = me.ref();
var referencedCur = getRef(curRef);
curTx.put(referencedCur.withRefsFrom(referencedCur.refsFrom().plus(key)));
Log.tracev("Added ref from {0} to {1}", key, curRef);
return;
}
if (!(cur instanceof JDataRefcounted refCur)) {
return;
}
@@ -83,14 +62,6 @@ public class RefcounterTxHook implements PreCommitTxHook {
@Override
public void onDelete(JObjectKey key, JData cur) {
if (cur instanceof JMapEntry<?> me) {
var oldRef = me.ref();
var referencedOld = getRef(oldRef);
curTx.put(referencedOld.withRefsFrom(referencedOld.refsFrom().minus(key)));
Log.tracev("Removed ref from {0} to {1}", key, oldRef);
return;
}
if (!(cur instanceof JDataRefcounted refCur)) {
return;
}

View File

@@ -0,0 +1,63 @@
package com.usatiuk.dhfs.objects.jmap;
import com.usatiuk.dhfs.objects.*;
import com.usatiuk.dhfs.objects.transaction.Transaction;
import io.quarkus.logging.Log;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
@ApplicationScoped
public class JMapRefcounterTxHook implements PreCommitTxHook {
@Inject
Transaction curTx;
private JDataRefcounted getRef(JObjectKey key) {
var found = curTx.get(JDataRefcounted.class, key).orElse(null);
if (found != null) {
return found;
}
return new RemoteObjectMeta(key);
}
@Override
public void onChange(JObjectKey key, JData old, JData cur) {
if (!(cur instanceof JMapEntry<?> me)) {
return;
}
var oldMe = (JMapEntry<?>) old;
var oldRef = oldMe.ref();
var curRef = me.ref();
var referencedOld = getRef(oldRef);
curTx.put(referencedOld.withRefsFrom(referencedOld.refsFrom().minus(key)));
var referencedCur = getRef(curRef);
curTx.put(referencedCur.withRefsFrom(referencedCur.refsFrom().plus(key)));
Log.tracev("Removed ref from {0} to {1}, added ref to {2}", key, oldRef, curRef);
}
@Override
public void onCreate(JObjectKey key, JData cur) {
if (!(cur instanceof JMapEntry<?> me)) {
return;
}
var curRef = me.ref();
var referencedCur = getRef(curRef);
curTx.put(referencedCur.withRefsFrom(referencedCur.refsFrom().plus(key)));
Log.tracev("Added ref from {0} to {1}", key, curRef);
}
@Override
public void onDelete(JObjectKey key, JData cur) {
if (!(cur instanceof JMapEntry<?> me)) {
return;
}
var oldRef = me.ref();
var referencedOld = getRef(oldRef);
curTx.put(referencedOld.withRefsFrom(referencedOld.refsFrom().minus(key)));
Log.tracev("Removed ref from {0} to {1}", key, oldRef);
}
}