diff --git a/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/invalidation/IndexUpdateOp.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/invalidation/IndexUpdateOp.java index 6c2f432d..9688d247 100644 --- a/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/invalidation/IndexUpdateOp.java +++ b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/invalidation/IndexUpdateOp.java @@ -1,13 +1,14 @@ package com.usatiuk.dhfs.invalidation; import com.usatiuk.dhfs.peersync.PeerId; +import com.usatiuk.dhfs.remoteobj.JDataRemoteDto; import com.usatiuk.objects.JObjectKey; import org.pcollections.PMap; import java.util.Collection; import java.util.List; -public record IndexUpdateOp(JObjectKey key, PMap changelog) implements Op { +public record IndexUpdateOp(JObjectKey key, PMap changelog, JDataRemoteDto data) implements Op { @Override public Collection getEscapedRefs() { return List.of(key); diff --git a/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/invalidation/RemoteObjectMetaOpExtractor.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/invalidation/RemoteObjectMetaOpExtractor.java index 3744fb87..e470e07b 100644 --- a/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/invalidation/RemoteObjectMetaOpExtractor.java +++ b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/invalidation/RemoteObjectMetaOpExtractor.java @@ -1,10 +1,14 @@ package com.usatiuk.dhfs.invalidation; import com.usatiuk.dhfs.peersync.PeerId; +import com.usatiuk.dhfs.remoteobj.JDataRemoteDto; +import com.usatiuk.dhfs.remoteobj.JDataRemotePush; import com.usatiuk.dhfs.remoteobj.RemoteObjectMeta; import com.usatiuk.dhfs.remoteobj.RemoteTransaction; +import com.usatiuk.dhfs.syncmap.DtoMapperService; import com.usatiuk.objects.transaction.Transaction; import com.usatiuk.objects.transaction.TransactionManager; +import io.quarkus.logging.Log; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import org.apache.commons.lang3.tuple.Pair; @@ -19,11 +23,22 @@ public class RemoteObjectMetaOpExtractor implements OpExtractor, Runnable> extractOps(RemoteObjectMeta data, PeerId peerId) { return txm.run(() -> { - return Pair.of(List.of(new IndexUpdateOp(data.key(), data.changelog())), () -> { + JDataRemoteDto dto = + data.knownType().isAnnotationPresent(JDataRemotePush.class) + ? remoteTransaction.getData(data.knownType(), data.key()) + .map(d -> dtoMapperService.toDto(d, d.dtoClass())).orElse(null) + : null; + + if (data.knownType().isAnnotationPresent(JDataRemotePush.class) && dto == null) { + Log.warnv("Failed to get data for push {0} of type {1}", data.key(), data.knownType()); + } + return Pair.of(List.of(new IndexUpdateOp(data.key(), data.changelog(), dto)), () -> { }); }); } diff --git a/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/peersync/PeerInfo.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/peersync/PeerInfo.java index 9d5f7b36..1eca8b79 100644 --- a/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/peersync/PeerInfo.java +++ b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/peersync/PeerInfo.java @@ -4,10 +4,12 @@ import com.google.protobuf.ByteString; import com.usatiuk.dhfs.peertrust.CertificateTools; import com.usatiuk.dhfs.remoteobj.JDataRemote; import com.usatiuk.dhfs.remoteobj.JDataRemoteDto; +import com.usatiuk.dhfs.remoteobj.JDataRemotePush; import com.usatiuk.objects.JObjectKey; import java.security.cert.X509Certificate; +@JDataRemotePush public record PeerInfo(JObjectKey key, PeerId id, ByteString cert) implements JDataRemote, JDataRemoteDto { public PeerInfo(PeerId id, byte[] cert) { this(id.toJObjectKey(), id, ByteString.copyFrom(cert)); diff --git a/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/remoteobj/JDataRemotePush.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/remoteobj/JDataRemotePush.java new file mode 100644 index 00000000..6f255606 --- /dev/null +++ b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/remoteobj/JDataRemotePush.java @@ -0,0 +1,11 @@ +package com.usatiuk.dhfs.remoteobj; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface JDataRemotePush { +}