diff --git a/pom.xml b/pom.xml index 8b261bf..d18c260 100644 --- a/pom.xml +++ b/pom.xml @@ -42,7 +42,7 @@ UTF-8 UTF-8 - 2.6 + 2.7-SNAPSHOT 3.0.0 3.8 @@ -51,6 +51,17 @@ false + + + + io.quarkus.platform + quarkus-amazon-services-bom + 3.6.4 + pom + import + + + io.quarkus @@ -145,6 +156,14 @@ indy-security ${indysecurity.verison} + + io.quarkiverse.amazonservices + quarkus-amazon-s3 + + + software.amazon.awssdk + url-connection-client + diff --git a/src/main/java/org/commonjava/service/storage/config/StorageServiceConfig.java b/src/main/java/org/commonjava/service/storage/config/StorageServiceConfig.java index 7ff3304..6c57624 100644 --- a/src/main/java/org/commonjava/service/storage/config/StorageServiceConfig.java +++ b/src/main/java/org/commonjava/service/storage/config/StorageServiceConfig.java @@ -17,9 +17,10 @@ import io.quarkus.runtime.Startup; import io.smallrye.config.ConfigMapping; +import io.smallrye.config.WithDefault; import io.smallrye.config.WithName; - import jakarta.enterprise.context.ApplicationScoped; + import java.io.File; @Startup @@ -27,6 +28,10 @@ @ApplicationScoped public interface StorageServiceConfig { + String STORAGE_S3 = "s3"; + + String STORAGE_NFS = "nfs"; + @WithName( "baseDir" ) File baseDir(); @@ -35,4 +40,12 @@ public interface StorageServiceConfig @WithName( "removableFilesystemPattern" ) String removableFilesystemPattern(); + + @WithName( "type" ) + @WithDefault( STORAGE_NFS ) + String type(); + + @WithName( "bucket.name" ) + @WithDefault( "" ) + String bucketName(); } diff --git a/src/main/java/org/commonjava/service/storage/core/FileManagerProducer.java b/src/main/java/org/commonjava/service/storage/core/FileManagerProducer.java index 3bc0fc0..63deec0 100644 --- a/src/main/java/org/commonjava/service/storage/core/FileManagerProducer.java +++ b/src/main/java/org/commonjava/service/storage/core/FileManagerProducer.java @@ -21,9 +21,11 @@ import org.commonjava.storage.pathmapped.config.PathMappedStorageConfig; import org.commonjava.storage.pathmapped.core.FileBasedPhysicalStore; import org.commonjava.storage.pathmapped.core.PathMappedFileManager; +import org.commonjava.storage.pathmapped.core.S3PhysicalStore; import org.commonjava.storage.pathmapped.pathdb.datastax.CassandraPathDB; import org.commonjava.storage.pathmapped.spi.PathDB; import org.commonjava.storage.pathmapped.spi.PhysicalStore; +import software.amazon.awssdk.services.s3.S3Client; import jakarta.enterprise.context.ApplicationScoped; import jakarta.enterprise.inject.Produces; @@ -42,6 +44,9 @@ public class FileManagerProducer @Inject StorageServiceConfig storageConfig; + @Inject + S3Client s3Client; + @Produces public PathMappedFileManager getFileManager() { @@ -55,10 +60,19 @@ public PathMappedFileManager getFileManager() PathMappedStorageConfig config = new DefaultPathMappedStorageConfig( props ); PathDB pathDB = new CassandraPathDB( config ); - PhysicalStore physicalStore = new FileBasedPhysicalStore( storageConfig.baseDir() ); + PhysicalStore physicalStore; + String storageType = storageConfig.type(); + + if ( StorageServiceConfig.STORAGE_S3.equals( storageType ) ) + { + physicalStore = new FileBasedPhysicalStore( storageConfig.baseDir() ); + } + else + { + physicalStore = new S3PhysicalStore( s3Client, storageConfig.bucketName() ); + } - PathMappedFileManager fileManager = new PathMappedFileManager( config, pathDB, physicalStore ); - return fileManager; + return new PathMappedFileManager( config, pathDB, physicalStore ); } } diff --git a/src/main/resources/application.yaml b/src/main/resources/application.yaml index a739dc8..641ee06 100644 --- a/src/main/resources/application.yaml +++ b/src/main/resources/application.yaml @@ -53,6 +53,9 @@ quarkus: max-backup-index: 5 max-file-size: 10M + devservices: + enabled: false + swagger-ui: always-include: true @@ -67,6 +70,9 @@ storage: baseDir: "/tmp" readonly: false removableFilesystemPattern: ".+:(remote|group):.+" + type: s3 + bucket: + name: test "%dev": quarkus: