From 033bf5c7cb729106b4e66a5291db1c1d28ed5b69 Mon Sep 17 00:00:00 2001
From: pkupczyk <piotr.kupczyk@id.ethz.ch>
Date: Fri, 26 Apr 2024 14:58:14 +0200
Subject: [PATCH] BIS-1047 : AFS installer

---
 app-openbis-installer/build.gradle            |  4 ++-
 .../resource/installer/install.xml            |  5 ++++
 app-openbis-installer/settings.gradle         |  4 +--
 core-plugin-openbis/build.gradle              |  6 ++++
 core-plugin-openbis/settings.gradle           |  4 +--
 server-data-store/build.gradle                |  4 +++
 .../src/main/dist/etc/log4j2.xml              | 13 +++++++++
 .../src/main/dist/etc/service.properties      | 29 +++++++++++++++++++
 8 files changed, 64 insertions(+), 5 deletions(-)
 create mode 100644 server-data-store/src/main/dist/etc/log4j2.xml
 create mode 100755 server-data-store/src/main/dist/etc/service.properties

diff --git a/app-openbis-installer/build.gradle b/app-openbis-installer/build.gradle
index deda8e6b4b2..dcab856c8f2 100644
--- a/app-openbis-installer/build.gradle
+++ b/app-openbis-installer/build.gradle
@@ -54,7 +54,7 @@ println "installerDir:${installerDistDir}"
 println "buildDir:${buildDir}"
 println "installer:${project.projectDir}/resource/installer"
 
