diff --git a/.github/workflows/server.yml b/.github/workflows/server.yml
index 4de23cbb..780e4701 100644
--- a/.github/workflows/server.yml
+++ b/.github/workflows/server.yml
@@ -57,7 +57,7 @@ jobs:
- uses: actions/upload-artifact@v4
with:
name: DHFS Server Package
- path: dhfs-parent/server/target/quarkus-app
+ path: dhfs-parent/dhfs-app/target/quarkus-app
- uses: actions/upload-artifact@v4
if: ${{ always() }}
diff --git a/dhfs-parent/.run/Main 2.run.xml b/dhfs-parent/.run/Main 2.run.xml
index 414014c4..795d2286 100644
--- a/dhfs-parent/.run/Main 2.run.xml
+++ b/dhfs-parent/.run/Main 2.run.xml
@@ -1,17 +1,16 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/dhfs-parent/.run/Main.run.xml b/dhfs-parent/.run/Main.run.xml
index 21dbd735..acf26dc4 100644
--- a/dhfs-parent/.run/Main.run.xml
+++ b/dhfs-parent/.run/Main.run.xml
@@ -1,18 +1,16 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/dhfs-parent/autoprotomap/deployment/pom.xml b/dhfs-parent/autoprotomap/deployment/pom.xml
deleted file mode 100644
index 13f90a9d..00000000
--- a/dhfs-parent/autoprotomap/deployment/pom.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-
-
- 4.0.0
-
-
- com.usatiuk
- autoprotomap-parent
- 1.0-SNAPSHOT
-
- autoprotomap-deployment
- Autoprotomap - Deployment
-
-
-
- io.quarkus
- quarkus-arc-deployment
-
-
- com.usatiuk
- autoprotomap
- ${project.version}
-
-
- io.quarkus
- quarkus-junit5-internal
- test
-
-
- io.quarkus
- quarkus-grpc-deployment
-
-
- org.apache.commons
- commons-collections4
-
-
-
-
-
-
- maven-compiler-plugin
-
-
- default-compile
-
-
-
- io.quarkus
- quarkus-extension-processor
- ${quarkus.platform.version}
-
-
-
-
-
-
-
-
-
diff --git a/dhfs-parent/autoprotomap/deployment/src/main/java/com/usatiuk/autoprotomap/deployment/AutoprotomapProcessor.java b/dhfs-parent/autoprotomap/deployment/src/main/java/com/usatiuk/autoprotomap/deployment/AutoprotomapProcessor.java
deleted file mode 100644
index d3e574eb..00000000
--- a/dhfs-parent/autoprotomap/deployment/src/main/java/com/usatiuk/autoprotomap/deployment/AutoprotomapProcessor.java
+++ /dev/null
@@ -1,78 +0,0 @@
-package com.usatiuk.autoprotomap.deployment;
-
-import com.usatiuk.autoprotomap.runtime.ProtoMirror;
-import com.usatiuk.autoprotomap.runtime.ProtoSerializer;
-import io.quarkus.arc.deployment.GeneratedBeanBuildItem;
-import io.quarkus.arc.deployment.GeneratedBeanGizmoAdaptor;
-import io.quarkus.deployment.annotations.BuildProducer;
-import io.quarkus.deployment.annotations.BuildStep;
-import io.quarkus.deployment.builditem.ApplicationIndexBuildItem;
-import io.quarkus.gizmo.ClassCreator;
-import io.quarkus.gizmo.SignatureBuilder;
-import jakarta.inject.Singleton;
-import org.jboss.jandex.ClassType;
-import org.jboss.jandex.Type;
-
-class AutoprotomapProcessor {
- @BuildStep
- ProtoIndexBuildItem index(ApplicationIndexBuildItem jandex) {
- var ret = new ProtoIndexBuildItem();
- var annot = jandex.getIndex().getAnnotations(ProtoMirror.class);
- for (var a : annot) {
- var protoTarget = jandex.getIndex().getClassByName(((ClassType) a.value().value()).name());
-// if (!messageImplementors.contains(protoTarget))
-// throw new IllegalArgumentException("Expected " + protoTarget + " to be a proto message");
- System.out.println("Found: " + a.name().toString() + " at " + protoTarget.name().toString() + " of " + a.target().asClass().name().toString());
- ret.protoMsgToObj.put(protoTarget, a.target().asClass());
- }
- return ret;
- }
-
- @BuildStep
- void generateProtoSerializer(ApplicationIndexBuildItem jandex,
- ProtoIndexBuildItem protoIndex,
- BuildProducer generatedClasses) {
- try {
- for (var o : protoIndex.protoMsgToObj.entrySet()) {
- System.out.println("Generating " + o.getKey().toString() + " -> " + o.getValue().toString());
- var gizmoAdapter = new GeneratedBeanGizmoAdaptor(generatedClasses);
-
- var msgType = io.quarkus.gizmo.Type.classType(o.getKey().name());
- var objType = io.quarkus.gizmo.Type.classType(o.getValue().name());
-
- var type = io.quarkus.gizmo.Type.ParameterizedType.parameterizedType(
- io.quarkus.gizmo.Type.classType(ProtoSerializer.class),
- msgType, objType);
-
- var msgJType = Type.create(o.getKey().name(), Type.Kind.CLASS);
- var objJType = Type.create(o.getValue().name(), Type.Kind.CLASS);
-
- try (ClassCreator classCreator = ClassCreator.builder()
- .className("com.usatiuk.autoprotomap.generated.for" + o.getKey().simpleName())
- .signature(SignatureBuilder.forClass().addInterface(type))
- .classOutput(gizmoAdapter)
- .setFinal(true)
- .build()) {
- classCreator.addAnnotation(Singleton.class);
-
- var generator = new ProtoSerializerGenerator(
- jandex.getIndex(),
- protoIndex,
- classCreator,
- msgJType,
- objJType
- );
-
- generator.generate();
- }
- }
- } catch (Throwable e) {
- StringBuilder sb = new StringBuilder();
- sb.append(e + "\n");
- for (var el : e.getStackTrace()) {
- sb.append(el.toString() + "\n");
- }
- System.out.println(sb);
- }
- }
-}
diff --git a/dhfs-parent/autoprotomap/deployment/src/main/java/com/usatiuk/autoprotomap/deployment/Constants.java b/dhfs-parent/autoprotomap/deployment/src/main/java/com/usatiuk/autoprotomap/deployment/Constants.java
deleted file mode 100644
index b3f4ad41..00000000
--- a/dhfs-parent/autoprotomap/deployment/src/main/java/com/usatiuk/autoprotomap/deployment/Constants.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package com.usatiuk.autoprotomap.deployment;
-
-public class Constants {
- public static final String FIELD_PREFIX = "_";
-
- public static String capitalize(String str) {
- return str.substring(0, 1).toUpperCase() + str.substring(1);
- }
-
- public static String stripPrefix(String str, String prefix) {
- if (str.startsWith(prefix)) {
- return str.substring(prefix.length());
- }
- return str;
- }
-
-
-}
diff --git a/dhfs-parent/autoprotomap/deployment/src/main/java/com/usatiuk/autoprotomap/deployment/Effect.java b/dhfs-parent/autoprotomap/deployment/src/main/java/com/usatiuk/autoprotomap/deployment/Effect.java
deleted file mode 100644
index 1f916ecb..00000000
--- a/dhfs-parent/autoprotomap/deployment/src/main/java/com/usatiuk/autoprotomap/deployment/Effect.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package com.usatiuk.autoprotomap.deployment;
-
-@FunctionalInterface
-public interface Effect {
- void apply();
-}
diff --git a/dhfs-parent/autoprotomap/deployment/src/main/java/com/usatiuk/autoprotomap/deployment/ProtoIndexBuildItem.java b/dhfs-parent/autoprotomap/deployment/src/main/java/com/usatiuk/autoprotomap/deployment/ProtoIndexBuildItem.java
deleted file mode 100644
index 14aa5a18..00000000
--- a/dhfs-parent/autoprotomap/deployment/src/main/java/com/usatiuk/autoprotomap/deployment/ProtoIndexBuildItem.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.usatiuk.autoprotomap.deployment;
-
-import io.quarkus.builder.item.SimpleBuildItem;
-import org.apache.commons.collections4.BidiMap;
-import org.apache.commons.collections4.bidimap.DualHashBidiMap;
-import org.jboss.jandex.ClassInfo;
-
-public final class ProtoIndexBuildItem extends SimpleBuildItem {
- BidiMap protoMsgToObj = new DualHashBidiMap<>();
-}
diff --git a/dhfs-parent/autoprotomap/deployment/src/main/java/com/usatiuk/autoprotomap/deployment/ProtoSerializerGenerator.java b/dhfs-parent/autoprotomap/deployment/src/main/java/com/usatiuk/autoprotomap/deployment/ProtoSerializerGenerator.java
deleted file mode 100644
index 41e8d90d..00000000
--- a/dhfs-parent/autoprotomap/deployment/src/main/java/com/usatiuk/autoprotomap/deployment/ProtoSerializerGenerator.java
+++ /dev/null
@@ -1,342 +0,0 @@
-package com.usatiuk.autoprotomap.deployment;
-
-import com.google.protobuf.ByteString;
-import com.google.protobuf.Message;
-import com.usatiuk.autoprotomap.runtime.ProtoSerializer;
-import io.quarkus.gizmo.*;
-import jakarta.inject.Inject;
-import org.apache.commons.lang3.tuple.Pair;
-import org.jboss.jandex.*;
-import org.jboss.jandex.Type;
-import org.objectweb.asm.Opcodes;
-
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.Objects;
-import java.util.function.Consumer;
-import java.util.function.Function;
-import java.util.function.IntConsumer;
-import java.util.function.Supplier;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import static com.usatiuk.autoprotomap.deployment.Constants.*;
-
-public class ProtoSerializerGenerator {
- private final Index index;
- private final ProtoIndexBuildItem protoIndex;
- private final ClassCreator classCreator;
- private final HashSet> externalSerializers = new HashSet<>();
- private final Type topMessageType;
- private final Type topObjectType;
-
- public ProtoSerializerGenerator(Index index, ProtoIndexBuildItem protoIndex, ClassCreator classCreator, Type topMessageType, Type topObjectType) {
- this.index = index;
- this.protoIndex = protoIndex;
- this.classCreator = classCreator;
- this.topMessageType = topMessageType;
- this.topObjectType = topObjectType;
- }
-
- private FieldDescriptor getOutsideSerializer(ClassInfo messageClass, ClassInfo objectClass) {
- var name = messageClass.name().withoutPackagePrefix() + objectClass.name().withoutPackagePrefix() + "serializer";
- var msgType = io.quarkus.gizmo.Type.classType(messageClass.name());
- var objType = io.quarkus.gizmo.Type.classType(objectClass.name());
- var type = io.quarkus.gizmo.Type.ParameterizedType.parameterizedType(
- io.quarkus.gizmo.Type.classType(ProtoSerializer.class),
- msgType, objType);
- var sig = SignatureBuilder.forField().setType(type).build();
- var fd = FieldDescriptor.of(classCreator.getClassName(), name, ProtoSerializer.class);
- if (externalSerializers.add(Pair.of(messageClass, objectClass))) {
- var fc = classCreator.getFieldCreator(fd);
- fc.addAnnotation(Inject.class);
- fc.setSignature(sig);
- fc.setModifiers(Opcodes.ACC_PUBLIC);
- }
- return fd;
- }
-
- private void traverseHierarchy(Index index, ClassInfo klass, Consumer visitor) {
- var cur = klass;
- while (true) {
- visitor.accept(cur);
-
- var next = cur.superClassType().name();
- if (next.equals(DotName.OBJECT_NAME) || next.equals(DotName.RECORD_NAME)) break;
- cur = index.getClassByName(next);
- }
- }
-
- private ArrayList findAllFields(Index index, ClassInfo klass) {
- ArrayList ret = new ArrayList<>();
- traverseHierarchy(index, klass, cur -> {
- ret.addAll(cur.fields());
- });
- return ret;
- }
-
- private void generateBuilderUse(BytecodeCreator bytecodeCreator,
- ResultHandle builder,
- Type messageType, Type objectType,
- ResultHandle object) {
- var builderType = Type.create(DotName.createComponentized(messageType.name(), "Builder", true), Type.Kind.CLASS);
-
- var objectClass = index.getClassByName(objectType.name().toString());
-
- Function getterGetter = objectClass.isRecord()
- ? Function.identity()
- : s -> "get" + capitalize(stripPrefix(s, FIELD_PREFIX));
-
- for (var f : findAllFields(index, objectClass)) {
- var consideredFieldName = stripPrefix(f.name(), FIELD_PREFIX);
-
- Supplier get = () -> {
- if ((f.flags() & Opcodes.ACC_PUBLIC) != 0)
- return bytecodeCreator.readInstanceField(f, object);
- else {
- var fieldGetter = getterGetter.apply(f.name());
- return bytecodeCreator.invokeVirtualMethod(
- MethodDescriptor.ofMethod(objectType.toString(), fieldGetter, f.type().name().toString()), object);
- }
- };
-
- Effect doSimpleCopy = () -> {
- var setter = MethodDescriptor.ofMethod(builderType.name().toString(), "set" + capitalize(consideredFieldName),
- builderType.name().toString(), f.type().toString());
-
- var val = get.get();
- bytecodeCreator.invokeVirtualMethod(setter, builder, val);
- };
-
- switch (f.type().kind()) {
- case CLASS -> {
- if (f.type().equals(Type.create(String.class)) || f.type().equals(Type.create(ByteString.class))) {
- doSimpleCopy.apply();
- } else {
- var builderGetter = "get" + capitalize(f.name()) + "Builder";
- var protoType = protoIndex.protoMsgToObj.inverseBidiMap().get(index.getClassByName(f.type().name()));
- var nestedBuilderType = Type.create(DotName.createComponentized(protoType.name(), "Builder", true), Type.Kind.CLASS);
- var nestedBuilder = bytecodeCreator.invokeVirtualMethod(
- MethodDescriptor.ofMethod(builderType.toString(), builderGetter, nestedBuilderType.name().toString()), builder);
-
- var val = get.get();
-
- generateBuilderUse(bytecodeCreator, nestedBuilder, Type.create(protoType.name(), Type.Kind.CLASS), f.type(), val);
- }
- }
- case PRIMITIVE -> {
- doSimpleCopy.apply();
- }
- case WILDCARD_TYPE -> throw new UnsupportedOperationException("Wildcards not supported yet");
- case PARAMETERIZED_TYPE ->
- throw new UnsupportedOperationException("Parametrized types not supported yet");
- case ARRAY -> throw new UnsupportedOperationException("Arrays not supported yet");
- default -> throw new IllegalStateException("Unexpected type: " + f.type());
- }
- }
- }
-
- private ResultHandle generateConstructorUse(
- BytecodeCreator bytecodeCreator,
- ClassCreator classCreator,
- Type messageType, Type objectType,
- ResultHandle message
- ) {
- var constructor = findAllArgsConstructor(index, index.getClassByName(objectType.name()));
- if (constructor == null) {
- throw new IllegalStateException("No constructor found for type: " + objectType.name());
- }
- var argMap = new ResultHandle[constructor.parametersCount()];
-
- for (int i = 0; i < argMap.length; i++) {
- var type = constructor.parameterType(i);
- var strippedName = stripPrefix(constructor.parameterName(i), FIELD_PREFIX);
-
- IntConsumer doSimpleCopy = (arg) -> {
- var call = MethodDescriptor.ofMethod(messageType.name().toString(), "get" + capitalize(strippedName),
- type.name().toString());
- argMap[arg] = bytecodeCreator.invokeVirtualMethod(call, message);
- };
-
- switch (type.kind()) {
- case CLASS -> {
- if (type.equals(Type.create(String.class)) || type.equals(Type.create(ByteString.class))) {
- doSimpleCopy.accept(i);
- } else {
- var nestedProtoType = protoIndex.protoMsgToObj.inverseBidiMap().get(index.getClassByName(type.name()));
- var call = MethodDescriptor.ofMethod(messageType.name().toString(), "get" + capitalize(strippedName),
- nestedProtoType.name().toString());
- var nested = bytecodeCreator.invokeVirtualMethod(call, message);
- argMap[i] = generateConstructorUse(bytecodeCreator, classCreator, Type.create(nestedProtoType.name(), Type.Kind.CLASS), type, nested);
- }
- }
- case PRIMITIVE -> {
- doSimpleCopy.accept(i);
- }
- case WILDCARD_TYPE -> throw new UnsupportedOperationException("Wildcards not supported yet");
- case PARAMETERIZED_TYPE ->
- throw new UnsupportedOperationException("Parametrized types not supported yet");
- case ARRAY -> throw new UnsupportedOperationException("Arrays not supported yet");
- default -> throw new IllegalStateException("Unexpected type: " + type);
- }
- }
-
- return bytecodeCreator.newInstance(constructor, argMap);
- }
-
- private MethodInfo findAllArgsConstructor(Index index, ClassInfo klass) {
- ArrayList fields = findAllFields(index, klass);
-
- var fieldCount = fields.size();
- var fieldNames = fields.stream().map(f -> stripPrefix(f.name(), FIELD_PREFIX)).sorted().toList();
- var fieldNameToType = fields.stream().collect(Collectors.toMap(f -> stripPrefix(f.name(), FIELD_PREFIX), FieldInfo::type));
-
- for (var m : klass.constructors()) {
- if (m.parametersCount() != fieldCount) continue;
- var parameterNames = m.parameters().stream().map(n -> stripPrefix(n.name(), FIELD_PREFIX)).sorted().toList();
- if (!Objects.equals(fieldNames, parameterNames)) continue;
-
- for (var p : m.parameters()) {
- if (!Objects.equals(fieldNameToType.get(stripPrefix(p.name(), FIELD_PREFIX)), p.type())) continue;
- }
-
- return m;
- }
-
- return null;
- }
-
- public void generateAbstract() {
- var kids = Stream.concat(index.getAllKnownSubclasses(topObjectType.name()).stream(),
- index.getAllKnownImplementors(topObjectType.name()).stream())
- .filter(k -> !k.isAbstract() && !k.isInterface()).toList();
-
- try (MethodCreator method = classCreator.getMethodCreator("serialize",
- Message.class, Object.class)) {
-
- method.setModifiers(Opcodes.ACC_PUBLIC);
-
- var builderType = Type.create(DotName.createComponentized(topMessageType.name(), "Builder", true), Type.Kind.CLASS);
-
- var builder = method.invokeStaticMethod(MethodDescriptor.ofMethod(topMessageType.name().toString(), "newBuilder", builderType.name().toString()));
-
- var arg = method.getMethodParam(0);
-
- for (var nestedObjClass : kids) {
- System.out.println("Generating " + nestedObjClass.name() + " serializer for " + topObjectType.name());
- var nestedObjType = Type.create(nestedObjClass.name(), Type.Kind.CLASS);
- var nestedMessageClass = protoIndex.protoMsgToObj.inverseBidiMap().get(nestedObjClass);
- boolean doExternalCall = false;
- if (nestedMessageClass == null) {
- var msgInfo = index.getClassByName(topMessageType.name());
- nestedMessageClass = index.getClassByName(msgInfo.method("get" + capitalize(nestedObjType.name().withoutPackagePrefix())).returnType().name());
- doExternalCall = true;
- }
- var nestedMessageType = Type.create(nestedMessageClass.name(), Type.Kind.CLASS);
-
- var statement = method.ifTrue(method.instanceOf(arg, nestedObjClass.name().toString()));
-
- try (var branch = statement.trueBranch()) {
- if (doExternalCall) {
- var externalSerializer = getOutsideSerializer(nestedMessageClass, nestedObjClass);
- var serializerLoaded = branch.readInstanceField(externalSerializer, branch.getThis());
- var serialized = branch.invokeInterfaceMethod(
- MethodDescriptor.ofMethod(ProtoSerializer.class,
- "serialize", Message.class, Object.class),
- serializerLoaded, arg);
- branch.invokeVirtualMethod(MethodDescriptor.ofMethod(builderType.name().toString(),
- "set" + capitalize(nestedObjType.name().withoutPackagePrefix()),
- builderType.name().toString(), nestedMessageType.name().toString()), builder, serialized);
- } else {
- var nestedBuilderType = Type.create(DotName.createComponentized(nestedMessageType.name(), "Builder", true), Type.Kind.CLASS);
- var nestedBuilder = branch.invokeVirtualMethod(MethodDescriptor.ofMethod(builderType.name().toString(),
- "get" + capitalize(nestedObjType.name().withoutPackagePrefix()) + "Builder",
- nestedBuilderType.name().toString()), builder);
- generateBuilderUse(branch, nestedBuilder, nestedMessageType, nestedObjType, arg);
- }
- var result = branch.invokeVirtualMethod(MethodDescriptor.ofMethod(builderType.name().toString(), "build", topMessageType.name().toString()), builder);
- branch.returnValue(result);
- }
- }
- method.throwException(IllegalArgumentException.class, "Unknown object type");
- }
-
- try (MethodCreator method = classCreator.getMethodCreator("deserialize",
- Object.class, Message.class)) {
- method.setModifiers(Opcodes.ACC_PUBLIC);
- var arg = method.getMethodParam(0);
-
- for (var nestedObjClass : kids) {
- System.out.println("Generating " + nestedObjClass.name() + " deserializer for " + topObjectType.name());
- var nestedObjType = Type.create(nestedObjClass.name(), Type.Kind.CLASS);
-
- var nestedMessageClass = protoIndex.protoMsgToObj.inverseBidiMap().get(nestedObjClass);
- boolean doExternalCall = false;
- if (nestedMessageClass == null) {
- var msgInfo = index.getClassByName(topMessageType.name());
- nestedMessageClass = index.getClassByName(msgInfo.method("get" + capitalize(nestedObjType.name().withoutPackagePrefix())).returnType().name());
- doExternalCall = true;
- }
-
- var nestedMessageType = Type.create(nestedMessageClass.name(), Type.Kind.CLASS);
-
- var typeCheck = method.invokeVirtualMethod(MethodDescriptor.ofMethod(topMessageType.name().toString(),
- "has" + capitalize(nestedObjType.name().withoutPackagePrefix()), boolean.class), arg);
-
- var statement = method.ifTrue(typeCheck);
-
- try (var branch = statement.trueBranch()) {
- var nestedMessage = branch.invokeVirtualMethod(MethodDescriptor.ofMethod(topMessageType.name().toString(),
- "get" + capitalize(nestedObjType.name().withoutPackagePrefix()), nestedMessageType.name().toString()), arg);
- if (doExternalCall) {
- var externalSerializer = getOutsideSerializer(nestedMessageClass, nestedObjClass);
- var serializerLoaded = branch.readInstanceField(externalSerializer, branch.getThis());
- branch.returnValue(branch.invokeInterfaceMethod(
- MethodDescriptor.ofMethod(ProtoSerializer.class,
- "deserialize", Object.class, Message.class),
- serializerLoaded, nestedMessage));
- } else {
- branch.returnValue(generateConstructorUse(branch, classCreator, nestedMessageType, nestedObjType, nestedMessage));
- }
- }
- }
- method.throwException(IllegalArgumentException.class, "Unknown object type");
- }
- }
-
- public void generate() {
- var objInfo = index.getClassByName(topObjectType.name());
- if (objInfo.isAbstract() || objInfo.isInterface()) {
- generateAbstract();
- return;
- }
-
- try (MethodCreator method = classCreator.getMethodCreator("serialize",
- Message.class, Object.class)) {
-
- method.setModifiers(Opcodes.ACC_PUBLIC);
-
- var builderType = Type.create(DotName.createComponentized(topMessageType.name(), "Builder", true), Type.Kind.CLASS);
-
- var builder = method.invokeStaticMethod(MethodDescriptor.ofMethod(topMessageType.name().toString(), "newBuilder", builderType.name().toString()));
-
- var arg = method.getMethodParam(0);
-
- generateBuilderUse(method, builder, topMessageType, topObjectType, arg);
-
- var result = method.invokeVirtualMethod(MethodDescriptor.ofMethod(builderType.name().toString(), "build", topMessageType.name().toString()), builder);
-
- method.returnValue(result);
- }
-
- try (MethodCreator method = classCreator.getMethodCreator("deserialize",
- Object.class, Message.class)) {
- method.setModifiers(Opcodes.ACC_PUBLIC);
-
- var arg = method.getMethodParam(0);
-
- method.returnValue(generateConstructorUse(method, classCreator, topMessageType, topObjectType, arg));
- }
-
- }
-}
diff --git a/dhfs-parent/autoprotomap/deployment/src/test/java/com/usatiuk/autoprotomap/test/AutoprotomapDevModeTest.java b/dhfs-parent/autoprotomap/deployment/src/test/java/com/usatiuk/autoprotomap/test/AutoprotomapDevModeTest.java
deleted file mode 100644
index f377a209..00000000
--- a/dhfs-parent/autoprotomap/deployment/src/test/java/com/usatiuk/autoprotomap/test/AutoprotomapDevModeTest.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.usatiuk.autoprotomap.test;
-
-import io.quarkus.test.QuarkusDevModeTest;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
-
-public class AutoprotomapDevModeTest {
-
- // Start hot reload (DevMode) test with your extension loaded
- @RegisterExtension
- static final QuarkusDevModeTest devModeTest = new QuarkusDevModeTest()
- .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class));
-
- @Test
- public void writeYourOwnDevModeTest() {
- // Write your dev mode tests here - see the testing extension guide https://quarkus.io/guides/writing-extensions#testing-hot-reload for more information
- Assertions.assertTrue(true, "Add dev mode assertions to " + getClass().getName());
- }
-}
diff --git a/dhfs-parent/autoprotomap/deployment/src/test/java/com/usatiuk/autoprotomap/test/AutoprotomapTest.java b/dhfs-parent/autoprotomap/deployment/src/test/java/com/usatiuk/autoprotomap/test/AutoprotomapTest.java
deleted file mode 100644
index ddf90f39..00000000
--- a/dhfs-parent/autoprotomap/deployment/src/test/java/com/usatiuk/autoprotomap/test/AutoprotomapTest.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.usatiuk.autoprotomap.test;
-
-import io.quarkus.test.QuarkusUnitTest;
-import org.jboss.shrinkwrap.api.ShrinkWrap;
-import org.jboss.shrinkwrap.api.spec.JavaArchive;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.api.extension.RegisterExtension;
-
-public class AutoprotomapTest {
-
- // Start unit test with your extension loaded
- @RegisterExtension
- static final QuarkusUnitTest unitTest = new QuarkusUnitTest()
- .setArchiveProducer(() -> ShrinkWrap.create(JavaArchive.class));
-
- @Test
- public void writeYourOwnUnitTest() {
- // Write your unit tests here - see the testing extension guide https://quarkus.io/guides/writing-extensions#testing-extensions for more information
- Assertions.assertTrue(true, "Add some assertions to " + getClass().getName());
- }
-}
diff --git a/dhfs-parent/autoprotomap/integration-tests/pom.xml b/dhfs-parent/autoprotomap/integration-tests/pom.xml
deleted file mode 100644
index 620449c4..00000000
--- a/dhfs-parent/autoprotomap/integration-tests/pom.xml
+++ /dev/null
@@ -1,106 +0,0 @@
-
-
- 4.0.0
-
-
- com.usatiuk
- autoprotomap-parent
- 1.0-SNAPSHOT
-
-
- autoprotomap-integration-tests
- Autoprotomap - Integration Tests
-
-
- true
-
-
-
-
- org.projectlombok
- lombok
- provided
-
-
- com.usatiuk
- autoprotomap
- ${project.version}
-
-
- com.usatiuk
- autoprotomap-deployment
- ${project.version}
-
-
- io.quarkus
- quarkus-junit5
- test
-
-
- io.quarkus
- quarkus-grpc
-
-
-
-
-
-
- io.quarkus
- quarkus-maven-plugin
-
-
-
- generate-code
- generate-code-tests
-
-
-
-
-
- maven-failsafe-plugin
-
-
-
- integration-test
- verify
-
-
-
-
-
- ${project.build.directory}/${project.build.finalName}-runner
-
- org.jboss.logmanager.LogManager
- ${maven.home}
-
-
-
-
-
-
-
-
- native
-
-
- native
-
-
-
-
-
- maven-surefire-plugin
-
- ${native.surefire.skip}
-
-
-
-
-
- false
- true
-
-
-
-
diff --git a/dhfs-parent/autoprotomap/integration-tests/src/main/java/com/usatiuk/autoprotomap/it/AbstractObject.java b/dhfs-parent/autoprotomap/integration-tests/src/main/java/com/usatiuk/autoprotomap/it/AbstractObject.java
deleted file mode 100644
index c7211a99..00000000
--- a/dhfs-parent/autoprotomap/integration-tests/src/main/java/com/usatiuk/autoprotomap/it/AbstractObject.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.usatiuk.autoprotomap.it;
-
-import com.usatiuk.autoprotomap.runtime.ProtoMirror;
-
-@ProtoMirror(AbstractProto.class)
-public abstract class AbstractObject {
-}
diff --git a/dhfs-parent/autoprotomap/integration-tests/src/main/java/com/usatiuk/autoprotomap/it/CustomObject.java b/dhfs-parent/autoprotomap/integration-tests/src/main/java/com/usatiuk/autoprotomap/it/CustomObject.java
deleted file mode 100644
index 01bed822..00000000
--- a/dhfs-parent/autoprotomap/integration-tests/src/main/java/com/usatiuk/autoprotomap/it/CustomObject.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package com.usatiuk.autoprotomap.it;
-
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-@AllArgsConstructor
-@Getter
-public class CustomObject extends AbstractObject {
- public int testNum = 0;
-}
diff --git a/dhfs-parent/autoprotomap/integration-tests/src/main/java/com/usatiuk/autoprotomap/it/CustomObjectSerializer.java b/dhfs-parent/autoprotomap/integration-tests/src/main/java/com/usatiuk/autoprotomap/it/CustomObjectSerializer.java
deleted file mode 100644
index cd951fcf..00000000
--- a/dhfs-parent/autoprotomap/integration-tests/src/main/java/com/usatiuk/autoprotomap/it/CustomObjectSerializer.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.usatiuk.autoprotomap.it;
-
-import com.usatiuk.autoprotomap.runtime.ProtoSerializer;
-import jakarta.inject.Singleton;
-
-@Singleton
-public class CustomObjectSerializer implements ProtoSerializer {
- @Override
- public CustomObject deserialize(CustomObjectProto message) {
- return new CustomObject(2);
- }
-
- @Override
- public CustomObjectProto serialize(CustomObject object) {
- return CustomObjectProto.newBuilder().setTest(1).build();
- }
-}
diff --git a/dhfs-parent/autoprotomap/integration-tests/src/main/java/com/usatiuk/autoprotomap/it/InterfaceObject.java b/dhfs-parent/autoprotomap/integration-tests/src/main/java/com/usatiuk/autoprotomap/it/InterfaceObject.java
deleted file mode 100644
index 7b06b316..00000000
--- a/dhfs-parent/autoprotomap/integration-tests/src/main/java/com/usatiuk/autoprotomap/it/InterfaceObject.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.usatiuk.autoprotomap.it;
-
-import com.usatiuk.autoprotomap.runtime.ProtoMirror;
-
-@ProtoMirror(InterfaceObjectProto.class)
-public interface InterfaceObject {
- String key();
-}
diff --git a/dhfs-parent/autoprotomap/integration-tests/src/main/java/com/usatiuk/autoprotomap/it/NestedObject.java b/dhfs-parent/autoprotomap/integration-tests/src/main/java/com/usatiuk/autoprotomap/it/NestedObject.java
deleted file mode 100644
index f611f574..00000000
--- a/dhfs-parent/autoprotomap/integration-tests/src/main/java/com/usatiuk/autoprotomap/it/NestedObject.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.usatiuk.autoprotomap.it;
-
-import com.google.protobuf.ByteString;
-import com.usatiuk.autoprotomap.runtime.ProtoMirror;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-@ProtoMirror(NestedObjectProto.class)
-@AllArgsConstructor
-@Getter
-public class NestedObject extends AbstractObject {
- public SimpleObject object;
- public String _nestedName;
- public ByteString _nestedSomeBytes;
-}
diff --git a/dhfs-parent/autoprotomap/integration-tests/src/main/java/com/usatiuk/autoprotomap/it/RecordObject.java b/dhfs-parent/autoprotomap/integration-tests/src/main/java/com/usatiuk/autoprotomap/it/RecordObject.java
deleted file mode 100644
index b314ca9a..00000000
--- a/dhfs-parent/autoprotomap/integration-tests/src/main/java/com/usatiuk/autoprotomap/it/RecordObject.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.usatiuk.autoprotomap.it;
-
-import com.usatiuk.autoprotomap.runtime.ProtoMirror;
-
-@ProtoMirror(RecordObjectProto.class)
-public record RecordObject(String key) implements InterfaceObject {
-}
diff --git a/dhfs-parent/autoprotomap/integration-tests/src/main/java/com/usatiuk/autoprotomap/it/RecordObject2.java b/dhfs-parent/autoprotomap/integration-tests/src/main/java/com/usatiuk/autoprotomap/it/RecordObject2.java
deleted file mode 100644
index 4c66dfc3..00000000
--- a/dhfs-parent/autoprotomap/integration-tests/src/main/java/com/usatiuk/autoprotomap/it/RecordObject2.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.usatiuk.autoprotomap.it;
-
-import com.usatiuk.autoprotomap.runtime.ProtoMirror;
-
-@ProtoMirror(RecordObject2Proto.class)
-public record RecordObject2(String key, int value) implements InterfaceObject {
-}
diff --git a/dhfs-parent/autoprotomap/integration-tests/src/main/java/com/usatiuk/autoprotomap/it/SimpleObject.java b/dhfs-parent/autoprotomap/integration-tests/src/main/java/com/usatiuk/autoprotomap/it/SimpleObject.java
deleted file mode 100644
index 4c548266..00000000
--- a/dhfs-parent/autoprotomap/integration-tests/src/main/java/com/usatiuk/autoprotomap/it/SimpleObject.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.usatiuk.autoprotomap.it;
-
-import com.google.protobuf.ByteString;
-import com.usatiuk.autoprotomap.runtime.ProtoMirror;
-import lombok.AllArgsConstructor;
-import lombok.Getter;
-
-@ProtoMirror(SimpleObjectProto.class)
-@AllArgsConstructor
-@Getter
-public class SimpleObject extends AbstractObject {
- public int numfield = 0;
- private String name;
- public ByteString someBytes;
-}
diff --git a/dhfs-parent/autoprotomap/integration-tests/src/main/proto/autoprotomap_test.proto b/dhfs-parent/autoprotomap/integration-tests/src/main/proto/autoprotomap_test.proto
deleted file mode 100644
index c60bcec7..00000000
--- a/dhfs-parent/autoprotomap/integration-tests/src/main/proto/autoprotomap_test.proto
+++ /dev/null
@@ -1,47 +0,0 @@
-syntax = "proto3";
-
-option java_multiple_files = true;
-option java_package = "com.usatiuk.autoprotomap.it";
-option java_outer_classname = "TestProto";
-
-package autoprotomap.test;
-
-message SimpleObjectProto {
- int32 numfield = 1;
- string name = 2;
- bytes someBytes = 3;
-}
-
-message NestedObjectProto {
- SimpleObjectProto object = 1;
- string nestedName = 2;
- bytes nestedSomeBytes = 3;
-}
-
-message CustomObjectProto {
- int64 test = 1;
-}
-
-message AbstractProto {
- oneof obj {
- NestedObjectProto nestedObject = 1;
- SimpleObjectProto simpleObject = 2;
- CustomObjectProto customObject = 3;
- }
-}
-
-message RecordObjectProto {
- string key = 1;
-}
-
-message RecordObject2Proto {
- string key = 1;
- int32 value = 2;
-}
-
-message InterfaceObjectProto {
- oneof obj {
- RecordObjectProto recordObject = 1;
- RecordObject2Proto recordObject2 = 2;
- }
-}
\ No newline at end of file
diff --git a/dhfs-parent/autoprotomap/integration-tests/src/test/java/com/usatiuk/autoprotomap/it/AutoprotomapResourceIT.java b/dhfs-parent/autoprotomap/integration-tests/src/test/java/com/usatiuk/autoprotomap/it/AutoprotomapResourceIT.java
deleted file mode 100644
index c1c7aa2b..00000000
--- a/dhfs-parent/autoprotomap/integration-tests/src/test/java/com/usatiuk/autoprotomap/it/AutoprotomapResourceIT.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.usatiuk.autoprotomap.it;
-
-import io.quarkus.test.junit.QuarkusIntegrationTest;
-
-@QuarkusIntegrationTest
-public class AutoprotomapResourceIT extends AutoprotomapResourceTest {
-}
diff --git a/dhfs-parent/autoprotomap/integration-tests/src/test/java/com/usatiuk/autoprotomap/it/AutoprotomapResourceTest.java b/dhfs-parent/autoprotomap/integration-tests/src/test/java/com/usatiuk/autoprotomap/it/AutoprotomapResourceTest.java
deleted file mode 100644
index 36f63bf6..00000000
--- a/dhfs-parent/autoprotomap/integration-tests/src/test/java/com/usatiuk/autoprotomap/it/AutoprotomapResourceTest.java
+++ /dev/null
@@ -1,113 +0,0 @@
-package com.usatiuk.autoprotomap.it;
-
-import com.google.protobuf.ByteString;
-import com.usatiuk.autoprotomap.runtime.ProtoSerializer;
-import io.quarkus.test.junit.QuarkusTest;
-import jakarta.inject.Inject;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
-
-
-@QuarkusTest
-public class AutoprotomapResourceTest {
- @Inject
- ProtoSerializer simpleProtoSerializer;
- @Inject
- ProtoSerializer nestedProtoSerializer;
- @Inject
- ProtoSerializer abstractProtoSerializer;
- @Inject
- ProtoSerializer interfaceProtoSerializer;
-
- @Test
- public void testSimple() {
- var ret = simpleProtoSerializer.serialize(new SimpleObject(1234, "simple test", ByteString.copyFrom(new byte[]{1, 2, 3})));
- Assertions.assertEquals(1234, ret.getNumfield());
- Assertions.assertEquals("simple test", ret.getName());
- Assertions.assertEquals(ByteString.copyFrom(new byte[]{1, 2, 3}), ret.getSomeBytes());
-
- var des = simpleProtoSerializer.deserialize(ret);
- Assertions.assertEquals(1234, des.getNumfield());
- Assertions.assertEquals("simple test", des.getName());
- Assertions.assertEquals(ByteString.copyFrom(new byte[]{1, 2, 3}), des.getSomeBytes());
- }
-
- @Test
- public void testNested() {
- var ret = nestedProtoSerializer.serialize(
- new NestedObject(
- new SimpleObject(333, "nested so", ByteString.copyFrom(new byte[]{1, 2, 3})),
- "nested obj", ByteString.copyFrom(new byte[]{4, 5, 6})));
- Assertions.assertEquals(333, ret.getObject().getNumfield());
- Assertions.assertEquals("nested so", ret.getObject().getName());
- Assertions.assertEquals(ByteString.copyFrom(new byte[]{1, 2, 3}), ret.getObject().getSomeBytes());
- Assertions.assertEquals("nested obj", ret.getNestedName());
- Assertions.assertEquals(ByteString.copyFrom(new byte[]{4, 5, 6}), ret.getNestedSomeBytes());
-
- var des = nestedProtoSerializer.deserialize(ret);
- Assertions.assertEquals(333, des.object.numfield);
- Assertions.assertEquals(333, des.getObject().getNumfield());
- Assertions.assertEquals("nested so", des.getObject().getName());
- Assertions.assertEquals(ByteString.copyFrom(new byte[]{1, 2, 3}), des.getObject().getSomeBytes());
- Assertions.assertEquals("nested obj", des.get_nestedName());
- Assertions.assertEquals(ByteString.copyFrom(new byte[]{4, 5, 6}), des.get_nestedSomeBytes());
- }
-
- @Test
- public void testAbstractSimple() {
- var ret = abstractProtoSerializer.serialize(new SimpleObject(1234, "simple test", ByteString.copyFrom(new byte[]{1, 2, 3})));
- Assertions.assertEquals(1234, ret.getSimpleObject().getNumfield());
- Assertions.assertEquals("simple test", ret.getSimpleObject().getName());
- Assertions.assertEquals(ByteString.copyFrom(new byte[]{1, 2, 3}), ret.getSimpleObject().getSomeBytes());
-
- var des = (SimpleObject) abstractProtoSerializer.deserialize(ret);
- Assertions.assertEquals(1234, des.getNumfield());
- Assertions.assertEquals("simple test", des.getName());
- Assertions.assertEquals(ByteString.copyFrom(new byte[]{1, 2, 3}), des.getSomeBytes());
- }
-
- @Test
- public void testAbstractCustom() {
- var ret = abstractProtoSerializer.serialize(new CustomObject(1234));
- Assertions.assertEquals(1, ret.getCustomObject().getTest());
-
- var des = (CustomObject) abstractProtoSerializer.deserialize(ret);
- Assertions.assertEquals(2, des.getTestNum());
- }
-
- @Test
- public void testAbstractNested() {
- var ret = abstractProtoSerializer.serialize(
- new NestedObject(
- new SimpleObject(333, "nested so", ByteString.copyFrom(new byte[]{1, 2, 3})),
- "nested obj", ByteString.copyFrom(new byte[]{4, 5, 6})));
- Assertions.assertEquals(333, ret.getNestedObject().getObject().getNumfield());
- Assertions.assertEquals("nested so", ret.getNestedObject().getObject().getName());
- Assertions.assertEquals(ByteString.copyFrom(new byte[]{1, 2, 3}), ret.getNestedObject().getObject().getSomeBytes());
- Assertions.assertEquals("nested obj", ret.getNestedObject().getNestedName());
- Assertions.assertEquals(ByteString.copyFrom(new byte[]{4, 5, 6}), ret.getNestedObject().getNestedSomeBytes());
-
- var des = (NestedObject) abstractProtoSerializer.deserialize(ret);
- Assertions.assertEquals(333, des.object.numfield);
- Assertions.assertEquals(333, des.getObject().getNumfield());
- Assertions.assertEquals("nested so", des.getObject().getName());
- Assertions.assertEquals(ByteString.copyFrom(new byte[]{1, 2, 3}), des.getObject().getSomeBytes());
- Assertions.assertEquals("nested obj", des.get_nestedName());
- Assertions.assertEquals(ByteString.copyFrom(new byte[]{4, 5, 6}), des.get_nestedSomeBytes());
- }
-
- @Test
- public void testInterface() {
- var ret = interfaceProtoSerializer.serialize(new RecordObject("record test"));
- Assertions.assertEquals("record test", ret.getRecordObject().getKey());
- var des = (RecordObject) interfaceProtoSerializer.deserialize(ret);
- Assertions.assertEquals("record test", des.key());
-
- var ret2 = interfaceProtoSerializer.serialize(new RecordObject2("record test 2", 1234));
- Assertions.assertEquals("record test 2", ret2.getRecordObject2().getKey());
- Assertions.assertEquals(1234, ret2.getRecordObject2().getValue());
- var des2 = (RecordObject2) interfaceProtoSerializer.deserialize(ret2);
- Assertions.assertEquals("record test 2", des2.key());
- Assertions.assertEquals(1234, des2.value());
- }
-}
diff --git a/dhfs-parent/autoprotomap/pom.xml b/dhfs-parent/autoprotomap/pom.xml
deleted file mode 100644
index e8b0ec3c..00000000
--- a/dhfs-parent/autoprotomap/pom.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-
-
- 4.0.0
-
-
- com.usatiuk.dhfs
- parent
- 1.0-SNAPSHOT
-
-
- com.usatiuk
- autoprotomap-parent
- 1.0-SNAPSHOT
- pom
- Autoprotomap - Parent
-
-
- deployment
- runtime
- integration-tests
-
-
-
diff --git a/dhfs-parent/autoprotomap/runtime/pom.xml b/dhfs-parent/autoprotomap/runtime/pom.xml
deleted file mode 100644
index a66312b4..00000000
--- a/dhfs-parent/autoprotomap/runtime/pom.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-
-
- 4.0.0
-
-
- com.usatiuk
- autoprotomap-parent
- 1.0-SNAPSHOT
-
- autoprotomap
- Autoprotomap - Runtime
-
-
-
- io.quarkus
- quarkus-arc
-
-
- io.quarkus
- quarkus-grpc
-
-
-
-
-
-
- io.quarkus
- quarkus-extension-maven-plugin
- ${quarkus.platform.version}
-
-
- compile
-
- extension-descriptor
-
-
- ${project.groupId}:${project.artifactId}-deployment:${project.version}
-
-
-
-
-
-
- maven-compiler-plugin
-
-
- default-compile
-
-
-
- io.quarkus
- quarkus-extension-processor
- ${quarkus.platform.version}
-
-
-
-
-
-
-
-
-
diff --git a/dhfs-parent/autoprotomap/runtime/src/main/java/com/usatiuk/autoprotomap/runtime/ProtoMirror.java b/dhfs-parent/autoprotomap/runtime/src/main/java/com/usatiuk/autoprotomap/runtime/ProtoMirror.java
deleted file mode 100644
index bc760dff..00000000
--- a/dhfs-parent/autoprotomap/runtime/src/main/java/com/usatiuk/autoprotomap/runtime/ProtoMirror.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.usatiuk.autoprotomap.runtime;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Retention(RetentionPolicy.CLASS)
-@Target(ElementType.TYPE)
-public @interface ProtoMirror {
- Class> value() default Object.class;
-}
diff --git a/dhfs-parent/autoprotomap/runtime/src/main/resources/META-INF/quarkus-extension.yaml b/dhfs-parent/autoprotomap/runtime/src/main/resources/META-INF/quarkus-extension.yaml
deleted file mode 100644
index 51340e1b..00000000
--- a/dhfs-parent/autoprotomap/runtime/src/main/resources/META-INF/quarkus-extension.yaml
+++ /dev/null
@@ -1,9 +0,0 @@
-name: Autoprotomap
-#description: Do something useful.
-metadata:
-# keywords:
-# - autoprotomap
-# guide: ... # To create and publish this guide, see https://github.com/quarkiverse/quarkiverse/wiki#documenting-your-extension
-# categories:
-# - "miscellaneous"
-# status: "preview"
diff --git a/dhfs-parent/server/.dockerignore b/dhfs-parent/dhfs-app/.dockerignore
similarity index 100%
rename from dhfs-parent/server/.dockerignore
rename to dhfs-parent/dhfs-app/.dockerignore
diff --git a/dhfs-parent/server/.gitignore b/dhfs-parent/dhfs-app/.gitignore
similarity index 100%
rename from dhfs-parent/server/.gitignore
rename to dhfs-parent/dhfs-app/.gitignore
diff --git a/dhfs-parent/server/Dockerfile b/dhfs-parent/dhfs-app/Dockerfile
similarity index 100%
rename from dhfs-parent/server/Dockerfile
rename to dhfs-parent/dhfs-app/Dockerfile
diff --git a/dhfs-parent/server/docker-compose.yml b/dhfs-parent/dhfs-app/docker-compose.yml
similarity index 100%
rename from dhfs-parent/server/docker-compose.yml
rename to dhfs-parent/dhfs-app/docker-compose.yml
diff --git a/dhfs-parent/dhfs-app/pom.xml b/dhfs-parent/dhfs-app/pom.xml
new file mode 100644
index 00000000..31a5574d
--- /dev/null
+++ b/dhfs-parent/dhfs-app/pom.xml
@@ -0,0 +1,215 @@
+
+
+ 4.0.0
+ com.usatiuk.dhfs
+ dhfs-app
+ 1.0-SNAPSHOT
+
+
+ com.usatiuk.dhfs
+ parent
+ 1.0-SNAPSHOT
+
+
+
+
+ org.testcontainers
+ testcontainers
+ test
+
+
+ org.awaitility
+ awaitility
+ test
+
+
+ org.bouncycastle
+ bcprov-jdk18on
+
+
+ org.bouncycastle
+ bcpkix-jdk18on
+
+
+ io.quarkus
+ quarkus-security
+
+
+ net.openhft
+ zero-allocation-hashing
+
+
+ io.quarkus
+ quarkus-grpc
+
+
+ io.quarkus
+ quarkus-arc
+
+
+ io.quarkus
+ quarkus-rest
+
+
+ io.quarkus
+ quarkus-rest-client
+
+
+ io.quarkus
+ quarkus-rest-client-jsonb
+
+
+ io.quarkus
+ quarkus-rest-jsonb
+
+
+ io.quarkus
+ quarkus-scheduler
+
+
+ io.quarkus
+ quarkus-junit5
+ test
+
+
+ com.github.SerCeMan
+ jnr-fuse
+ 44ed40f8ce
+
+
+ com.github.jnr
+ jnr-ffi
+ 2.2.16
+
+
+ com.github.jnr
+ jnr-posix
+ 3.1.19
+
+
+ com.github.jnr
+ jnr-constants
+ 0.10.4
+
+
+ org.apache.commons
+ commons-lang3
+
+
+ commons-io
+ commons-io
+
+
+ org.jboss.slf4j
+ slf4j-jboss-logmanager
+ test
+
+
+ commons-codec
+ commons-codec
+
+
+ org.apache.commons
+ commons-collections4
+
+
+ org.pcollections
+ pcollections
+
+
+ org.apache.commons
+ commons-math3
+ 3.6.1
+
+
+ com.usatiuk
+ kleppmanntree
+ 1.0-SNAPSHOT
+
+
+ com.usatiuk.dhfs
+ supportlib
+ 1.0-SNAPSHOT
+
+
+ com.usatiuk.dhfs
+ objects
+ 1.0-SNAPSHOT
+
+
+ com.usatiuk.dhfs
+ dhfs-fs
+ 1.0-SNAPSHOT
+
+
+ com.usatiuk.dhfs
+ dhfs-fuse
+ 1.0-SNAPSHOT
+
+
+ com.usatiuk.dhfs
+ sync-base
+ 1.0-SNAPSHOT
+
+
+ com.usatiuk.dhfs
+ utils
+ 1.0-SNAPSHOT
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ 1C
+ false
+ classes
+
+
+ false
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+
+
+
+ true
+
+
+ concurrent
+
+
+ 0.5
+
+ true
+ true
+
+
+
+
+ ${quarkus.platform.group-id}
+ quarkus-maven-plugin
+ ${quarkus.platform.version}
+ true
+
+
+ quarkus-plugin
+
+ build
+ generate-code
+ generate-code-tests
+
+
+
+
+
+
+
diff --git a/dhfs-parent/server/src/main/docker/Dockerfile.jvm b/dhfs-parent/dhfs-app/src/main/docker/Dockerfile.jvm
similarity index 100%
rename from dhfs-parent/server/src/main/docker/Dockerfile.jvm
rename to dhfs-parent/dhfs-app/src/main/docker/Dockerfile.jvm
diff --git a/dhfs-parent/server/src/main/docker/Dockerfile.legacy-jar b/dhfs-parent/dhfs-app/src/main/docker/Dockerfile.legacy-jar
similarity index 100%
rename from dhfs-parent/server/src/main/docker/Dockerfile.legacy-jar
rename to dhfs-parent/dhfs-app/src/main/docker/Dockerfile.legacy-jar
diff --git a/dhfs-parent/server/src/main/docker/Dockerfile.native b/dhfs-parent/dhfs-app/src/main/docker/Dockerfile.native
similarity index 100%
rename from dhfs-parent/server/src/main/docker/Dockerfile.native
rename to dhfs-parent/dhfs-app/src/main/docker/Dockerfile.native
diff --git a/dhfs-parent/server/src/main/docker/Dockerfile.native-micro b/dhfs-parent/dhfs-app/src/main/docker/Dockerfile.native-micro
similarity index 100%
rename from dhfs-parent/server/src/main/docker/Dockerfile.native-micro
rename to dhfs-parent/dhfs-app/src/main/docker/Dockerfile.native-micro
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/Main.java b/dhfs-parent/dhfs-app/src/main/java/com/usatiuk/dhfs/app/Main.java
similarity index 94%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/Main.java
rename to dhfs-parent/dhfs-app/src/main/java/com/usatiuk/dhfs/app/Main.java
index 69e488c0..f3b6a13e 100644
--- a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/Main.java
+++ b/dhfs-parent/dhfs-app/src/main/java/com/usatiuk/dhfs/app/Main.java
@@ -1,4 +1,4 @@
-package com.usatiuk.dhfs;
+package com.usatiuk.dhfs.app;
import io.quarkus.runtime.Quarkus;
import io.quarkus.runtime.QuarkusApplication;
diff --git a/dhfs-parent/autoprotomap/integration-tests/src/main/resources/application.properties b/dhfs-parent/dhfs-app/src/main/resources/META-INF/beans.xml
similarity index 100%
rename from dhfs-parent/autoprotomap/integration-tests/src/main/resources/application.properties
rename to dhfs-parent/dhfs-app/src/main/resources/META-INF/beans.xml
diff --git a/dhfs-parent/server/src/main/resources/application.properties b/dhfs-parent/dhfs-app/src/main/resources/application.properties
similarity index 100%
rename from dhfs-parent/server/src/main/resources/application.properties
rename to dhfs-parent/dhfs-app/src/main/resources/application.properties
diff --git a/dhfs-parent/server/src/test/java/com/usatiuk/dhfs/TempDataProfile.java b/dhfs-parent/dhfs-app/src/test/java/com/usatiuk/dhfs/TempDataProfile.java
similarity index 100%
rename from dhfs-parent/server/src/test/java/com/usatiuk/dhfs/TempDataProfile.java
rename to dhfs-parent/dhfs-app/src/test/java/com/usatiuk/dhfs/TempDataProfile.java
diff --git a/dhfs-parent/server/src/test/java/com/usatiuk/dhfs/TestDataCleaner.java b/dhfs-parent/dhfs-app/src/test/java/com/usatiuk/dhfs/TestDataCleaner.java
similarity index 100%
rename from dhfs-parent/server/src/test/java/com/usatiuk/dhfs/TestDataCleaner.java
rename to dhfs-parent/dhfs-app/src/test/java/com/usatiuk/dhfs/TestDataCleaner.java
diff --git a/dhfs-parent/server/src/test/java/com/usatiuk/dhfs/integration/DhfsFuseIT.java b/dhfs-parent/dhfs-app/src/test/java/com/usatiuk/dhfs/integration/DhfsFuseIT.java
similarity index 100%
rename from dhfs-parent/server/src/test/java/com/usatiuk/dhfs/integration/DhfsFuseIT.java
rename to dhfs-parent/dhfs-app/src/test/java/com/usatiuk/dhfs/integration/DhfsFuseIT.java
diff --git a/dhfs-parent/server/src/test/java/com/usatiuk/dhfs/integration/DhfsFusex3IT.java b/dhfs-parent/dhfs-app/src/test/java/com/usatiuk/dhfs/integration/DhfsFusex3IT.java
similarity index 100%
rename from dhfs-parent/server/src/test/java/com/usatiuk/dhfs/integration/DhfsFusex3IT.java
rename to dhfs-parent/dhfs-app/src/test/java/com/usatiuk/dhfs/integration/DhfsFusex3IT.java
diff --git a/dhfs-parent/server/src/test/java/com/usatiuk/dhfs/integration/DhfsImage.java b/dhfs-parent/dhfs-app/src/test/java/com/usatiuk/dhfs/integration/DhfsImage.java
similarity index 100%
rename from dhfs-parent/server/src/test/java/com/usatiuk/dhfs/integration/DhfsImage.java
rename to dhfs-parent/dhfs-app/src/test/java/com/usatiuk/dhfs/integration/DhfsImage.java
diff --git a/dhfs-parent/server/src/test/java/com/usatiuk/dhfs/integration/ResyncIT.java b/dhfs-parent/dhfs-app/src/test/java/com/usatiuk/dhfs/integration/ResyncIT.java
similarity index 100%
rename from dhfs-parent/server/src/test/java/com/usatiuk/dhfs/integration/ResyncIT.java
rename to dhfs-parent/dhfs-app/src/test/java/com/usatiuk/dhfs/integration/ResyncIT.java
diff --git a/dhfs-parent/server/src/test/resources/application.properties b/dhfs-parent/dhfs-app/src/test/resources/application.properties
similarity index 100%
rename from dhfs-parent/server/src/test/resources/application.properties
rename to dhfs-parent/dhfs-app/src/test/resources/application.properties
diff --git a/dhfs-parent/dhfs-fs/.dockerignore b/dhfs-parent/dhfs-fs/.dockerignore
new file mode 100644
index 00000000..94810d00
--- /dev/null
+++ b/dhfs-parent/dhfs-fs/.dockerignore
@@ -0,0 +1,5 @@
+*
+!target/*-runner
+!target/*-runner.jar
+!target/lib/*
+!target/quarkus-app/*
\ No newline at end of file
diff --git a/dhfs-parent/dhfs-fs/.gitignore b/dhfs-parent/dhfs-fs/.gitignore
new file mode 100644
index 00000000..8c7863e7
--- /dev/null
+++ b/dhfs-parent/dhfs-fs/.gitignore
@@ -0,0 +1,43 @@
+#Maven
+target/
+pom.xml.tag
+pom.xml.releaseBackup
+pom.xml.versionsBackup
+release.properties
+.flattened-pom.xml
+
+# Eclipse
+.project
+.classpath
+.settings/
+bin/
+
+# IntelliJ
+.idea
+*.ipr
+*.iml
+*.iws
+
+# NetBeans
+nb-configuration.xml
+
+# Visual Studio Code
+.vscode
+.factorypath
+
+# OSX
+.DS_Store
+
+# Vim
+*.swp
+*.swo
+
+# patch
+*.orig
+*.rej
+
+# Local environment
+.env
+
+# Plugin directory
+/.quarkus/cli/plugins/
diff --git a/dhfs-parent/dhfs-fs/Dockerfile b/dhfs-parent/dhfs-fs/Dockerfile
new file mode 100644
index 00000000..62bace54
--- /dev/null
+++ b/dhfs-parent/dhfs-fs/Dockerfile
@@ -0,0 +1,2 @@
+FROM azul/zulu-openjdk-debian:21-jre-latest
+RUN apt update && apt install -y libfuse2 curl
\ No newline at end of file
diff --git a/dhfs-parent/dhfs-fs/docker-compose.yml b/dhfs-parent/dhfs-fs/docker-compose.yml
new file mode 100644
index 00000000..c45708ba
--- /dev/null
+++ b/dhfs-parent/dhfs-fs/docker-compose.yml
@@ -0,0 +1,43 @@
+version: "3.2"
+
+services:
+ dhfs1:
+ build: .
+ privileged: true
+ devices:
+ - /dev/fuse
+ volumes:
+ - $HOME/dhfs/dhfs1:/dhfs_root
+ - $HOME/dhfs/dhfs1_f:/dhfs_root/fuse:rshared
+ - ./target/quarkus-app:/app
+ command: "java --add-exports java.base/sun.nio.ch=ALL-UNNAMED
+ -Ddhfs.objects.persistence.files.root=/dhfs_root/p
+ -Ddhfs.objects.root=/dhfs_root/d
+ -Ddhfs.fuse.root=/dhfs_root/fuse -Dquarkus.http.host=0.0.0.0
+ -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
+ -jar /app/quarkus-run.jar"
+ ports:
+ - 8080:8080
+ - 8081:8443
+ - 5005:5005
+ dhfs2:
+ build: .
+ privileged: true
+ devices:
+ - /dev/fuse
+ volumes:
+ - $HOME/dhfs/dhfs2:/dhfs_root
+ - $HOME/dhfs/dhfs2_f:/dhfs_root/fuse:rshared
+ - ./target/quarkus-app:/app
+ command: "java --add-exports java.base/sun.nio.ch=ALL-UNNAMED
+ --add-exports java.base/jdk.internal.access=ALL-UNNAMED
+ --add-opens=java.base/java.nio=ALL-UNNAMED
+ -Ddhfs.objects.persistence.files.root=/dhfs_root/p
+ -Ddhfs.objects.root=/dhfs_root/d
+ -Ddhfs.fuse.root=/dhfs_root/fuse -Dquarkus.http.host=0.0.0.0
+ -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5010
+ -jar /app/quarkus-run.jar"
+ ports:
+ - 8090:8080
+ - 8091:8443
+ - 5010:5010
diff --git a/dhfs-parent/dhfs-fs/pom.xml b/dhfs-parent/dhfs-fs/pom.xml
new file mode 100644
index 00000000..6a6c875c
--- /dev/null
+++ b/dhfs-parent/dhfs-fs/pom.xml
@@ -0,0 +1,204 @@
+
+
+ 4.0.0
+ com.usatiuk.dhfs
+ dhfs-fs
+ 1.0-SNAPSHOT
+
+
+ com.usatiuk.dhfs
+ parent
+ 1.0-SNAPSHOT
+
+
+
+
+ org.testcontainers
+ testcontainers
+ test
+
+
+ org.awaitility
+ awaitility
+ test
+
+
+ org.bouncycastle
+ bcprov-jdk18on
+
+
+ org.bouncycastle
+ bcpkix-jdk18on
+
+
+ io.quarkus
+ quarkus-security
+
+
+ net.openhft
+ zero-allocation-hashing
+
+
+ io.quarkus
+ quarkus-grpc
+
+
+ io.quarkus
+ quarkus-arc
+
+
+ io.quarkus
+ quarkus-rest
+
+
+ io.quarkus
+ quarkus-rest-client
+
+
+ io.quarkus
+ quarkus-rest-client-jsonb
+
+
+ io.quarkus
+ quarkus-rest-jsonb
+
+
+ io.quarkus
+ quarkus-scheduler
+
+
+ io.quarkus
+ quarkus-junit5
+ test
+
+
+ com.github.SerCeMan
+ jnr-fuse
+ 44ed40f8ce
+
+
+ com.github.jnr
+ jnr-ffi
+ 2.2.16
+
+
+ com.github.jnr
+ jnr-posix
+ 3.1.19
+
+
+ com.github.jnr
+ jnr-constants
+ 0.10.4
+
+
+ org.apache.commons
+ commons-lang3
+
+
+ commons-io
+ commons-io
+
+
+ org.jboss.slf4j
+ slf4j-jboss-logmanager
+ test
+
+
+ commons-codec
+ commons-codec
+
+
+ org.apache.commons
+ commons-collections4
+
+
+ org.pcollections
+ pcollections
+
+
+ org.apache.commons
+ commons-math3
+ 3.6.1
+
+
+ com.usatiuk
+ kleppmanntree
+ 1.0-SNAPSHOT
+
+
+ com.usatiuk.dhfs
+ supportlib
+ 1.0-SNAPSHOT
+
+
+ com.usatiuk.dhfs
+ objects
+ 1.0-SNAPSHOT
+
+
+ com.usatiuk.dhfs
+ sync-base
+ 1.0-SNAPSHOT
+
+
+ com.usatiuk.dhfs
+ utils
+ 1.0-SNAPSHOT
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ 1C
+ false
+ classes
+
+
+ false
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+
+
+
+ true
+
+
+ concurrent
+
+
+ 0.5
+
+ true
+ true
+
+
+
+
+ ${quarkus.platform.group-id}
+ quarkus-maven-plugin
+ ${quarkus.platform.version}
+ true
+
+
+ quarkus-plugin
+
+ generate-code
+ generate-code-tests
+
+
+
+
+
+
+
diff --git a/dhfs-parent/dhfs-fs/src/main/docker/Dockerfile.jvm b/dhfs-parent/dhfs-fs/src/main/docker/Dockerfile.jvm
new file mode 100644
index 00000000..b1de5988
--- /dev/null
+++ b/dhfs-parent/dhfs-fs/src/main/docker/Dockerfile.jvm
@@ -0,0 +1,97 @@
+####
+# This Dockerfile is used in order to build a container that runs the Quarkus application in JVM mode
+#
+# Before building the container image run:
+#
+# ./mvnw package
+#
+# Then, build the image with:
+#
+# docker build -f src/main/docker/Dockerfile.jvm -t quarkus/server-jvm .
+#
+# Then run the container using:
+#
+# docker run -i --rm -p 8080:8080 quarkus/server-jvm
+#
+# If you want to include the debug port into your docker image
+# you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005.
+# Additionally you will have to set -e JAVA_DEBUG=true and -e JAVA_DEBUG_PORT=*:5005
+# when running the container
+#
+# Then run the container using :
+#
+# docker run -i --rm -p 8080:8080 quarkus/server-jvm
+#
+# This image uses the `run-java.sh` script to run the application.
+# This scripts computes the command line to execute your Java application, and
+# includes memory/GC tuning.
+# You can configure the behavior using the following environment properties:
+# - JAVA_OPTS: JVM options passed to the `java` command (example: "-verbose:class")
+# - JAVA_OPTS_APPEND: User specified Java options to be appended to generated options
+# in JAVA_OPTS (example: "-Dsome.property=foo")
+# - JAVA_MAX_MEM_RATIO: Is used when no `-Xmx` option is given in JAVA_OPTS. This is
+# used to calculate a default maximal heap memory based on a containers restriction.
+# If used in a container without any memory constraints for the container then this
+# option has no effect. If there is a memory constraint then `-Xmx` is set to a ratio
+# of the container available memory as set here. The default is `50` which means 50%
+# of the available memory is used as an upper boundary. You can skip this mechanism by
+# setting this value to `0` in which case no `-Xmx` option is added.
+# - JAVA_INITIAL_MEM_RATIO: Is used when no `-Xms` option is given in JAVA_OPTS. This
+# is used to calculate a default initial heap memory based on the maximum heap memory.
+# If used in a container without any memory constraints for the container then this
+# option has no effect. If there is a memory constraint then `-Xms` is set to a ratio
+# of the `-Xmx` memory as set here. The default is `25` which means 25% of the `-Xmx`
+# is used as the initial heap size. You can skip this mechanism by setting this value
+# to `0` in which case no `-Xms` option is added (example: "25")
+# - JAVA_MAX_INITIAL_MEM: Is used when no `-Xms` option is given in JAVA_OPTS.
+# This is used to calculate the maximum value of the initial heap memory. If used in
+# a container without any memory constraints for the container then this option has
+# no effect. If there is a memory constraint then `-Xms` is limited to the value set
+# here. The default is 4096MB which means the calculated value of `-Xms` never will
+# be greater than 4096MB. The value of this variable is expressed in MB (example: "4096")
+# - JAVA_DIAGNOSTICS: Set this to get some diagnostics information to standard output
+# when things are happening. This option, if set to true, will set
+# `-XX:+UnlockDiagnosticVMOptions`. Disabled by default (example: "true").
+# - JAVA_DEBUG: If set remote debugging will be switched on. Disabled by default (example:
+# true").
+# - JAVA_DEBUG_PORT: Port used for remote debugging. Defaults to 5005 (example: "8787").
+# - CONTAINER_CORE_LIMIT: A calculated core limit as described in
+# https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt. (example: "2")
+# - CONTAINER_MAX_MEMORY: Memory limit given to the container (example: "1024").
+# - GC_MIN_HEAP_FREE_RATIO: Minimum percentage of heap free after GC to avoid expansion.
+# (example: "20")
+# - GC_MAX_HEAP_FREE_RATIO: Maximum percentage of heap free after GC to avoid shrinking.
+# (example: "40")
+# - GC_TIME_RATIO: Specifies the ratio of the time spent outside the garbage collection.
+# (example: "4")
+# - GC_ADAPTIVE_SIZE_POLICY_WEIGHT: The weighting given to the current GC time versus
+# previous GC times. (example: "90")
+# - GC_METASPACE_SIZE: The initial metaspace size. (example: "20")
+# - GC_MAX_METASPACE_SIZE: The maximum metaspace size. (example: "100")
+# - GC_CONTAINER_OPTIONS: Specify Java GC to use. The value of this variable should
+# contain the necessary JRE command-line options to specify the required GC, which
+# will override the default of `-XX:+UseParallelGC` (example: -XX:+UseG1GC).
+# - HTTPS_PROXY: The location of the https proxy. (example: "myuser@127.0.0.1:8080")
+# - HTTP_PROXY: The location of the http proxy. (example: "myuser@127.0.0.1:8080")
+# - NO_PROXY: A comma separated lists of hosts, IP addresses or domains that can be
+# accessed directly. (example: "foo.example.com,bar.example.com")
+#
+###
+FROM registry.access.redhat.com/ubi8/openjdk-21:1.18
+
+ENV LANGUAGE='en_US:en'
+
+
+# We make four distinct layers so if there are application changes the library layers can be re-used
+COPY --chown=185 target/quarkus-app/lib/ /deployments/lib/
+COPY --chown=185 target/quarkus-app/*.jar /deployments/
+COPY --chown=185 target/quarkus-app/app/ /deployments/app/
+COPY --chown=185 target/quarkus-app/quarkus/ /deployments/quarkus/
+
+EXPOSE 8080
+USER 185
+ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
+ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"
+
+ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ]
+
diff --git a/dhfs-parent/dhfs-fs/src/main/docker/Dockerfile.legacy-jar b/dhfs-parent/dhfs-fs/src/main/docker/Dockerfile.legacy-jar
new file mode 100644
index 00000000..f66a1665
--- /dev/null
+++ b/dhfs-parent/dhfs-fs/src/main/docker/Dockerfile.legacy-jar
@@ -0,0 +1,93 @@
+####
+# This Dockerfile is used in order to build a container that runs the Quarkus application in JVM mode
+#
+# Before building the container image run:
+#
+# ./mvnw package -Dquarkus.package.jar.type=legacy-jar
+#
+# Then, build the image with:
+#
+# docker build -f src/main/docker/Dockerfile.legacy-jar -t quarkus/server-legacy-jar .
+#
+# Then run the container using:
+#
+# docker run -i --rm -p 8080:8080 quarkus/server-legacy-jar
+#
+# If you want to include the debug port into your docker image
+# you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005.
+# Additionally you will have to set -e JAVA_DEBUG=true and -e JAVA_DEBUG_PORT=*:5005
+# when running the container
+#
+# Then run the container using :
+#
+# docker run -i --rm -p 8080:8080 quarkus/server-legacy-jar
+#
+# This image uses the `run-java.sh` script to run the application.
+# This scripts computes the command line to execute your Java application, and
+# includes memory/GC tuning.
+# You can configure the behavior using the following environment properties:
+# - JAVA_OPTS: JVM options passed to the `java` command (example: "-verbose:class")
+# - JAVA_OPTS_APPEND: User specified Java options to be appended to generated options
+# in JAVA_OPTS (example: "-Dsome.property=foo")
+# - JAVA_MAX_MEM_RATIO: Is used when no `-Xmx` option is given in JAVA_OPTS. This is
+# used to calculate a default maximal heap memory based on a containers restriction.
+# If used in a container without any memory constraints for the container then this
+# option has no effect. If there is a memory constraint then `-Xmx` is set to a ratio
+# of the container available memory as set here. The default is `50` which means 50%
+# of the available memory is used as an upper boundary. You can skip this mechanism by
+# setting this value to `0` in which case no `-Xmx` option is added.
+# - JAVA_INITIAL_MEM_RATIO: Is used when no `-Xms` option is given in JAVA_OPTS. This
+# is used to calculate a default initial heap memory based on the maximum heap memory.
+# If used in a container without any memory constraints for the container then this
+# option has no effect. If there is a memory constraint then `-Xms` is set to a ratio
+# of the `-Xmx` memory as set here. The default is `25` which means 25% of the `-Xmx`
+# is used as the initial heap size. You can skip this mechanism by setting this value
+# to `0` in which case no `-Xms` option is added (example: "25")
+# - JAVA_MAX_INITIAL_MEM: Is used when no `-Xms` option is given in JAVA_OPTS.
+# This is used to calculate the maximum value of the initial heap memory. If used in
+# a container without any memory constraints for the container then this option has
+# no effect. If there is a memory constraint then `-Xms` is limited to the value set
+# here. The default is 4096MB which means the calculated value of `-Xms` never will
+# be greater than 4096MB. The value of this variable is expressed in MB (example: "4096")
+# - JAVA_DIAGNOSTICS: Set this to get some diagnostics information to standard output
+# when things are happening. This option, if set to true, will set
+# `-XX:+UnlockDiagnosticVMOptions`. Disabled by default (example: "true").
+# - JAVA_DEBUG: If set remote debugging will be switched on. Disabled by default (example:
+# true").
+# - JAVA_DEBUG_PORT: Port used for remote debugging. Defaults to 5005 (example: "8787").
+# - CONTAINER_CORE_LIMIT: A calculated core limit as described in
+# https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt. (example: "2")
+# - CONTAINER_MAX_MEMORY: Memory limit given to the container (example: "1024").
+# - GC_MIN_HEAP_FREE_RATIO: Minimum percentage of heap free after GC to avoid expansion.
+# (example: "20")
+# - GC_MAX_HEAP_FREE_RATIO: Maximum percentage of heap free after GC to avoid shrinking.
+# (example: "40")
+# - GC_TIME_RATIO: Specifies the ratio of the time spent outside the garbage collection.
+# (example: "4")
+# - GC_ADAPTIVE_SIZE_POLICY_WEIGHT: The weighting given to the current GC time versus
+# previous GC times. (example: "90")
+# - GC_METASPACE_SIZE: The initial metaspace size. (example: "20")
+# - GC_MAX_METASPACE_SIZE: The maximum metaspace size. (example: "100")
+# - GC_CONTAINER_OPTIONS: Specify Java GC to use. The value of this variable should
+# contain the necessary JRE command-line options to specify the required GC, which
+# will override the default of `-XX:+UseParallelGC` (example: -XX:+UseG1GC).
+# - HTTPS_PROXY: The location of the https proxy. (example: "myuser@127.0.0.1:8080")
+# - HTTP_PROXY: The location of the http proxy. (example: "myuser@127.0.0.1:8080")
+# - NO_PROXY: A comma separated lists of hosts, IP addresses or domains that can be
+# accessed directly. (example: "foo.example.com,bar.example.com")
+#
+###
+FROM registry.access.redhat.com/ubi8/openjdk-21:1.18
+
+ENV LANGUAGE='en_US:en'
+
+
+COPY target/lib/* /deployments/lib/
+COPY target/*-runner.jar /deployments/quarkus-run.jar
+
+EXPOSE 8080
+USER 185
+ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
+ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"
+
+ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ]
diff --git a/dhfs-parent/dhfs-fs/src/main/docker/Dockerfile.native b/dhfs-parent/dhfs-fs/src/main/docker/Dockerfile.native
new file mode 100644
index 00000000..226e7c71
--- /dev/null
+++ b/dhfs-parent/dhfs-fs/src/main/docker/Dockerfile.native
@@ -0,0 +1,27 @@
+####
+# This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode.
+#
+# Before building the container image run:
+#
+# ./mvnw package -Dnative
+#
+# Then, build the image with:
+#
+# docker build -f src/main/docker/Dockerfile.native -t quarkus/server .
+#
+# Then run the container using:
+#
+# docker run -i --rm -p 8080:8080 quarkus/server
+#
+###
+FROM registry.access.redhat.com/ubi8/ubi-minimal:8.9
+WORKDIR /work/
+RUN chown 1001 /work \
+ && chmod "g+rwX" /work \
+ && chown 1001:root /work
+COPY --chown=1001:root target/*-runner /work/application
+
+EXPOSE 8080
+USER 1001
+
+ENTRYPOINT ["./application", "-Dquarkus.http.host=0.0.0.0"]
diff --git a/dhfs-parent/dhfs-fs/src/main/docker/Dockerfile.native-micro b/dhfs-parent/dhfs-fs/src/main/docker/Dockerfile.native-micro
new file mode 100644
index 00000000..4bd4c6de
--- /dev/null
+++ b/dhfs-parent/dhfs-fs/src/main/docker/Dockerfile.native-micro
@@ -0,0 +1,30 @@
+####
+# This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode.
+# It uses a micro base image, tuned for Quarkus native executables.
+# It reduces the size of the resulting container image.
+# Check https://quarkus.io/guides/quarkus-runtime-base-image for further information about this image.
+#
+# Before building the container image run:
+#
+# ./mvnw package -Dnative
+#
+# Then, build the image with:
+#
+# docker build -f src/main/docker/Dockerfile.native-micro -t quarkus/server .
+#
+# Then run the container using:
+#
+# docker run -i --rm -p 8080:8080 quarkus/server
+#
+###
+FROM quay.io/quarkus/quarkus-micro-image:2.0
+WORKDIR /work/
+RUN chown 1001 /work \
+ && chmod "g+rwX" /work \
+ && chown 1001:root /work
+COPY --chown=1001:root target/*-runner /work/application
+
+EXPOSE 8080
+USER 1001
+
+ENTRYPOINT ["./application", "-Dquarkus.http.host=0.0.0.0"]
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/objects/ChunkData.java b/dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/objects/ChunkData.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/objects/ChunkData.java
rename to dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/objects/ChunkData.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/objects/ChunkDataProtoSerializer.java b/dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/objects/ChunkDataProtoSerializer.java
similarity index 93%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/objects/ChunkDataProtoSerializer.java
rename to dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/objects/ChunkDataProtoSerializer.java
index f5c6dd52..1c50efcd 100644
--- a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/objects/ChunkDataProtoSerializer.java
+++ b/dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/objects/ChunkDataProtoSerializer.java
@@ -1,6 +1,6 @@
package com.usatiuk.dhfs.files.objects;
-import com.usatiuk.autoprotomap.runtime.ProtoSerializer;
+import com.usatiuk.dhfs.ProtoSerializer;
import com.usatiuk.objects.JObjectKey;
import com.usatiuk.dhfs.persistence.ChunkDataP;
import com.usatiuk.dhfs.persistence.JObjectKeyP;
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/objects/File.java b/dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/objects/File.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/objects/File.java
rename to dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/objects/File.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/objects/FileDto.java b/dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/objects/FileDto.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/objects/FileDto.java
rename to dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/objects/FileDto.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/objects/FileDtoMapper.java b/dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/objects/FileDtoMapper.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/objects/FileDtoMapper.java
rename to dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/objects/FileDtoMapper.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/objects/FileHelper.java b/dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/objects/FileHelper.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/objects/FileHelper.java
rename to dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/objects/FileHelper.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/objects/FileProtoSerializer.java b/dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/objects/FileProtoSerializer.java
similarity index 92%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/objects/FileProtoSerializer.java
rename to dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/objects/FileProtoSerializer.java
index eef0b550..5460f266 100644
--- a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/objects/FileProtoSerializer.java
+++ b/dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/objects/FileProtoSerializer.java
@@ -1,6 +1,6 @@
package com.usatiuk.dhfs.files.objects;
-import com.usatiuk.autoprotomap.runtime.ProtoSerializer;
+import com.usatiuk.dhfs.ProtoSerializer;
import com.usatiuk.dhfs.persistence.FileDtoP;
import com.usatiuk.dhfs.utils.SerializationHelper;
import jakarta.inject.Singleton;
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/objects/FileSyncHandler.java b/dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/objects/FileSyncHandler.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/objects/FileSyncHandler.java
rename to dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/objects/FileSyncHandler.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/service/DhfsFileService.java b/dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/service/DhfsFileService.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/service/DhfsFileService.java
rename to dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/service/DhfsFileService.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/service/DhfsFileServiceImpl.java b/dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/service/DhfsFileServiceImpl.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/service/DhfsFileServiceImpl.java
rename to dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/service/DhfsFileServiceImpl.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/service/DirectoryNotEmptyException.java b/dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/service/DirectoryNotEmptyException.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/service/DirectoryNotEmptyException.java
rename to dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/service/DirectoryNotEmptyException.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/service/GetattrRes.java b/dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/service/GetattrRes.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/service/GetattrRes.java
rename to dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/service/GetattrRes.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/service/GetattrType.java b/dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/service/GetattrType.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/files/service/GetattrType.java
rename to dhfs-parent/dhfs-fs/src/main/java/com/usatiuk/dhfs/files/service/GetattrType.java
diff --git a/dhfs-parent/dhfs-fs/src/main/resources/META-INF/beans.xml b/dhfs-parent/dhfs-fs/src/main/resources/META-INF/beans.xml
new file mode 100644
index 00000000..e69de29b
diff --git a/dhfs-parent/dhfs-fs/src/main/resources/application.properties b/dhfs-parent/dhfs-fs/src/main/resources/application.properties
new file mode 100644
index 00000000..f3000b63
--- /dev/null
+++ b/dhfs-parent/dhfs-fs/src/main/resources/application.properties
@@ -0,0 +1,34 @@
+quarkus.grpc.server.use-separate-server=false
+dhfs.objects.peerdiscovery.port=42069
+dhfs.objects.peerdiscovery.interval=4s
+dhfs.objects.peerdiscovery.broadcast=true
+dhfs.objects.sync.timeout=30
+dhfs.objects.sync.ping.timeout=5
+dhfs.objects.invalidation.threads=16
+dhfs.objects.invalidation.delay=1000
+dhfs.objects.reconnect_interval=5s
+dhfs.objects.write_log=false
+dhfs.objects.periodic-push-op-interval=5m
+dhfs.fuse.root=${HOME}/dhfs_default/fuse
+dhfs.objects.persistence.stuff.root=${HOME}/dhfs_default/data/stuff
+dhfs.fuse.debug=false
+dhfs.fuse.enabled=true
+dhfs.files.allow_recursive_delete=false
+dhfs.files.target_chunk_size=2097152
+dhfs.files.target_chunk_alignment=19
+dhfs.objects.deletion.delay=1000
+dhfs.objects.deletion.can-delete-retry-delay=10000
+dhfs.objects.ref_verification=true
+dhfs.files.use_hash_for_chunks=false
+dhfs.objects.autosync.threads=16
+dhfs.objects.autosync.download-all=false
+dhfs.objects.move-processor.threads=16
+dhfs.objects.ref-processor.threads=16
+dhfs.objects.opsender.batch-size=100
+dhfs.objects.lock_timeout_secs=2
+dhfs.local-discovery=true
+dhfs.peerdiscovery.timeout=10000
+quarkus.log.category."com.usatiuk".min-level=TRACE
+quarkus.log.category."com.usatiuk".level=TRACE
+quarkus.http.insecure-requests=enabled
+quarkus.http.ssl.client-auth=required
diff --git a/dhfs-parent/dhfs-fs/src/test/java/com/usatiuk/dhfs/TempDataProfile.java b/dhfs-parent/dhfs-fs/src/test/java/com/usatiuk/dhfs/TempDataProfile.java
new file mode 100644
index 00000000..e5a9f59b
--- /dev/null
+++ b/dhfs-parent/dhfs-fs/src/test/java/com/usatiuk/dhfs/TempDataProfile.java
@@ -0,0 +1,29 @@
+package com.usatiuk.dhfs;
+
+import io.quarkus.test.junit.QuarkusTestProfile;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.HashMap;
+import java.util.Map;
+
+abstract public class TempDataProfile implements QuarkusTestProfile {
+ protected void getConfigOverrides(Map toPut) {
+ }
+
+ @Override
+ final public Map getConfigOverrides() {
+ Path tempDirWithPrefix;
+ try {
+ tempDirWithPrefix = Files.createTempDirectory("dhfs-test");
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ var ret = new HashMap();
+ ret.put("dhfs.objects.persistence.files.root", tempDirWithPrefix.resolve("dhfs_root_test").toString());
+ ret.put("dhfs.fuse.root", tempDirWithPrefix.resolve("dhfs_fuse_root_test").toString());
+ getConfigOverrides(ret);
+ return ret;
+ }
+}
diff --git a/dhfs-parent/dhfs-fs/src/test/java/com/usatiuk/dhfs/TestDataCleaner.java b/dhfs-parent/dhfs-fs/src/test/java/com/usatiuk/dhfs/TestDataCleaner.java
new file mode 100644
index 00000000..b3659d01
--- /dev/null
+++ b/dhfs-parent/dhfs-fs/src/test/java/com/usatiuk/dhfs/TestDataCleaner.java
@@ -0,0 +1,40 @@
+package com.usatiuk.dhfs;
+
+import io.quarkus.logging.Log;
+import io.quarkus.runtime.ShutdownEvent;
+import io.quarkus.runtime.StartupEvent;
+import jakarta.annotation.Priority;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.event.Observes;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Path;
+import java.util.Objects;
+
+@ApplicationScoped
+public class TestDataCleaner {
+ @ConfigProperty(name = "dhfs.objects.persistence.files.root")
+ String tempDirectory;
+
+ void init(@Observes @Priority(1) StartupEvent event) throws IOException {
+ try {
+ purgeDirectory(Path.of(tempDirectory).toFile());
+ } catch (Exception ignored) {
+ Log.warn("Couldn't cleanup test data on init");
+ }
+ }
+
+ void shutdown(@Observes @Priority(1000000000) ShutdownEvent event) throws IOException {
+ purgeDirectory(Path.of(tempDirectory).toFile());
+ }
+
+ void purgeDirectory(File dir) {
+ for (File file : Objects.requireNonNull(dir.listFiles())) {
+ if (file.isDirectory())
+ purgeDirectory(file);
+ file.delete();
+ }
+ }
+}
diff --git a/dhfs-parent/server/src/test/java/com/usatiuk/dhfs/benchmarks/Benchmarker.java b/dhfs-parent/dhfs-fs/src/test/java/com/usatiuk/dhfs/benchmarks/Benchmarker.java
similarity index 100%
rename from dhfs-parent/server/src/test/java/com/usatiuk/dhfs/benchmarks/Benchmarker.java
rename to dhfs-parent/dhfs-fs/src/test/java/com/usatiuk/dhfs/benchmarks/Benchmarker.java
diff --git a/dhfs-parent/server/src/test/java/com/usatiuk/dhfs/benchmarks/DhfsFileBenchmarkTest.java b/dhfs-parent/dhfs-fs/src/test/java/com/usatiuk/dhfs/benchmarks/DhfsFileBenchmarkTest.java
similarity index 100%
rename from dhfs-parent/server/src/test/java/com/usatiuk/dhfs/benchmarks/DhfsFileBenchmarkTest.java
rename to dhfs-parent/dhfs-fs/src/test/java/com/usatiuk/dhfs/benchmarks/DhfsFileBenchmarkTest.java
diff --git a/dhfs-parent/server/src/test/java/com/usatiuk/dhfs/files/DhfsFileServiceSimpleTest.java b/dhfs-parent/dhfs-fs/src/test/java/com/usatiuk/dhfs/files/DhfsFileServiceSimpleTest.java
similarity index 100%
rename from dhfs-parent/server/src/test/java/com/usatiuk/dhfs/files/DhfsFileServiceSimpleTest.java
rename to dhfs-parent/dhfs-fs/src/test/java/com/usatiuk/dhfs/files/DhfsFileServiceSimpleTest.java
diff --git a/dhfs-parent/server/src/test/java/com/usatiuk/dhfs/files/DhfsFileServiceSimpleTestImpl.java b/dhfs-parent/dhfs-fs/src/test/java/com/usatiuk/dhfs/files/DhfsFileServiceSimpleTestImpl.java
similarity index 100%
rename from dhfs-parent/server/src/test/java/com/usatiuk/dhfs/files/DhfsFileServiceSimpleTestImpl.java
rename to dhfs-parent/dhfs-fs/src/test/java/com/usatiuk/dhfs/files/DhfsFileServiceSimpleTestImpl.java
diff --git a/dhfs-parent/server/src/test/java/com/usatiuk/dhfs/files/DhfsFileServiceSimpleTestNoChunkingTest.java b/dhfs-parent/dhfs-fs/src/test/java/com/usatiuk/dhfs/files/DhfsFileServiceSimpleTestNoChunkingTest.java
similarity index 100%
rename from dhfs-parent/server/src/test/java/com/usatiuk/dhfs/files/DhfsFileServiceSimpleTestNoChunkingTest.java
rename to dhfs-parent/dhfs-fs/src/test/java/com/usatiuk/dhfs/files/DhfsFileServiceSimpleTestNoChunkingTest.java
diff --git a/dhfs-parent/server/src/test/java/com/usatiuk/dhfs/files/DhfsFileServiceSimpleTestSmallChunkingTest.java b/dhfs-parent/dhfs-fs/src/test/java/com/usatiuk/dhfs/files/DhfsFileServiceSimpleTestSmallChunkingTest.java
similarity index 100%
rename from dhfs-parent/server/src/test/java/com/usatiuk/dhfs/files/DhfsFileServiceSimpleTestSmallChunkingTest.java
rename to dhfs-parent/dhfs-fs/src/test/java/com/usatiuk/dhfs/files/DhfsFileServiceSimpleTestSmallChunkingTest.java
diff --git a/dhfs-parent/dhfs-fs/src/test/resources/application.properties b/dhfs-parent/dhfs-fs/src/test/resources/application.properties
new file mode 100644
index 00000000..ecef50b6
--- /dev/null
+++ b/dhfs-parent/dhfs-fs/src/test/resources/application.properties
@@ -0,0 +1,12 @@
+dhfs.objects.persistence.files.root=${HOME}/dhfs_data/dhfs_root_test
+dhfs.objects.root=${HOME}/dhfs_data/dhfs_root_d_test
+dhfs.fuse.root=${HOME}/dhfs_data/dhfs_fuse_root_test
+dhfs.objects.ref_verification=true
+dhfs.objects.deletion.delay=0
+quarkus.log.category."com.usatiuk.dhfs".level=TRACE
+quarkus.log.category."com.usatiuk.dhfs".min-level=TRACE
+quarkus.class-loading.parent-first-artifacts=com.usatiuk.dhfs:supportlib
+quarkus.http.test-port=0
+quarkus.http.test-ssl-port=0
+dhfs.local-discovery=false
+dhfs.objects.persistence.snapshot-extra-checks=true
\ No newline at end of file
diff --git a/dhfs-parent/dhfs-fuse/.dockerignore b/dhfs-parent/dhfs-fuse/.dockerignore
new file mode 100644
index 00000000..94810d00
--- /dev/null
+++ b/dhfs-parent/dhfs-fuse/.dockerignore
@@ -0,0 +1,5 @@
+*
+!target/*-runner
+!target/*-runner.jar
+!target/lib/*
+!target/quarkus-app/*
\ No newline at end of file
diff --git a/dhfs-parent/dhfs-fuse/.gitignore b/dhfs-parent/dhfs-fuse/.gitignore
new file mode 100644
index 00000000..8c7863e7
--- /dev/null
+++ b/dhfs-parent/dhfs-fuse/.gitignore
@@ -0,0 +1,43 @@
+#Maven
+target/
+pom.xml.tag
+pom.xml.releaseBackup
+pom.xml.versionsBackup
+release.properties
+.flattened-pom.xml
+
+# Eclipse
+.project
+.classpath
+.settings/
+bin/
+
+# IntelliJ
+.idea
+*.ipr
+*.iml
+*.iws
+
+# NetBeans
+nb-configuration.xml
+
+# Visual Studio Code
+.vscode
+.factorypath
+
+# OSX
+.DS_Store
+
+# Vim
+*.swp
+*.swo
+
+# patch
+*.orig
+*.rej
+
+# Local environment
+.env
+
+# Plugin directory
+/.quarkus/cli/plugins/
diff --git a/dhfs-parent/dhfs-fuse/Dockerfile b/dhfs-parent/dhfs-fuse/Dockerfile
new file mode 100644
index 00000000..62bace54
--- /dev/null
+++ b/dhfs-parent/dhfs-fuse/Dockerfile
@@ -0,0 +1,2 @@
+FROM azul/zulu-openjdk-debian:21-jre-latest
+RUN apt update && apt install -y libfuse2 curl
\ No newline at end of file
diff --git a/dhfs-parent/dhfs-fuse/docker-compose.yml b/dhfs-parent/dhfs-fuse/docker-compose.yml
new file mode 100644
index 00000000..c45708ba
--- /dev/null
+++ b/dhfs-parent/dhfs-fuse/docker-compose.yml
@@ -0,0 +1,43 @@
+version: "3.2"
+
+services:
+ dhfs1:
+ build: .
+ privileged: true
+ devices:
+ - /dev/fuse
+ volumes:
+ - $HOME/dhfs/dhfs1:/dhfs_root
+ - $HOME/dhfs/dhfs1_f:/dhfs_root/fuse:rshared
+ - ./target/quarkus-app:/app
+ command: "java --add-exports java.base/sun.nio.ch=ALL-UNNAMED
+ -Ddhfs.objects.persistence.files.root=/dhfs_root/p
+ -Ddhfs.objects.root=/dhfs_root/d
+ -Ddhfs.fuse.root=/dhfs_root/fuse -Dquarkus.http.host=0.0.0.0
+ -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
+ -jar /app/quarkus-run.jar"
+ ports:
+ - 8080:8080
+ - 8081:8443
+ - 5005:5005
+ dhfs2:
+ build: .
+ privileged: true
+ devices:
+ - /dev/fuse
+ volumes:
+ - $HOME/dhfs/dhfs2:/dhfs_root
+ - $HOME/dhfs/dhfs2_f:/dhfs_root/fuse:rshared
+ - ./target/quarkus-app:/app
+ command: "java --add-exports java.base/sun.nio.ch=ALL-UNNAMED
+ --add-exports java.base/jdk.internal.access=ALL-UNNAMED
+ --add-opens=java.base/java.nio=ALL-UNNAMED
+ -Ddhfs.objects.persistence.files.root=/dhfs_root/p
+ -Ddhfs.objects.root=/dhfs_root/d
+ -Ddhfs.fuse.root=/dhfs_root/fuse -Dquarkus.http.host=0.0.0.0
+ -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5010
+ -jar /app/quarkus-run.jar"
+ ports:
+ - 8090:8080
+ - 8091:8443
+ - 5010:5010
diff --git a/dhfs-parent/server/pom.xml b/dhfs-parent/dhfs-fuse/pom.xml
similarity index 96%
rename from dhfs-parent/server/pom.xml
rename to dhfs-parent/dhfs-fuse/pom.xml
index 10ad0fe2..a9a531ba 100644
--- a/dhfs-parent/server/pom.xml
+++ b/dhfs-parent/dhfs-fuse/pom.xml
@@ -3,8 +3,8 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0com.usatiuk.dhfs
- server
- 1.0.0-SNAPSHOT
+ dhfs-fuse
+ 1.0-SNAPSHOTcom.usatiuk.dhfs
@@ -23,17 +23,6 @@
awaitilitytest
-
- com.usatiuk
- autoprotomap
- 1.0-SNAPSHOT
-
-
- com.usatiuk
- autoprotomap-deployment
- 1.0-SNAPSHOT
- provided
- org.bouncycastlebcprov-jdk18on
@@ -148,6 +137,16 @@
objects1.0-SNAPSHOT
+
+ com.usatiuk.dhfs
+ dhfs-fs
+ 1.0-SNAPSHOT
+
+
+ com.usatiuk.dhfs
+ sync-base
+ 1.0-SNAPSHOT
+ com.usatiuk.dhfsutils
diff --git a/dhfs-parent/dhfs-fuse/src/main/docker/Dockerfile.jvm b/dhfs-parent/dhfs-fuse/src/main/docker/Dockerfile.jvm
new file mode 100644
index 00000000..b1de5988
--- /dev/null
+++ b/dhfs-parent/dhfs-fuse/src/main/docker/Dockerfile.jvm
@@ -0,0 +1,97 @@
+####
+# This Dockerfile is used in order to build a container that runs the Quarkus application in JVM mode
+#
+# Before building the container image run:
+#
+# ./mvnw package
+#
+# Then, build the image with:
+#
+# docker build -f src/main/docker/Dockerfile.jvm -t quarkus/server-jvm .
+#
+# Then run the container using:
+#
+# docker run -i --rm -p 8080:8080 quarkus/server-jvm
+#
+# If you want to include the debug port into your docker image
+# you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005.
+# Additionally you will have to set -e JAVA_DEBUG=true and -e JAVA_DEBUG_PORT=*:5005
+# when running the container
+#
+# Then run the container using :
+#
+# docker run -i --rm -p 8080:8080 quarkus/server-jvm
+#
+# This image uses the `run-java.sh` script to run the application.
+# This scripts computes the command line to execute your Java application, and
+# includes memory/GC tuning.
+# You can configure the behavior using the following environment properties:
+# - JAVA_OPTS: JVM options passed to the `java` command (example: "-verbose:class")
+# - JAVA_OPTS_APPEND: User specified Java options to be appended to generated options
+# in JAVA_OPTS (example: "-Dsome.property=foo")
+# - JAVA_MAX_MEM_RATIO: Is used when no `-Xmx` option is given in JAVA_OPTS. This is
+# used to calculate a default maximal heap memory based on a containers restriction.
+# If used in a container without any memory constraints for the container then this
+# option has no effect. If there is a memory constraint then `-Xmx` is set to a ratio
+# of the container available memory as set here. The default is `50` which means 50%
+# of the available memory is used as an upper boundary. You can skip this mechanism by
+# setting this value to `0` in which case no `-Xmx` option is added.
+# - JAVA_INITIAL_MEM_RATIO: Is used when no `-Xms` option is given in JAVA_OPTS. This
+# is used to calculate a default initial heap memory based on the maximum heap memory.
+# If used in a container without any memory constraints for the container then this
+# option has no effect. If there is a memory constraint then `-Xms` is set to a ratio
+# of the `-Xmx` memory as set here. The default is `25` which means 25% of the `-Xmx`
+# is used as the initial heap size. You can skip this mechanism by setting this value
+# to `0` in which case no `-Xms` option is added (example: "25")
+# - JAVA_MAX_INITIAL_MEM: Is used when no `-Xms` option is given in JAVA_OPTS.
+# This is used to calculate the maximum value of the initial heap memory. If used in
+# a container without any memory constraints for the container then this option has
+# no effect. If there is a memory constraint then `-Xms` is limited to the value set
+# here. The default is 4096MB which means the calculated value of `-Xms` never will
+# be greater than 4096MB. The value of this variable is expressed in MB (example: "4096")
+# - JAVA_DIAGNOSTICS: Set this to get some diagnostics information to standard output
+# when things are happening. This option, if set to true, will set
+# `-XX:+UnlockDiagnosticVMOptions`. Disabled by default (example: "true").
+# - JAVA_DEBUG: If set remote debugging will be switched on. Disabled by default (example:
+# true").
+# - JAVA_DEBUG_PORT: Port used for remote debugging. Defaults to 5005 (example: "8787").
+# - CONTAINER_CORE_LIMIT: A calculated core limit as described in
+# https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt. (example: "2")
+# - CONTAINER_MAX_MEMORY: Memory limit given to the container (example: "1024").
+# - GC_MIN_HEAP_FREE_RATIO: Minimum percentage of heap free after GC to avoid expansion.
+# (example: "20")
+# - GC_MAX_HEAP_FREE_RATIO: Maximum percentage of heap free after GC to avoid shrinking.
+# (example: "40")
+# - GC_TIME_RATIO: Specifies the ratio of the time spent outside the garbage collection.
+# (example: "4")
+# - GC_ADAPTIVE_SIZE_POLICY_WEIGHT: The weighting given to the current GC time versus
+# previous GC times. (example: "90")
+# - GC_METASPACE_SIZE: The initial metaspace size. (example: "20")
+# - GC_MAX_METASPACE_SIZE: The maximum metaspace size. (example: "100")
+# - GC_CONTAINER_OPTIONS: Specify Java GC to use. The value of this variable should
+# contain the necessary JRE command-line options to specify the required GC, which
+# will override the default of `-XX:+UseParallelGC` (example: -XX:+UseG1GC).
+# - HTTPS_PROXY: The location of the https proxy. (example: "myuser@127.0.0.1:8080")
+# - HTTP_PROXY: The location of the http proxy. (example: "myuser@127.0.0.1:8080")
+# - NO_PROXY: A comma separated lists of hosts, IP addresses or domains that can be
+# accessed directly. (example: "foo.example.com,bar.example.com")
+#
+###
+FROM registry.access.redhat.com/ubi8/openjdk-21:1.18
+
+ENV LANGUAGE='en_US:en'
+
+
+# We make four distinct layers so if there are application changes the library layers can be re-used
+COPY --chown=185 target/quarkus-app/lib/ /deployments/lib/
+COPY --chown=185 target/quarkus-app/*.jar /deployments/
+COPY --chown=185 target/quarkus-app/app/ /deployments/app/
+COPY --chown=185 target/quarkus-app/quarkus/ /deployments/quarkus/
+
+EXPOSE 8080
+USER 185
+ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
+ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"
+
+ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ]
+
diff --git a/dhfs-parent/dhfs-fuse/src/main/docker/Dockerfile.legacy-jar b/dhfs-parent/dhfs-fuse/src/main/docker/Dockerfile.legacy-jar
new file mode 100644
index 00000000..f66a1665
--- /dev/null
+++ b/dhfs-parent/dhfs-fuse/src/main/docker/Dockerfile.legacy-jar
@@ -0,0 +1,93 @@
+####
+# This Dockerfile is used in order to build a container that runs the Quarkus application in JVM mode
+#
+# Before building the container image run:
+#
+# ./mvnw package -Dquarkus.package.jar.type=legacy-jar
+#
+# Then, build the image with:
+#
+# docker build -f src/main/docker/Dockerfile.legacy-jar -t quarkus/server-legacy-jar .
+#
+# Then run the container using:
+#
+# docker run -i --rm -p 8080:8080 quarkus/server-legacy-jar
+#
+# If you want to include the debug port into your docker image
+# you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005.
+# Additionally you will have to set -e JAVA_DEBUG=true and -e JAVA_DEBUG_PORT=*:5005
+# when running the container
+#
+# Then run the container using :
+#
+# docker run -i --rm -p 8080:8080 quarkus/server-legacy-jar
+#
+# This image uses the `run-java.sh` script to run the application.
+# This scripts computes the command line to execute your Java application, and
+# includes memory/GC tuning.
+# You can configure the behavior using the following environment properties:
+# - JAVA_OPTS: JVM options passed to the `java` command (example: "-verbose:class")
+# - JAVA_OPTS_APPEND: User specified Java options to be appended to generated options
+# in JAVA_OPTS (example: "-Dsome.property=foo")
+# - JAVA_MAX_MEM_RATIO: Is used when no `-Xmx` option is given in JAVA_OPTS. This is
+# used to calculate a default maximal heap memory based on a containers restriction.
+# If used in a container without any memory constraints for the container then this
+# option has no effect. If there is a memory constraint then `-Xmx` is set to a ratio
+# of the container available memory as set here. The default is `50` which means 50%
+# of the available memory is used as an upper boundary. You can skip this mechanism by
+# setting this value to `0` in which case no `-Xmx` option is added.
+# - JAVA_INITIAL_MEM_RATIO: Is used when no `-Xms` option is given in JAVA_OPTS. This
+# is used to calculate a default initial heap memory based on the maximum heap memory.
+# If used in a container without any memory constraints for the container then this
+# option has no effect. If there is a memory constraint then `-Xms` is set to a ratio
+# of the `-Xmx` memory as set here. The default is `25` which means 25% of the `-Xmx`
+# is used as the initial heap size. You can skip this mechanism by setting this value
+# to `0` in which case no `-Xms` option is added (example: "25")
+# - JAVA_MAX_INITIAL_MEM: Is used when no `-Xms` option is given in JAVA_OPTS.
+# This is used to calculate the maximum value of the initial heap memory. If used in
+# a container without any memory constraints for the container then this option has
+# no effect. If there is a memory constraint then `-Xms` is limited to the value set
+# here. The default is 4096MB which means the calculated value of `-Xms` never will
+# be greater than 4096MB. The value of this variable is expressed in MB (example: "4096")
+# - JAVA_DIAGNOSTICS: Set this to get some diagnostics information to standard output
+# when things are happening. This option, if set to true, will set
+# `-XX:+UnlockDiagnosticVMOptions`. Disabled by default (example: "true").
+# - JAVA_DEBUG: If set remote debugging will be switched on. Disabled by default (example:
+# true").
+# - JAVA_DEBUG_PORT: Port used for remote debugging. Defaults to 5005 (example: "8787").
+# - CONTAINER_CORE_LIMIT: A calculated core limit as described in
+# https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt. (example: "2")
+# - CONTAINER_MAX_MEMORY: Memory limit given to the container (example: "1024").
+# - GC_MIN_HEAP_FREE_RATIO: Minimum percentage of heap free after GC to avoid expansion.
+# (example: "20")
+# - GC_MAX_HEAP_FREE_RATIO: Maximum percentage of heap free after GC to avoid shrinking.
+# (example: "40")
+# - GC_TIME_RATIO: Specifies the ratio of the time spent outside the garbage collection.
+# (example: "4")
+# - GC_ADAPTIVE_SIZE_POLICY_WEIGHT: The weighting given to the current GC time versus
+# previous GC times. (example: "90")
+# - GC_METASPACE_SIZE: The initial metaspace size. (example: "20")
+# - GC_MAX_METASPACE_SIZE: The maximum metaspace size. (example: "100")
+# - GC_CONTAINER_OPTIONS: Specify Java GC to use. The value of this variable should
+# contain the necessary JRE command-line options to specify the required GC, which
+# will override the default of `-XX:+UseParallelGC` (example: -XX:+UseG1GC).
+# - HTTPS_PROXY: The location of the https proxy. (example: "myuser@127.0.0.1:8080")
+# - HTTP_PROXY: The location of the http proxy. (example: "myuser@127.0.0.1:8080")
+# - NO_PROXY: A comma separated lists of hosts, IP addresses or domains that can be
+# accessed directly. (example: "foo.example.com,bar.example.com")
+#
+###
+FROM registry.access.redhat.com/ubi8/openjdk-21:1.18
+
+ENV LANGUAGE='en_US:en'
+
+
+COPY target/lib/* /deployments/lib/
+COPY target/*-runner.jar /deployments/quarkus-run.jar
+
+EXPOSE 8080
+USER 185
+ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
+ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"
+
+ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ]
diff --git a/dhfs-parent/dhfs-fuse/src/main/docker/Dockerfile.native b/dhfs-parent/dhfs-fuse/src/main/docker/Dockerfile.native
new file mode 100644
index 00000000..226e7c71
--- /dev/null
+++ b/dhfs-parent/dhfs-fuse/src/main/docker/Dockerfile.native
@@ -0,0 +1,27 @@
+####
+# This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode.
+#
+# Before building the container image run:
+#
+# ./mvnw package -Dnative
+#
+# Then, build the image with:
+#
+# docker build -f src/main/docker/Dockerfile.native -t quarkus/server .
+#
+# Then run the container using:
+#
+# docker run -i --rm -p 8080:8080 quarkus/server
+#
+###
+FROM registry.access.redhat.com/ubi8/ubi-minimal:8.9
+WORKDIR /work/
+RUN chown 1001 /work \
+ && chmod "g+rwX" /work \
+ && chown 1001:root /work
+COPY --chown=1001:root target/*-runner /work/application
+
+EXPOSE 8080
+USER 1001
+
+ENTRYPOINT ["./application", "-Dquarkus.http.host=0.0.0.0"]
diff --git a/dhfs-parent/dhfs-fuse/src/main/docker/Dockerfile.native-micro b/dhfs-parent/dhfs-fuse/src/main/docker/Dockerfile.native-micro
new file mode 100644
index 00000000..4bd4c6de
--- /dev/null
+++ b/dhfs-parent/dhfs-fuse/src/main/docker/Dockerfile.native-micro
@@ -0,0 +1,30 @@
+####
+# This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode.
+# It uses a micro base image, tuned for Quarkus native executables.
+# It reduces the size of the resulting container image.
+# Check https://quarkus.io/guides/quarkus-runtime-base-image for further information about this image.
+#
+# Before building the container image run:
+#
+# ./mvnw package -Dnative
+#
+# Then, build the image with:
+#
+# docker build -f src/main/docker/Dockerfile.native-micro -t quarkus/server .
+#
+# Then run the container using:
+#
+# docker run -i --rm -p 8080:8080 quarkus/server
+#
+###
+FROM quay.io/quarkus/quarkus-micro-image:2.0
+WORKDIR /work/
+RUN chown 1001 /work \
+ && chmod "g+rwX" /work \
+ && chown 1001:root /work
+COPY --chown=1001:root target/*-runner /work/application
+
+EXPOSE 8080
+USER 1001
+
+ENTRYPOINT ["./application", "-Dquarkus.http.host=0.0.0.0"]
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/fuse/DhfsFuse.java b/dhfs-parent/dhfs-fuse/src/main/java/com/usatiuk/dhfs/fuse/DhfsFuse.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/fuse/DhfsFuse.java
rename to dhfs-parent/dhfs-fuse/src/main/java/com/usatiuk/dhfs/fuse/DhfsFuse.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/fuse/JnrPtrByteOutput.java b/dhfs-parent/dhfs-fuse/src/main/java/com/usatiuk/dhfs/fuse/JnrPtrByteOutput.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/fuse/JnrPtrByteOutput.java
rename to dhfs-parent/dhfs-fuse/src/main/java/com/usatiuk/dhfs/fuse/JnrPtrByteOutput.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/fuse/JnrPtrByteOutputAccessors.java b/dhfs-parent/dhfs-fuse/src/main/java/com/usatiuk/dhfs/fuse/JnrPtrByteOutputAccessors.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/fuse/JnrPtrByteOutputAccessors.java
rename to dhfs-parent/dhfs-fuse/src/main/java/com/usatiuk/dhfs/fuse/JnrPtrByteOutputAccessors.java
diff --git a/dhfs-parent/dhfs-fuse/src/main/resources/META-INF/beans.xml b/dhfs-parent/dhfs-fuse/src/main/resources/META-INF/beans.xml
new file mode 100644
index 00000000..e69de29b
diff --git a/dhfs-parent/dhfs-fuse/src/main/resources/application.properties b/dhfs-parent/dhfs-fuse/src/main/resources/application.properties
new file mode 100644
index 00000000..f3000b63
--- /dev/null
+++ b/dhfs-parent/dhfs-fuse/src/main/resources/application.properties
@@ -0,0 +1,34 @@
+quarkus.grpc.server.use-separate-server=false
+dhfs.objects.peerdiscovery.port=42069
+dhfs.objects.peerdiscovery.interval=4s
+dhfs.objects.peerdiscovery.broadcast=true
+dhfs.objects.sync.timeout=30
+dhfs.objects.sync.ping.timeout=5
+dhfs.objects.invalidation.threads=16
+dhfs.objects.invalidation.delay=1000
+dhfs.objects.reconnect_interval=5s
+dhfs.objects.write_log=false
+dhfs.objects.periodic-push-op-interval=5m
+dhfs.fuse.root=${HOME}/dhfs_default/fuse
+dhfs.objects.persistence.stuff.root=${HOME}/dhfs_default/data/stuff
+dhfs.fuse.debug=false
+dhfs.fuse.enabled=true
+dhfs.files.allow_recursive_delete=false
+dhfs.files.target_chunk_size=2097152
+dhfs.files.target_chunk_alignment=19
+dhfs.objects.deletion.delay=1000
+dhfs.objects.deletion.can-delete-retry-delay=10000
+dhfs.objects.ref_verification=true
+dhfs.files.use_hash_for_chunks=false
+dhfs.objects.autosync.threads=16
+dhfs.objects.autosync.download-all=false
+dhfs.objects.move-processor.threads=16
+dhfs.objects.ref-processor.threads=16
+dhfs.objects.opsender.batch-size=100
+dhfs.objects.lock_timeout_secs=2
+dhfs.local-discovery=true
+dhfs.peerdiscovery.timeout=10000
+quarkus.log.category."com.usatiuk".min-level=TRACE
+quarkus.log.category."com.usatiuk".level=TRACE
+quarkus.http.insecure-requests=enabled
+quarkus.http.ssl.client-auth=required
diff --git a/dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfs/TempDataProfile.java b/dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfs/TempDataProfile.java
new file mode 100644
index 00000000..e5a9f59b
--- /dev/null
+++ b/dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfs/TempDataProfile.java
@@ -0,0 +1,29 @@
+package com.usatiuk.dhfs;
+
+import io.quarkus.test.junit.QuarkusTestProfile;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.HashMap;
+import java.util.Map;
+
+abstract public class TempDataProfile implements QuarkusTestProfile {
+ protected void getConfigOverrides(Map toPut) {
+ }
+
+ @Override
+ final public Map getConfigOverrides() {
+ Path tempDirWithPrefix;
+ try {
+ tempDirWithPrefix = Files.createTempDirectory("dhfs-test");
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ var ret = new HashMap();
+ ret.put("dhfs.objects.persistence.files.root", tempDirWithPrefix.resolve("dhfs_root_test").toString());
+ ret.put("dhfs.fuse.root", tempDirWithPrefix.resolve("dhfs_fuse_root_test").toString());
+ getConfigOverrides(ret);
+ return ret;
+ }
+}
diff --git a/dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfs/TestDataCleaner.java b/dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfs/TestDataCleaner.java
new file mode 100644
index 00000000..b3659d01
--- /dev/null
+++ b/dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfs/TestDataCleaner.java
@@ -0,0 +1,40 @@
+package com.usatiuk.dhfs;
+
+import io.quarkus.logging.Log;
+import io.quarkus.runtime.ShutdownEvent;
+import io.quarkus.runtime.StartupEvent;
+import jakarta.annotation.Priority;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.event.Observes;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Path;
+import java.util.Objects;
+
+@ApplicationScoped
+public class TestDataCleaner {
+ @ConfigProperty(name = "dhfs.objects.persistence.files.root")
+ String tempDirectory;
+
+ void init(@Observes @Priority(1) StartupEvent event) throws IOException {
+ try {
+ purgeDirectory(Path.of(tempDirectory).toFile());
+ } catch (Exception ignored) {
+ Log.warn("Couldn't cleanup test data on init");
+ }
+ }
+
+ void shutdown(@Observes @Priority(1000000000) ShutdownEvent event) throws IOException {
+ purgeDirectory(Path.of(tempDirectory).toFile());
+ }
+
+ void purgeDirectory(File dir) {
+ for (File file : Objects.requireNonNull(dir.listFiles())) {
+ if (file.isDirectory())
+ purgeDirectory(file);
+ file.delete();
+ }
+ }
+}
diff --git a/dhfs-parent/server/src/test/java/com/usatiuk/dhfs/fuse/DhfsFuseTest.java b/dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfs/fuse/DhfsFuseTest.java
similarity index 100%
rename from dhfs-parent/server/src/test/java/com/usatiuk/dhfs/fuse/DhfsFuseTest.java
rename to dhfs-parent/dhfs-fuse/src/test/java/com/usatiuk/dhfs/fuse/DhfsFuseTest.java
diff --git a/dhfs-parent/dhfs-fuse/src/test/resources/application.properties b/dhfs-parent/dhfs-fuse/src/test/resources/application.properties
new file mode 100644
index 00000000..ecef50b6
--- /dev/null
+++ b/dhfs-parent/dhfs-fuse/src/test/resources/application.properties
@@ -0,0 +1,12 @@
+dhfs.objects.persistence.files.root=${HOME}/dhfs_data/dhfs_root_test
+dhfs.objects.root=${HOME}/dhfs_data/dhfs_root_d_test
+dhfs.fuse.root=${HOME}/dhfs_data/dhfs_fuse_root_test
+dhfs.objects.ref_verification=true
+dhfs.objects.deletion.delay=0
+quarkus.log.category."com.usatiuk.dhfs".level=TRACE
+quarkus.log.category."com.usatiuk.dhfs".min-level=TRACE
+quarkus.class-loading.parent-first-artifacts=com.usatiuk.dhfs:supportlib
+quarkus.http.test-port=0
+quarkus.http.test-ssl-port=0
+dhfs.local-discovery=false
+dhfs.objects.persistence.snapshot-extra-checks=true
\ No newline at end of file
diff --git a/dhfs-parent/pom.xml b/dhfs-parent/pom.xml
index a5a31263..124c5269 100644
--- a/dhfs-parent/pom.xml
+++ b/dhfs-parent/pom.xml
@@ -11,10 +11,12 @@
dhfs-parentpom
- server
+ sync-base
+ dhfs-fs
+ dhfs-fuse
+ dhfs-appkleppmanntreesupportlib
- autoprotomapobjectsutils
diff --git a/dhfs-parent/sync-base/.dockerignore b/dhfs-parent/sync-base/.dockerignore
new file mode 100644
index 00000000..94810d00
--- /dev/null
+++ b/dhfs-parent/sync-base/.dockerignore
@@ -0,0 +1,5 @@
+*
+!target/*-runner
+!target/*-runner.jar
+!target/lib/*
+!target/quarkus-app/*
\ No newline at end of file
diff --git a/dhfs-parent/sync-base/.gitignore b/dhfs-parent/sync-base/.gitignore
new file mode 100644
index 00000000..8c7863e7
--- /dev/null
+++ b/dhfs-parent/sync-base/.gitignore
@@ -0,0 +1,43 @@
+#Maven
+target/
+pom.xml.tag
+pom.xml.releaseBackup
+pom.xml.versionsBackup
+release.properties
+.flattened-pom.xml
+
+# Eclipse
+.project
+.classpath
+.settings/
+bin/
+
+# IntelliJ
+.idea
+*.ipr
+*.iml
+*.iws
+
+# NetBeans
+nb-configuration.xml
+
+# Visual Studio Code
+.vscode
+.factorypath
+
+# OSX
+.DS_Store
+
+# Vim
+*.swp
+*.swo
+
+# patch
+*.orig
+*.rej
+
+# Local environment
+.env
+
+# Plugin directory
+/.quarkus/cli/plugins/
diff --git a/dhfs-parent/sync-base/Dockerfile b/dhfs-parent/sync-base/Dockerfile
new file mode 100644
index 00000000..62bace54
--- /dev/null
+++ b/dhfs-parent/sync-base/Dockerfile
@@ -0,0 +1,2 @@
+FROM azul/zulu-openjdk-debian:21-jre-latest
+RUN apt update && apt install -y libfuse2 curl
\ No newline at end of file
diff --git a/dhfs-parent/sync-base/docker-compose.yml b/dhfs-parent/sync-base/docker-compose.yml
new file mode 100644
index 00000000..c45708ba
--- /dev/null
+++ b/dhfs-parent/sync-base/docker-compose.yml
@@ -0,0 +1,43 @@
+version: "3.2"
+
+services:
+ dhfs1:
+ build: .
+ privileged: true
+ devices:
+ - /dev/fuse
+ volumes:
+ - $HOME/dhfs/dhfs1:/dhfs_root
+ - $HOME/dhfs/dhfs1_f:/dhfs_root/fuse:rshared
+ - ./target/quarkus-app:/app
+ command: "java --add-exports java.base/sun.nio.ch=ALL-UNNAMED
+ -Ddhfs.objects.persistence.files.root=/dhfs_root/p
+ -Ddhfs.objects.root=/dhfs_root/d
+ -Ddhfs.fuse.root=/dhfs_root/fuse -Dquarkus.http.host=0.0.0.0
+ -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005
+ -jar /app/quarkus-run.jar"
+ ports:
+ - 8080:8080
+ - 8081:8443
+ - 5005:5005
+ dhfs2:
+ build: .
+ privileged: true
+ devices:
+ - /dev/fuse
+ volumes:
+ - $HOME/dhfs/dhfs2:/dhfs_root
+ - $HOME/dhfs/dhfs2_f:/dhfs_root/fuse:rshared
+ - ./target/quarkus-app:/app
+ command: "java --add-exports java.base/sun.nio.ch=ALL-UNNAMED
+ --add-exports java.base/jdk.internal.access=ALL-UNNAMED
+ --add-opens=java.base/java.nio=ALL-UNNAMED
+ -Ddhfs.objects.persistence.files.root=/dhfs_root/p
+ -Ddhfs.objects.root=/dhfs_root/d
+ -Ddhfs.fuse.root=/dhfs_root/fuse -Dquarkus.http.host=0.0.0.0
+ -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5010
+ -jar /app/quarkus-run.jar"
+ ports:
+ - 8090:8080
+ - 8091:8443
+ - 5010:5010
diff --git a/dhfs-parent/sync-base/pom.xml b/dhfs-parent/sync-base/pom.xml
new file mode 100644
index 00000000..2339b64b
--- /dev/null
+++ b/dhfs-parent/sync-base/pom.xml
@@ -0,0 +1,200 @@
+
+
+ 4.0.0
+ com.usatiuk.dhfs
+ sync-base
+ 1.0-SNAPSHOT
+
+
+ com.usatiuk.dhfs
+ parent
+ 1.0-SNAPSHOT
+
+
+
+
+ org.testcontainers
+ testcontainers
+ test
+
+
+ org.awaitility
+ awaitility
+ test
+
+
+ org.bouncycastle
+ bcprov-jdk18on
+
+
+ org.bouncycastle
+ bcpkix-jdk18on
+
+
+ io.quarkus
+ quarkus-security
+
+
+ net.openhft
+ zero-allocation-hashing
+
+
+ io.quarkus
+ quarkus-grpc
+
+
+ io.quarkus
+ quarkus-arc
+
+
+ io.quarkus
+ quarkus-rest
+
+
+ io.quarkus
+ quarkus-rest-client
+
+
+ io.quarkus
+ quarkus-rest-client-jsonb
+
+
+ io.quarkus
+ quarkus-rest-jsonb
+
+
+ io.quarkus
+ quarkus-scheduler
+
+
+ io.quarkus
+ quarkus-junit5
+ test
+
+
+ com.github.SerCeMan
+ jnr-fuse
+ 44ed40f8ce
+
+
+ com.github.jnr
+ jnr-ffi
+ 2.2.16
+
+
+ com.github.jnr
+ jnr-posix
+ 3.1.19
+
+
+ com.github.jnr
+ jnr-constants
+ 0.10.4
+
+
+ org.apache.commons
+ commons-lang3
+
+
+ commons-io
+ commons-io
+
+
+ org.jboss.slf4j
+ slf4j-jboss-logmanager
+ test
+
+
+ commons-codec
+ commons-codec
+
+
+ org.apache.commons
+ commons-collections4
+
+
+ org.pcollections
+ pcollections
+
+
+ org.apache.commons
+ commons-math3
+ 3.6.1
+
+
+ com.usatiuk
+ kleppmanntree
+ 1.0-SNAPSHOT
+
+
+ com.usatiuk.dhfs
+ supportlib
+ 1.0-SNAPSHOT
+
+
+ com.usatiuk.dhfs
+ objects
+ 1.0-SNAPSHOT
+
+
+ com.usatiuk.dhfs
+ utils
+ 1.0-SNAPSHOT
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ 1C
+ false
+ classes
+
+
+ false
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+
+
+
+ true
+
+
+ concurrent
+
+
+ 0.5
+
+ true
+ true
+
+
+
+
+ ${quarkus.platform.group-id}
+ quarkus-maven-plugin
+ ${quarkus.platform.version}
+ true
+
+
+ quarkus-plugin
+
+ build
+ generate-code
+ generate-code-tests
+
+
+
+
+
+
+
diff --git a/dhfs-parent/sync-base/src/main/docker/Dockerfile.jvm b/dhfs-parent/sync-base/src/main/docker/Dockerfile.jvm
new file mode 100644
index 00000000..b1de5988
--- /dev/null
+++ b/dhfs-parent/sync-base/src/main/docker/Dockerfile.jvm
@@ -0,0 +1,97 @@
+####
+# This Dockerfile is used in order to build a container that runs the Quarkus application in JVM mode
+#
+# Before building the container image run:
+#
+# ./mvnw package
+#
+# Then, build the image with:
+#
+# docker build -f src/main/docker/Dockerfile.jvm -t quarkus/server-jvm .
+#
+# Then run the container using:
+#
+# docker run -i --rm -p 8080:8080 quarkus/server-jvm
+#
+# If you want to include the debug port into your docker image
+# you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005.
+# Additionally you will have to set -e JAVA_DEBUG=true and -e JAVA_DEBUG_PORT=*:5005
+# when running the container
+#
+# Then run the container using :
+#
+# docker run -i --rm -p 8080:8080 quarkus/server-jvm
+#
+# This image uses the `run-java.sh` script to run the application.
+# This scripts computes the command line to execute your Java application, and
+# includes memory/GC tuning.
+# You can configure the behavior using the following environment properties:
+# - JAVA_OPTS: JVM options passed to the `java` command (example: "-verbose:class")
+# - JAVA_OPTS_APPEND: User specified Java options to be appended to generated options
+# in JAVA_OPTS (example: "-Dsome.property=foo")
+# - JAVA_MAX_MEM_RATIO: Is used when no `-Xmx` option is given in JAVA_OPTS. This is
+# used to calculate a default maximal heap memory based on a containers restriction.
+# If used in a container without any memory constraints for the container then this
+# option has no effect. If there is a memory constraint then `-Xmx` is set to a ratio
+# of the container available memory as set here. The default is `50` which means 50%
+# of the available memory is used as an upper boundary. You can skip this mechanism by
+# setting this value to `0` in which case no `-Xmx` option is added.
+# - JAVA_INITIAL_MEM_RATIO: Is used when no `-Xms` option is given in JAVA_OPTS. This
+# is used to calculate a default initial heap memory based on the maximum heap memory.
+# If used in a container without any memory constraints for the container then this
+# option has no effect. If there is a memory constraint then `-Xms` is set to a ratio
+# of the `-Xmx` memory as set here. The default is `25` which means 25% of the `-Xmx`
+# is used as the initial heap size. You can skip this mechanism by setting this value
+# to `0` in which case no `-Xms` option is added (example: "25")
+# - JAVA_MAX_INITIAL_MEM: Is used when no `-Xms` option is given in JAVA_OPTS.
+# This is used to calculate the maximum value of the initial heap memory. If used in
+# a container without any memory constraints for the container then this option has
+# no effect. If there is a memory constraint then `-Xms` is limited to the value set
+# here. The default is 4096MB which means the calculated value of `-Xms` never will
+# be greater than 4096MB. The value of this variable is expressed in MB (example: "4096")
+# - JAVA_DIAGNOSTICS: Set this to get some diagnostics information to standard output
+# when things are happening. This option, if set to true, will set
+# `-XX:+UnlockDiagnosticVMOptions`. Disabled by default (example: "true").
+# - JAVA_DEBUG: If set remote debugging will be switched on. Disabled by default (example:
+# true").
+# - JAVA_DEBUG_PORT: Port used for remote debugging. Defaults to 5005 (example: "8787").
+# - CONTAINER_CORE_LIMIT: A calculated core limit as described in
+# https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt. (example: "2")
+# - CONTAINER_MAX_MEMORY: Memory limit given to the container (example: "1024").
+# - GC_MIN_HEAP_FREE_RATIO: Minimum percentage of heap free after GC to avoid expansion.
+# (example: "20")
+# - GC_MAX_HEAP_FREE_RATIO: Maximum percentage of heap free after GC to avoid shrinking.
+# (example: "40")
+# - GC_TIME_RATIO: Specifies the ratio of the time spent outside the garbage collection.
+# (example: "4")
+# - GC_ADAPTIVE_SIZE_POLICY_WEIGHT: The weighting given to the current GC time versus
+# previous GC times. (example: "90")
+# - GC_METASPACE_SIZE: The initial metaspace size. (example: "20")
+# - GC_MAX_METASPACE_SIZE: The maximum metaspace size. (example: "100")
+# - GC_CONTAINER_OPTIONS: Specify Java GC to use. The value of this variable should
+# contain the necessary JRE command-line options to specify the required GC, which
+# will override the default of `-XX:+UseParallelGC` (example: -XX:+UseG1GC).
+# - HTTPS_PROXY: The location of the https proxy. (example: "myuser@127.0.0.1:8080")
+# - HTTP_PROXY: The location of the http proxy. (example: "myuser@127.0.0.1:8080")
+# - NO_PROXY: A comma separated lists of hosts, IP addresses or domains that can be
+# accessed directly. (example: "foo.example.com,bar.example.com")
+#
+###
+FROM registry.access.redhat.com/ubi8/openjdk-21:1.18
+
+ENV LANGUAGE='en_US:en'
+
+
+# We make four distinct layers so if there are application changes the library layers can be re-used
+COPY --chown=185 target/quarkus-app/lib/ /deployments/lib/
+COPY --chown=185 target/quarkus-app/*.jar /deployments/
+COPY --chown=185 target/quarkus-app/app/ /deployments/app/
+COPY --chown=185 target/quarkus-app/quarkus/ /deployments/quarkus/
+
+EXPOSE 8080
+USER 185
+ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
+ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"
+
+ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ]
+
diff --git a/dhfs-parent/sync-base/src/main/docker/Dockerfile.legacy-jar b/dhfs-parent/sync-base/src/main/docker/Dockerfile.legacy-jar
new file mode 100644
index 00000000..f66a1665
--- /dev/null
+++ b/dhfs-parent/sync-base/src/main/docker/Dockerfile.legacy-jar
@@ -0,0 +1,93 @@
+####
+# This Dockerfile is used in order to build a container that runs the Quarkus application in JVM mode
+#
+# Before building the container image run:
+#
+# ./mvnw package -Dquarkus.package.jar.type=legacy-jar
+#
+# Then, build the image with:
+#
+# docker build -f src/main/docker/Dockerfile.legacy-jar -t quarkus/server-legacy-jar .
+#
+# Then run the container using:
+#
+# docker run -i --rm -p 8080:8080 quarkus/server-legacy-jar
+#
+# If you want to include the debug port into your docker image
+# you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005.
+# Additionally you will have to set -e JAVA_DEBUG=true and -e JAVA_DEBUG_PORT=*:5005
+# when running the container
+#
+# Then run the container using :
+#
+# docker run -i --rm -p 8080:8080 quarkus/server-legacy-jar
+#
+# This image uses the `run-java.sh` script to run the application.
+# This scripts computes the command line to execute your Java application, and
+# includes memory/GC tuning.
+# You can configure the behavior using the following environment properties:
+# - JAVA_OPTS: JVM options passed to the `java` command (example: "-verbose:class")
+# - JAVA_OPTS_APPEND: User specified Java options to be appended to generated options
+# in JAVA_OPTS (example: "-Dsome.property=foo")
+# - JAVA_MAX_MEM_RATIO: Is used when no `-Xmx` option is given in JAVA_OPTS. This is
+# used to calculate a default maximal heap memory based on a containers restriction.
+# If used in a container without any memory constraints for the container then this
+# option has no effect. If there is a memory constraint then `-Xmx` is set to a ratio
+# of the container available memory as set here. The default is `50` which means 50%
+# of the available memory is used as an upper boundary. You can skip this mechanism by
+# setting this value to `0` in which case no `-Xmx` option is added.
+# - JAVA_INITIAL_MEM_RATIO: Is used when no `-Xms` option is given in JAVA_OPTS. This
+# is used to calculate a default initial heap memory based on the maximum heap memory.
+# If used in a container without any memory constraints for the container then this
+# option has no effect. If there is a memory constraint then `-Xms` is set to a ratio
+# of the `-Xmx` memory as set here. The default is `25` which means 25% of the `-Xmx`
+# is used as the initial heap size. You can skip this mechanism by setting this value
+# to `0` in which case no `-Xms` option is added (example: "25")
+# - JAVA_MAX_INITIAL_MEM: Is used when no `-Xms` option is given in JAVA_OPTS.
+# This is used to calculate the maximum value of the initial heap memory. If used in
+# a container without any memory constraints for the container then this option has
+# no effect. If there is a memory constraint then `-Xms` is limited to the value set
+# here. The default is 4096MB which means the calculated value of `-Xms` never will
+# be greater than 4096MB. The value of this variable is expressed in MB (example: "4096")
+# - JAVA_DIAGNOSTICS: Set this to get some diagnostics information to standard output
+# when things are happening. This option, if set to true, will set
+# `-XX:+UnlockDiagnosticVMOptions`. Disabled by default (example: "true").
+# - JAVA_DEBUG: If set remote debugging will be switched on. Disabled by default (example:
+# true").
+# - JAVA_DEBUG_PORT: Port used for remote debugging. Defaults to 5005 (example: "8787").
+# - CONTAINER_CORE_LIMIT: A calculated core limit as described in
+# https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt. (example: "2")
+# - CONTAINER_MAX_MEMORY: Memory limit given to the container (example: "1024").
+# - GC_MIN_HEAP_FREE_RATIO: Minimum percentage of heap free after GC to avoid expansion.
+# (example: "20")
+# - GC_MAX_HEAP_FREE_RATIO: Maximum percentage of heap free after GC to avoid shrinking.
+# (example: "40")
+# - GC_TIME_RATIO: Specifies the ratio of the time spent outside the garbage collection.
+# (example: "4")
+# - GC_ADAPTIVE_SIZE_POLICY_WEIGHT: The weighting given to the current GC time versus
+# previous GC times. (example: "90")
+# - GC_METASPACE_SIZE: The initial metaspace size. (example: "20")
+# - GC_MAX_METASPACE_SIZE: The maximum metaspace size. (example: "100")
+# - GC_CONTAINER_OPTIONS: Specify Java GC to use. The value of this variable should
+# contain the necessary JRE command-line options to specify the required GC, which
+# will override the default of `-XX:+UseParallelGC` (example: -XX:+UseG1GC).
+# - HTTPS_PROXY: The location of the https proxy. (example: "myuser@127.0.0.1:8080")
+# - HTTP_PROXY: The location of the http proxy. (example: "myuser@127.0.0.1:8080")
+# - NO_PROXY: A comma separated lists of hosts, IP addresses or domains that can be
+# accessed directly. (example: "foo.example.com,bar.example.com")
+#
+###
+FROM registry.access.redhat.com/ubi8/openjdk-21:1.18
+
+ENV LANGUAGE='en_US:en'
+
+
+COPY target/lib/* /deployments/lib/
+COPY target/*-runner.jar /deployments/quarkus-run.jar
+
+EXPOSE 8080
+USER 185
+ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
+ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"
+
+ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ]
diff --git a/dhfs-parent/sync-base/src/main/docker/Dockerfile.native b/dhfs-parent/sync-base/src/main/docker/Dockerfile.native
new file mode 100644
index 00000000..226e7c71
--- /dev/null
+++ b/dhfs-parent/sync-base/src/main/docker/Dockerfile.native
@@ -0,0 +1,27 @@
+####
+# This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode.
+#
+# Before building the container image run:
+#
+# ./mvnw package -Dnative
+#
+# Then, build the image with:
+#
+# docker build -f src/main/docker/Dockerfile.native -t quarkus/server .
+#
+# Then run the container using:
+#
+# docker run -i --rm -p 8080:8080 quarkus/server
+#
+###
+FROM registry.access.redhat.com/ubi8/ubi-minimal:8.9
+WORKDIR /work/
+RUN chown 1001 /work \
+ && chmod "g+rwX" /work \
+ && chown 1001:root /work
+COPY --chown=1001:root target/*-runner /work/application
+
+EXPOSE 8080
+USER 1001
+
+ENTRYPOINT ["./application", "-Dquarkus.http.host=0.0.0.0"]
diff --git a/dhfs-parent/sync-base/src/main/docker/Dockerfile.native-micro b/dhfs-parent/sync-base/src/main/docker/Dockerfile.native-micro
new file mode 100644
index 00000000..4bd4c6de
--- /dev/null
+++ b/dhfs-parent/sync-base/src/main/docker/Dockerfile.native-micro
@@ -0,0 +1,30 @@
+####
+# This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode.
+# It uses a micro base image, tuned for Quarkus native executables.
+# It reduces the size of the resulting container image.
+# Check https://quarkus.io/guides/quarkus-runtime-base-image for further information about this image.
+#
+# Before building the container image run:
+#
+# ./mvnw package -Dnative
+#
+# Then, build the image with:
+#
+# docker build -f src/main/docker/Dockerfile.native-micro -t quarkus/server .
+#
+# Then run the container using:
+#
+# docker run -i --rm -p 8080:8080 quarkus/server
+#
+###
+FROM quay.io/quarkus/quarkus-micro-image:2.0
+WORKDIR /work/
+RUN chown 1001 /work \
+ && chmod "g+rwX" /work \
+ && chown 1001:root /work
+COPY --chown=1001:root target/*-runner /work/application
+
+EXPOSE 8080
+USER 1001
+
+ENTRYPOINT ["./application", "-Dquarkus.http.host=0.0.0.0"]
diff --git a/dhfs-parent/server/src/main/java/DeadlockDetector.java b/dhfs-parent/sync-base/src/main/java/DeadlockDetector.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/DeadlockDetector.java
rename to dhfs-parent/sync-base/src/main/java/DeadlockDetector.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/ConflictResolver.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/ConflictResolver.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/ConflictResolver.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/ConflictResolver.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/DeleterTxHook.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/DeleterTxHook.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/DeleterTxHook.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/DeleterTxHook.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/JDataNormalRef.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/JDataNormalRef.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/JDataNormalRef.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/JDataNormalRef.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/JDataRef.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/JDataRef.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/JDataRef.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/JDataRef.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/JDataRefcounted.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/JDataRefcounted.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/JDataRefcounted.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/JDataRefcounted.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/JDataRemote.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/JDataRemote.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/JDataRemote.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/JDataRemote.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/JObjectKeyProtoSerializer.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/JObjectKeyProtoSerializer.java
similarity index 90%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/JObjectKeyProtoSerializer.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/JObjectKeyProtoSerializer.java
index d442b6d0..28e8197c 100644
--- a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/JObjectKeyProtoSerializer.java
+++ b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/JObjectKeyProtoSerializer.java
@@ -1,6 +1,5 @@
package com.usatiuk.dhfs;
-import com.usatiuk.autoprotomap.runtime.ProtoSerializer;
import com.usatiuk.objects.JObjectKey;
import com.usatiuk.dhfs.persistence.JObjectKeyP;
import jakarta.inject.Singleton;
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/PeerId.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/PeerId.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/PeerId.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/PeerId.java
diff --git a/dhfs-parent/autoprotomap/runtime/src/main/java/com/usatiuk/autoprotomap/runtime/ProtoSerializer.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/ProtoSerializer.java
similarity index 78%
rename from dhfs-parent/autoprotomap/runtime/src/main/java/com/usatiuk/autoprotomap/runtime/ProtoSerializer.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/ProtoSerializer.java
index 2ee13228..a95007ad 100644
--- a/dhfs-parent/autoprotomap/runtime/src/main/java/com/usatiuk/autoprotomap/runtime/ProtoSerializer.java
+++ b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/ProtoSerializer.java
@@ -1,4 +1,4 @@
-package com.usatiuk.autoprotomap.runtime;
+package com.usatiuk.dhfs;
import com.google.protobuf.Message;
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/ReceivedObject.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/ReceivedObject.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/ReceivedObject.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/ReceivedObject.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/RefcounterTxHook.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/RefcounterTxHook.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/RefcounterTxHook.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/RefcounterTxHook.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/RemoteObjPusherTxHook.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/RemoteObjPusherTxHook.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/RemoteObjPusherTxHook.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/RemoteObjPusherTxHook.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/RemoteObjectDataWrapper.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/RemoteObjectDataWrapper.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/RemoteObjectDataWrapper.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/RemoteObjectDataWrapper.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/RemoteObjectDeleter.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/RemoteObjectDeleter.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/RemoteObjectDeleter.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/RemoteObjectDeleter.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/RemoteObjectMeta.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/RemoteObjectMeta.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/RemoteObjectMeta.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/RemoteObjectMeta.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/RemoteTransaction.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/RemoteTransaction.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/RemoteTransaction.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/RemoteTransaction.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/ShutdownChecker.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/ShutdownChecker.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/ShutdownChecker.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/ShutdownChecker.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/TemporaryOpSerializer.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/TemporaryOpSerializer.java
similarity index 91%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/TemporaryOpSerializer.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/TemporaryOpSerializer.java
index b37c5f1e..c77e4972 100644
--- a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/TemporaryOpSerializer.java
+++ b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/TemporaryOpSerializer.java
@@ -1,6 +1,5 @@
package com.usatiuk.dhfs;
-import com.usatiuk.autoprotomap.runtime.ProtoSerializer;
import com.usatiuk.dhfs.repository.OpP;
import com.usatiuk.dhfs.repository.invalidation.Op;
import com.usatiuk.dhfs.utils.SerializationHelper;
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jkleppmanntree/JKleppmannTreeInitialSyncProcessor.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jkleppmanntree/JKleppmannTreeInitialSyncProcessor.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jkleppmanntree/JKleppmannTreeInitialSyncProcessor.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jkleppmanntree/JKleppmannTreeInitialSyncProcessor.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jkleppmanntree/JKleppmannTreeManager.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jkleppmanntree/JKleppmannTreeManager.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jkleppmanntree/JKleppmannTreeManager.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jkleppmanntree/JKleppmannTreeManager.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jkleppmanntree/JKleppmannTreeOpWrapper.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jkleppmanntree/JKleppmannTreeOpWrapper.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jkleppmanntree/JKleppmannTreeOpWrapper.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jkleppmanntree/JKleppmannTreeOpWrapper.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jkleppmanntree/JKleppmannTreePeerInterface.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jkleppmanntree/JKleppmannTreePeerInterface.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jkleppmanntree/JKleppmannTreePeerInterface.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jkleppmanntree/JKleppmannTreePeerInterface.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jkleppmanntree/JKleppmannTreePeriodicPushOp.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jkleppmanntree/JKleppmannTreePeriodicPushOp.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jkleppmanntree/JKleppmannTreePeriodicPushOp.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jkleppmanntree/JKleppmannTreePeriodicPushOp.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jkleppmanntree/structs/JKleppmannTreeNode.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jkleppmanntree/structs/JKleppmannTreeNode.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jkleppmanntree/structs/JKleppmannTreeNode.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jkleppmanntree/structs/JKleppmannTreeNode.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jkleppmanntree/structs/JKleppmannTreeNodeMeta.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jkleppmanntree/structs/JKleppmannTreeNodeMeta.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jkleppmanntree/structs/JKleppmannTreeNodeMeta.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jkleppmanntree/structs/JKleppmannTreeNodeMeta.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jkleppmanntree/structs/JKleppmannTreeNodeMetaDirectory.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jkleppmanntree/structs/JKleppmannTreeNodeMetaDirectory.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jkleppmanntree/structs/JKleppmannTreeNodeMetaDirectory.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jkleppmanntree/structs/JKleppmannTreeNodeMetaDirectory.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jkleppmanntree/structs/JKleppmannTreeNodeMetaFile.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jkleppmanntree/structs/JKleppmannTreeNodeMetaFile.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jkleppmanntree/structs/JKleppmannTreeNodeMetaFile.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jkleppmanntree/structs/JKleppmannTreeNodeMetaFile.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jkleppmanntree/structs/JKleppmannTreePersistentData.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jkleppmanntree/structs/JKleppmannTreePersistentData.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jkleppmanntree/structs/JKleppmannTreePersistentData.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jkleppmanntree/structs/JKleppmannTreePersistentData.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jmap/JMapEntry.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jmap/JMapEntry.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jmap/JMapEntry.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jmap/JMapEntry.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jmap/JMapHelper.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jmap/JMapHelper.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jmap/JMapHelper.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jmap/JMapHelper.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jmap/JMapHolder.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jmap/JMapHolder.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jmap/JMapHolder.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jmap/JMapHolder.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jmap/JMapHolderRefcounterTxHook.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jmap/JMapHolderRefcounterTxHook.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jmap/JMapHolderRefcounterTxHook.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jmap/JMapHolderRefcounterTxHook.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jmap/JMapIterator.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jmap/JMapIterator.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jmap/JMapIterator.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jmap/JMapIterator.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jmap/JMapKey.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jmap/JMapKey.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jmap/JMapKey.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jmap/JMapKey.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jmap/JMapLongKey.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jmap/JMapLongKey.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jmap/JMapLongKey.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jmap/JMapLongKey.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jmap/JMapRef.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jmap/JMapRef.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jmap/JMapRef.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jmap/JMapRef.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jmap/JMapRefcounterTxHook.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jmap/JMapRefcounterTxHook.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/jmap/JMapRefcounterTxHook.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/jmap/JMapRefcounterTxHook.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/AutosyncProcessor.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/AutosyncProcessor.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/AutosyncProcessor.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/AutosyncProcessor.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/AutosyncTxHook.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/AutosyncTxHook.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/AutosyncTxHook.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/AutosyncTxHook.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/CertificateTools.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/CertificateTools.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/CertificateTools.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/CertificateTools.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/DefaultObjSyncHandler.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/DefaultObjSyncHandler.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/DefaultObjSyncHandler.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/DefaultObjSyncHandler.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/InitialSyncProcessor.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/InitialSyncProcessor.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/InitialSyncProcessor.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/InitialSyncProcessor.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/JDataRemoteDto.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/JDataRemoteDto.java
similarity index 71%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/JDataRemoteDto.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/JDataRemoteDto.java
index 58da8e93..4c2ef562 100644
--- a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/JDataRemoteDto.java
+++ b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/JDataRemoteDto.java
@@ -1,12 +1,9 @@
package com.usatiuk.dhfs.repository;
-import com.usatiuk.autoprotomap.runtime.ProtoMirror;
import com.usatiuk.dhfs.JDataRemote;
-import com.usatiuk.dhfs.persistence.JDataRemoteDtoP;
import java.io.Serializable;
-@ProtoMirror(JDataRemoteDtoP.class)
public interface JDataRemoteDto extends Serializable {
default Class extends JDataRemote> objClass() {
assert JDataRemote.class.isAssignableFrom(getClass());
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/JDataRemotePush.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/JDataRemotePush.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/JDataRemotePush.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/JDataRemotePush.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/ObjSyncHandler.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/ObjSyncHandler.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/ObjSyncHandler.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/ObjSyncHandler.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/PeerConnectedEventListener.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/PeerConnectedEventListener.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/PeerConnectedEventListener.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/PeerConnectedEventListener.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/PeerDisconnectedEventListener.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/PeerDisconnectedEventListener.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/PeerDisconnectedEventListener.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/PeerDisconnectedEventListener.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/PeerManager.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/PeerManager.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/PeerManager.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/PeerManager.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/PersistentPeerDataService.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/PersistentPeerDataService.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/PersistentPeerDataService.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/PersistentPeerDataService.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/PersistentRemoteHostsData.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/PersistentRemoteHostsData.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/PersistentRemoteHostsData.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/PersistentRemoteHostsData.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/RemoteObjectServiceClient.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/RemoteObjectServiceClient.java
similarity index 98%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/RemoteObjectServiceClient.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/RemoteObjectServiceClient.java
index b8200dc8..8f586e35 100644
--- a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/RemoteObjectServiceClient.java
+++ b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/RemoteObjectServiceClient.java
@@ -1,6 +1,6 @@
package com.usatiuk.dhfs.repository;
-import com.usatiuk.autoprotomap.runtime.ProtoSerializer;
+import com.usatiuk.dhfs.ProtoSerializer;
import com.usatiuk.dhfs.*;
import com.usatiuk.dhfs.persistence.JObjectKeyP;
import com.usatiuk.dhfs.repository.invalidation.InvalidationQueueService;
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/RemoteObjectServiceServer.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/RemoteObjectServiceServer.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/RemoteObjectServiceServer.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/RemoteObjectServiceServer.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/RemoteObjectServiceServerImpl.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/RemoteObjectServiceServerImpl.java
similarity index 98%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/RemoteObjectServiceServerImpl.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/RemoteObjectServiceServerImpl.java
index 7b7d1fab..fea13f06 100644
--- a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/RemoteObjectServiceServerImpl.java
+++ b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/RemoteObjectServiceServerImpl.java
@@ -1,6 +1,6 @@
package com.usatiuk.dhfs.repository;
-import com.usatiuk.autoprotomap.runtime.ProtoSerializer;
+import com.usatiuk.dhfs.ProtoSerializer;
import com.usatiuk.dhfs.*;
import com.usatiuk.dhfs.persistence.JObjectKeyP;
import com.usatiuk.dhfs.repository.invalidation.Op;
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/RpcChannelFactory.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/RpcChannelFactory.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/RpcChannelFactory.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/RpcChannelFactory.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/RpcClientFactory.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/RpcClientFactory.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/RpcClientFactory.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/RpcClientFactory.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/SyncHandler.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/SyncHandler.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/SyncHandler.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/SyncHandler.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/SyncHandlerService.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/SyncHandlerService.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/SyncHandlerService.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/SyncHandlerService.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/SyncHelper.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/SyncHelper.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/SyncHelper.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/SyncHelper.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/TemporaryReceivedObjectSerializer.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/TemporaryReceivedObjectSerializer.java
similarity index 96%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/TemporaryReceivedObjectSerializer.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/TemporaryReceivedObjectSerializer.java
index 96edd029..ce9840b8 100644
--- a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/TemporaryReceivedObjectSerializer.java
+++ b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/TemporaryReceivedObjectSerializer.java
@@ -1,6 +1,6 @@
package com.usatiuk.dhfs.repository;
-import com.usatiuk.autoprotomap.runtime.ProtoSerializer;
+import com.usatiuk.dhfs.ProtoSerializer;
import com.usatiuk.dhfs.PeerId;
import com.usatiuk.dhfs.ReceivedObject;
import com.usatiuk.dhfs.persistence.JDataRemoteDtoP;
diff --git a/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/TemporaryRemoteObjectSerializer.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/TemporaryRemoteObjectSerializer.java
new file mode 100644
index 00000000..4b475a5e
--- /dev/null
+++ b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/TemporaryRemoteObjectSerializer.java
@@ -0,0 +1,21 @@
+package com.usatiuk.dhfs.repository;
+
+import com.usatiuk.dhfs.ProtoSerializer;
+import com.usatiuk.dhfs.persistence.JDataRemoteDtoP;
+import com.usatiuk.dhfs.utils.SerializationHelper;
+import jakarta.enterprise.context.ApplicationScoped;
+
+@ApplicationScoped
+public class TemporaryRemoteObjectSerializer implements ProtoSerializer {
+ @Override
+ public JDataRemoteDto deserialize(JDataRemoteDtoP message) {
+ return SerializationHelper.deserialize(message.getSerializedData().toByteArray());
+ }
+
+ @Override
+ public JDataRemoteDtoP serialize(JDataRemoteDto object) {
+ return JDataRemoteDtoP.newBuilder()
+ .setSerializedData(SerializationHelper.serialize(object))
+ .build();
+ }
+}
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/invalidation/DeferredInvalidationQueueData.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/invalidation/DeferredInvalidationQueueData.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/invalidation/DeferredInvalidationQueueData.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/invalidation/DeferredInvalidationQueueData.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/invalidation/DeferredInvalidationQueueService.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/invalidation/DeferredInvalidationQueueService.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/invalidation/DeferredInvalidationQueueService.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/invalidation/DeferredInvalidationQueueService.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/invalidation/IndexUpdateOp.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/invalidation/IndexUpdateOp.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/invalidation/IndexUpdateOp.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/invalidation/IndexUpdateOp.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/invalidation/InvalidationQueueEntry.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/invalidation/InvalidationQueueEntry.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/invalidation/InvalidationQueueEntry.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/invalidation/InvalidationQueueEntry.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/invalidation/InvalidationQueueService.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/invalidation/InvalidationQueueService.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/invalidation/InvalidationQueueService.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/invalidation/InvalidationQueueService.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/invalidation/Op.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/invalidation/Op.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/invalidation/Op.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/invalidation/Op.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/invalidation/OpHandler.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/invalidation/OpHandler.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/invalidation/OpHandler.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/invalidation/OpHandler.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/invalidation/OpPusher.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/invalidation/OpPusher.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/invalidation/OpPusher.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/invalidation/OpPusher.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/invalidation/PushOpHandler.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/invalidation/PushOpHandler.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/invalidation/PushOpHandler.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/invalidation/PushOpHandler.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/IpPeerAddress.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/IpPeerAddress.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/IpPeerAddress.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/IpPeerAddress.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/PeerAddrStringHelper.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/PeerAddrStringHelper.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/PeerAddrStringHelper.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/PeerAddrStringHelper.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/PeerAddress.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/PeerAddress.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/PeerAddress.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/PeerAddress.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/PeerAddressType.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/PeerAddressType.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/PeerAddressType.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/PeerAddressType.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/PeerDiscoveryDirectory.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/PeerDiscoveryDirectory.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/PeerDiscoveryDirectory.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/PeerDiscoveryDirectory.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/PersistentStaticPeerDiscovery.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/PersistentStaticPeerDiscovery.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/PersistentStaticPeerDiscovery.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/PersistentStaticPeerDiscovery.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/StaticPeerDiscovery.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/StaticPeerDiscovery.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/StaticPeerDiscovery.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/StaticPeerDiscovery.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/local/LocalPeerDiscoveryBroadcaster.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/local/LocalPeerDiscoveryBroadcaster.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/local/LocalPeerDiscoveryBroadcaster.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/local/LocalPeerDiscoveryBroadcaster.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/local/LocalPeerDiscoveryClient.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/local/LocalPeerDiscoveryClient.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/local/LocalPeerDiscoveryClient.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peerdiscovery/local/LocalPeerDiscoveryClient.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peersync/PeerInfo.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peersync/PeerInfo.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peersync/PeerInfo.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peersync/PeerInfo.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peersync/PeerInfoProtoSerializer.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peersync/PeerInfoProtoSerializer.java
similarity index 93%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peersync/PeerInfoProtoSerializer.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peersync/PeerInfoProtoSerializer.java
index 76bf2685..3b3fbaa1 100644
--- a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peersync/PeerInfoProtoSerializer.java
+++ b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peersync/PeerInfoProtoSerializer.java
@@ -1,6 +1,6 @@
package com.usatiuk.dhfs.repository.peersync;
-import com.usatiuk.autoprotomap.runtime.ProtoSerializer;
+import com.usatiuk.dhfs.ProtoSerializer;
import com.usatiuk.dhfs.persistence.PeerInfoP;
import com.usatiuk.dhfs.utils.SerializationHelper;
import jakarta.inject.Singleton;
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peersync/PeerInfoService.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peersync/PeerInfoService.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peersync/PeerInfoService.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peersync/PeerInfoService.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peersync/PeerInfoSyncHandler.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peersync/PeerInfoSyncHandler.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peersync/PeerInfoSyncHandler.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peersync/PeerInfoSyncHandler.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peersync/api/ApiPeerInfo.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peersync/api/ApiPeerInfo.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peersync/api/ApiPeerInfo.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peersync/api/ApiPeerInfo.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peersync/api/PeerSyncApi.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peersync/api/PeerSyncApi.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peersync/api/PeerSyncApi.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peersync/api/PeerSyncApi.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peersync/api/PeerSyncApiClient.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peersync/api/PeerSyncApiClient.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peersync/api/PeerSyncApiClient.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peersync/api/PeerSyncApiClient.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peersync/api/PeerSyncApiClientDynamic.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peersync/api/PeerSyncApiClientDynamic.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peersync/api/PeerSyncApiClientDynamic.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peersync/api/PeerSyncApiClientDynamic.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peersync/structs/JKleppmannTreeNodeMetaPeer.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peersync/structs/JKleppmannTreeNodeMetaPeer.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peersync/structs/JKleppmannTreeNodeMetaPeer.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peersync/structs/JKleppmannTreeNodeMetaPeer.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peertrust/PeerInfoCertUpdateTxHook.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peertrust/PeerInfoCertUpdateTxHook.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peertrust/PeerInfoCertUpdateTxHook.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peertrust/PeerInfoCertUpdateTxHook.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peertrust/PeerRolesAugmentor.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peertrust/PeerRolesAugmentor.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peertrust/PeerRolesAugmentor.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peertrust/PeerRolesAugmentor.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peertrust/PeerTrustManager.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peertrust/PeerTrustManager.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peertrust/PeerTrustManager.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peertrust/PeerTrustManager.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peertrust/PeerTrustServerCustomizer.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peertrust/PeerTrustServerCustomizer.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/peertrust/PeerTrustServerCustomizer.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/peertrust/PeerTrustServerCustomizer.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/syncmap/DtoMapper.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/syncmap/DtoMapper.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/syncmap/DtoMapper.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/syncmap/DtoMapper.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/syncmap/DtoMapperService.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/syncmap/DtoMapperService.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/syncmap/DtoMapperService.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/syncmap/DtoMapperService.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/webapi/KnownPeerDelete.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/webapi/KnownPeerDelete.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/webapi/KnownPeerDelete.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/webapi/KnownPeerDelete.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/webapi/KnownPeerInfo.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/webapi/KnownPeerInfo.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/webapi/KnownPeerInfo.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/webapi/KnownPeerInfo.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/webapi/KnownPeerPut.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/webapi/KnownPeerPut.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/webapi/KnownPeerPut.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/webapi/KnownPeerPut.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/webapi/PeerAddressInfo.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/webapi/PeerAddressInfo.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/webapi/PeerAddressInfo.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/webapi/PeerAddressInfo.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/webapi/PeerInfo.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/webapi/PeerInfo.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/webapi/PeerInfo.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/webapi/PeerInfo.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/webapi/PeerManagementApi.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/webapi/PeerManagementApi.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/webapi/PeerManagementApi.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/webapi/PeerManagementApi.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/webapi/PersistentPeerAddressApi.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/webapi/PersistentPeerAddressApi.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/repository/webapi/PersistentPeerAddressApi.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/repository/webapi/PersistentPeerAddressApi.java
diff --git a/dhfs-parent/server/src/main/java/com/usatiuk/dhfs/webui/WebUiRouter.java b/dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/webui/WebUiRouter.java
similarity index 100%
rename from dhfs-parent/server/src/main/java/com/usatiuk/dhfs/webui/WebUiRouter.java
rename to dhfs-parent/sync-base/src/main/java/com/usatiuk/dhfs/webui/WebUiRouter.java
diff --git a/dhfs-parent/server/src/main/proto/dhfs_peer_discovery.proto b/dhfs-parent/sync-base/src/main/proto/dhfs_peer_discovery.proto
similarity index 100%
rename from dhfs-parent/server/src/main/proto/dhfs_peer_discovery.proto
rename to dhfs-parent/sync-base/src/main/proto/dhfs_peer_discovery.proto
diff --git a/dhfs-parent/server/src/main/proto/dhfs_serial.proto b/dhfs-parent/sync-base/src/main/proto/dhfs_serial.proto
similarity index 86%
rename from dhfs-parent/server/src/main/proto/dhfs_serial.proto
rename to dhfs-parent/sync-base/src/main/proto/dhfs_serial.proto
index ed52684b..c92996dc 100644
--- a/dhfs-parent/server/src/main/proto/dhfs_serial.proto
+++ b/dhfs-parent/sync-base/src/main/proto/dhfs_serial.proto
@@ -37,11 +37,7 @@ message PeerInfoP {
}
message JDataRemoteDtoP {
- oneof obj {
- FileDtoP fileDto = 1;
- ChunkDataP chunkData = 2;
- PeerInfoP peerInfo = 3;
- }
+ bytes serializedData = 1;
}
message JDataP {
diff --git a/dhfs-parent/server/src/main/proto/dhfs_sync.proto b/dhfs-parent/sync-base/src/main/proto/dhfs_sync.proto
similarity index 100%
rename from dhfs-parent/server/src/main/proto/dhfs_sync.proto
rename to dhfs-parent/sync-base/src/main/proto/dhfs_sync.proto
diff --git a/dhfs-parent/sync-base/src/main/resources/META-INF/beans.xml b/dhfs-parent/sync-base/src/main/resources/META-INF/beans.xml
new file mode 100644
index 00000000..e69de29b
diff --git a/dhfs-parent/sync-base/src/main/resources/application.properties b/dhfs-parent/sync-base/src/main/resources/application.properties
new file mode 100644
index 00000000..f3000b63
--- /dev/null
+++ b/dhfs-parent/sync-base/src/main/resources/application.properties
@@ -0,0 +1,34 @@
+quarkus.grpc.server.use-separate-server=false
+dhfs.objects.peerdiscovery.port=42069
+dhfs.objects.peerdiscovery.interval=4s
+dhfs.objects.peerdiscovery.broadcast=true
+dhfs.objects.sync.timeout=30
+dhfs.objects.sync.ping.timeout=5
+dhfs.objects.invalidation.threads=16
+dhfs.objects.invalidation.delay=1000
+dhfs.objects.reconnect_interval=5s
+dhfs.objects.write_log=false
+dhfs.objects.periodic-push-op-interval=5m
+dhfs.fuse.root=${HOME}/dhfs_default/fuse
+dhfs.objects.persistence.stuff.root=${HOME}/dhfs_default/data/stuff
+dhfs.fuse.debug=false
+dhfs.fuse.enabled=true
+dhfs.files.allow_recursive_delete=false
+dhfs.files.target_chunk_size=2097152
+dhfs.files.target_chunk_alignment=19
+dhfs.objects.deletion.delay=1000
+dhfs.objects.deletion.can-delete-retry-delay=10000
+dhfs.objects.ref_verification=true
+dhfs.files.use_hash_for_chunks=false
+dhfs.objects.autosync.threads=16
+dhfs.objects.autosync.download-all=false
+dhfs.objects.move-processor.threads=16
+dhfs.objects.ref-processor.threads=16
+dhfs.objects.opsender.batch-size=100
+dhfs.objects.lock_timeout_secs=2
+dhfs.local-discovery=true
+dhfs.peerdiscovery.timeout=10000
+quarkus.log.category."com.usatiuk".min-level=TRACE
+quarkus.log.category."com.usatiuk".level=TRACE
+quarkus.http.insecure-requests=enabled
+quarkus.http.ssl.client-auth=required
diff --git a/dhfs-parent/server/src/test/java/com/usatiuk/dhfs/RefcounterTest.java b/dhfs-parent/sync-base/src/test/java/com/usatiuk/dhfs/RefcounterTest.java
similarity index 100%
rename from dhfs-parent/server/src/test/java/com/usatiuk/dhfs/RefcounterTest.java
rename to dhfs-parent/sync-base/src/test/java/com/usatiuk/dhfs/RefcounterTest.java
diff --git a/dhfs-parent/sync-base/src/test/java/com/usatiuk/dhfs/TempDataProfile.java b/dhfs-parent/sync-base/src/test/java/com/usatiuk/dhfs/TempDataProfile.java
new file mode 100644
index 00000000..e5a9f59b
--- /dev/null
+++ b/dhfs-parent/sync-base/src/test/java/com/usatiuk/dhfs/TempDataProfile.java
@@ -0,0 +1,29 @@
+package com.usatiuk.dhfs;
+
+import io.quarkus.test.junit.QuarkusTestProfile;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.HashMap;
+import java.util.Map;
+
+abstract public class TempDataProfile implements QuarkusTestProfile {
+ protected void getConfigOverrides(Map toPut) {
+ }
+
+ @Override
+ final public Map getConfigOverrides() {
+ Path tempDirWithPrefix;
+ try {
+ tempDirWithPrefix = Files.createTempDirectory("dhfs-test");
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ var ret = new HashMap();
+ ret.put("dhfs.objects.persistence.files.root", tempDirWithPrefix.resolve("dhfs_root_test").toString());
+ ret.put("dhfs.fuse.root", tempDirWithPrefix.resolve("dhfs_fuse_root_test").toString());
+ getConfigOverrides(ret);
+ return ret;
+ }
+}
diff --git a/dhfs-parent/sync-base/src/test/java/com/usatiuk/dhfs/TestDataCleaner.java b/dhfs-parent/sync-base/src/test/java/com/usatiuk/dhfs/TestDataCleaner.java
new file mode 100644
index 00000000..b3659d01
--- /dev/null
+++ b/dhfs-parent/sync-base/src/test/java/com/usatiuk/dhfs/TestDataCleaner.java
@@ -0,0 +1,40 @@
+package com.usatiuk.dhfs;
+
+import io.quarkus.logging.Log;
+import io.quarkus.runtime.ShutdownEvent;
+import io.quarkus.runtime.StartupEvent;
+import jakarta.annotation.Priority;
+import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.enterprise.event.Observes;
+import org.eclipse.microprofile.config.inject.ConfigProperty;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Path;
+import java.util.Objects;
+
+@ApplicationScoped
+public class TestDataCleaner {
+ @ConfigProperty(name = "dhfs.objects.persistence.files.root")
+ String tempDirectory;
+
+ void init(@Observes @Priority(1) StartupEvent event) throws IOException {
+ try {
+ purgeDirectory(Path.of(tempDirectory).toFile());
+ } catch (Exception ignored) {
+ Log.warn("Couldn't cleanup test data on init");
+ }
+ }
+
+ void shutdown(@Observes @Priority(1000000000) ShutdownEvent event) throws IOException {
+ purgeDirectory(Path.of(tempDirectory).toFile());
+ }
+
+ void purgeDirectory(File dir) {
+ for (File file : Objects.requireNonNull(dir.listFiles())) {
+ if (file.isDirectory())
+ purgeDirectory(file);
+ file.delete();
+ }
+ }
+}
diff --git a/dhfs-parent/server/src/test/java/com/usatiuk/dhfs/testobjs/TestRefcount.java b/dhfs-parent/sync-base/src/test/java/com/usatiuk/dhfs/testobjs/TestRefcount.java
similarity index 100%
rename from dhfs-parent/server/src/test/java/com/usatiuk/dhfs/testobjs/TestRefcount.java
rename to dhfs-parent/sync-base/src/test/java/com/usatiuk/dhfs/testobjs/TestRefcount.java
diff --git a/dhfs-parent/sync-base/src/test/resources/application.properties b/dhfs-parent/sync-base/src/test/resources/application.properties
new file mode 100644
index 00000000..ecef50b6
--- /dev/null
+++ b/dhfs-parent/sync-base/src/test/resources/application.properties
@@ -0,0 +1,12 @@
+dhfs.objects.persistence.files.root=${HOME}/dhfs_data/dhfs_root_test
+dhfs.objects.root=${HOME}/dhfs_data/dhfs_root_d_test
+dhfs.fuse.root=${HOME}/dhfs_data/dhfs_fuse_root_test
+dhfs.objects.ref_verification=true
+dhfs.objects.deletion.delay=0
+quarkus.log.category."com.usatiuk.dhfs".level=TRACE
+quarkus.log.category."com.usatiuk.dhfs".min-level=TRACE
+quarkus.class-loading.parent-first-artifacts=com.usatiuk.dhfs:supportlib
+quarkus.http.test-port=0
+quarkus.http.test-ssl-port=0
+dhfs.local-discovery=false
+dhfs.objects.persistence.snapshot-extra-checks=true
\ No newline at end of file
diff --git a/dhfs-parent/utils/pom.xml b/dhfs-parent/utils/pom.xml
index 4e59f908..443813de 100644
--- a/dhfs-parent/utils/pom.xml
+++ b/dhfs-parent/utils/pom.xml
@@ -51,4 +51,26 @@
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+
+ 1C
+ false
+ classes
+
+
+ true
+
+
+ concurrent
+
+
+
+
+
+
+
\ No newline at end of file