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.0 com.usatiuk.dhfs - server - 1.0.0-SNAPSHOT + dhfs-fuse + 1.0-SNAPSHOT com.usatiuk.dhfs @@ -23,17 +23,6 @@ awaitility test - - com.usatiuk - autoprotomap - 1.0-SNAPSHOT - - - com.usatiuk - autoprotomap-deployment - 1.0-SNAPSHOT - provided - org.bouncycastle bcprov-jdk18on @@ -148,6 +137,16 @@ objects 1.0-SNAPSHOT + + com.usatiuk.dhfs + dhfs-fs + 1.0-SNAPSHOT + + + com.usatiuk.dhfs + sync-base + 1.0-SNAPSHOT + com.usatiuk.dhfs utils 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-parent pom - server + sync-base + dhfs-fs + dhfs-fuse + dhfs-app kleppmanntree supportlib - autoprotomap objects utils 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 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