-task copyResources(type: Copy, dependsOn: [compileJava, ':core-plugin-openbis:zip', ':core-plugin-openbis:zipDss', ':core-plugin-openbis:zipBdlServer']) {
+task copyResources(type: Copy, dependsOn: [compileJava, ':core-plugin-openbis:zip', ':core-plugin-openbis:zipDss', ':core-plugin-openbis:zipBdlServer', ':core-plugin-openbis:zipAfsServer']) {
     duplicatesStrategy 'include'
     from "${project.projectDir}/resource/installer"
     from "${project.projectDir}/../core-plugin-openbis/dist/tarball/installer"
@@ -62,6 +62,8 @@ task copyResources(type: Copy, dependsOn: [compileJava, ':core-plugin-openbis:zi
     into installerDistDir
     from zipTree(project(':core-plugin-openbis').zipBdlServer.archivePath)
     into installerDistDir
+    from zipTree(project(':core-plugin-openbis').zipAfsServer.archivePath)
+    into installerDistDir
     from("${installerDistDir}/../BUILD-app-openbis-installer.INFO") {
         into 'bin'
     }
diff --git a/app-openbis-installer/resource/installer/install.xml b/app-openbis-installer/resource/installer/install.xml
index a738863b804..2facd281ca3 100644
--- a/app-openbis-installer/resource/installer/install.xml
+++ b/app-openbis-installer/resource/installer/install.xml
@@ -224,6 +224,11 @@
                   targetdir="$INSTALL_PATH/servers"/>
         </pack>
 
+        <pack name="AFS Server" required="yes" loose="yes">
+            <description>The atomic filesystem server managing raw data</description>
+            <file src="@{installer.dist.dir}/afs-server"
+                  targetdir="$INSTALL_PATH/servers"/>
+        </pack>
 
         <pack name="Administration Scripts" required="yes" loose="yes">
             <description>Scripts to facilitate openBIS administration</description>
diff --git a/app-openbis-installer/settings.gradle b/app-openbis-installer/settings.gradle
index 810d325adaf..6a25368bcfb 100644
--- a/app-openbis-installer/settings.gradle
+++ b/app-openbis-installer/settings.gradle
@@ -1,4 +1,4 @@
-includeFlat 'lib-commonbase', 'lib-common', 'lib-json',
+includeFlat 'lib-commonbase', 'lib-common', 'lib-json', 'lib-transactional-file-system',
         'api-openbis-java', 'lib-openbis-common', 'lib-authentication', 'lib-dbmigration', 'server-application-server',
-        'server-original-data-store', 'server-screening', 'core-plugin-openbis', 'server-external-data-store',
+        'server-original-data-store', 'server-screening', 'core-plugin-openbis', 'server-external-data-store', 'server-data-store',
         'ui-admin', 'lib-microservice-server', 'ui-eln-lims', 'api-openbis-javascript', 'api-openbis-typescript', 'api-data-store-server-java', 'api-data-store-server-javascript'
diff --git a/core-plugin-openbis/build.gradle b/core-plugin-openbis/build.gradle
index 112d7972f94..529b4c40249 100644
--- a/core-plugin-openbis/build.gradle
+++ b/core-plugin-openbis/build.gradle
@@ -38,6 +38,7 @@ evaluationDependsOn(':server-application-server')
 evaluationDependsOn(':server-original-data-store')
 evaluationDependsOn(':server-screening')
 evaluationDependsOn(':server-external-data-store')
+evaluationDependsOn(':server-data-store')
 evaluationDependsOn(':ui-admin')
 evaluationDependsOn(':ui-eln-lims')
 
@@ -467,6 +468,11 @@ task zipBdlServer(type: Zip, dependsOn: project(':server-external-data-store').t
     from zipTree('../server-external-data-store/build/distributions/server-external-data-store.zip')
 }
 
+task zipAfsServer(type: Zip, dependsOn: project(':server-data-store').tasks.distZip) {
+    baseName 'afs_server'
+    from zipTree('../server-data-store/build/distributions/afs-server.zip')
+}
+
 task pybisZip(type: Zip) {
     baseName 'pybis'
     from '../api-openbis-python3-pybis/'
diff --git a/core-plugin-openbis/settings.gradle b/core-plugin-openbis/settings.gradle
index 0b4417685af..049b6410dab 100644
--- a/core-plugin-openbis/settings.gradle
+++ b/core-plugin-openbis/settings.gradle
@@ -1,3 +1,3 @@
-includeFlat 'lib-commonbase', 'lib-common', 'api-openbis-java', 'lib-openbis-common', 'lib-authentication', 'lib-dbmigration', 'lib-json',
-        'server-application-server', 'server-original-data-store', 'server-screening', 'server-external-data-store',
+includeFlat 'lib-commonbase', 'lib-common', 'api-openbis-java', 'lib-openbis-common', 'lib-authentication', 'lib-dbmigration', 'lib-json', 'lib-transactional-file-system',
+        'server-application-server', 'server-original-data-store', 'server-screening', 'server-external-data-store', 'server-data-store',
         'ui-admin', 'lib-microservice-server', 'ui-eln-lims', 'api-openbis-javascript', 'api-openbis-typescript', 'api-data-store-server-java', 'api-data-store-server-javascript'
diff --git a/server-data-store/build.gradle b/server-data-store/build.gradle
index 47b932d13dd..bdf4d9a642e 100644
--- a/server-data-store/build.gradle
+++ b/server-data-store/build.gradle
@@ -40,4 +40,8 @@ task AFSServerDevelopmentEnvironmentStart(type: JavaExec) {
              '--add-opens=java.base/java.nio=ALL-UNNAMED',
              '-Dio.netty.tryReflectionSetAccessible=true',
              '-Xmx256M', '-ea'])
+}
+
+distZip {
+    baseName 'afs-server'
 }
\ No newline at end of file
diff --git a/server-data-store/src/main/dist/etc/log4j2.xml b/server-data-store/src/main/dist/etc/log4j2.xml
new file mode 100644
index 00000000000..f8d0b493e95
--- /dev/null
+++ b/server-data-store/src/main/dist/etc/log4j2.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration status="INFO">
+    <Appenders>
+        <File name="File" fileName="logs/afs-server.log" immediateFlush="false" append="false">
+            <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
+        </File>
+    </Appenders>
+    <Loggers>
+        <Root level="ALL">
+            <AppenderRef ref="File"/>
+        </Root>
+    </Loggers>
+</Configuration>
\ No newline at end of file
diff --git a/server-data-store/src/main/dist/etc/service.properties b/server-data-store/src/main/dist/etc/service.properties
new file mode 100755
index 00000000000..42655d82f66
--- /dev/null
+++ b/server-data-store/src/main/dist/etc/service.properties
@@ -0,0 +1,29 @@
+logFactoryClass=ch.ethz.sis.shared.log.log4j2.Log4J2LogFactory
+logConfigFile=./etc/log4j2.xml
+
+jsonObjectMapperClass=ch.ethz.sis.afsjson.jackson.JacksonObjectMapper
+# Where all the transactions information is written until the prepare step
+# For performance reasons should be on the save volume as the configured storage
+writeAheadLogRoot=./transactions
+storageRoot=./store
+storageUuid=
+
+httpServerClass=ch.ethz.sis.afsserver.http.impl.NettyHttpServer
+httpServerUri=/afs-server
+httpServerPort=8085
+
+// 1 MiB of Base64 URL encoded data, 1 kiB of other data and 10% safety margin
+httpMaxContentLength=1540165
+
+maxReadSizeInBytes=1048576
+authenticationInfoProviderClass=ch.ethz.sis.afsserver.worker.providers.impl.OpenBISAuthenticationInfoProvider
+authorizationInfoProviderClass=ch.ethz.sis.afsserver.worker.providers.impl.OpenBISAuthorizationInfoProvider
+poolSize=50
+connectionFactoryClass=ch.ethz.sis.afsserver.worker.ConnectionFactory
+workerFactoryClass=ch.ethz.sis.afsserver.worker.WorkerFactory
+publicApiInterface=ch.ethz.sis.afsapi.api.PublicAPI
+apiServerInteractiveSessionKey=
+apiServerTransactionManagerKey=
+apiServerWorkerTimeout=3600000
+openBISUrl=https://localhost:8443/
+openBISTimeout=30000
\ No newline at end of file
-- 
GitLab