From e651add56c30a01e32ba21db1300bafefc4baacb Mon Sep 17 00:00:00 2001 From: Harsh Modi Date: Tue, 5 Mar 2024 00:24:32 -0500 Subject: [PATCH] add s3 storage option Signed-off-by: Harsh Modi --- .../def/DefaultGalleyStorageProvider.java | 19 +++++++++- .../DefaultStorageProviderConfiguration.java | 35 +++++++++++++++++++ pom.xml | 2 +- 3 files changed, 54 insertions(+), 2 deletions(-) diff --git a/filers/default/src/main/java/org/commonjava/indy/filer/def/DefaultGalleyStorageProvider.java b/filers/default/src/main/java/org/commonjava/indy/filer/def/DefaultGalleyStorageProvider.java index 3e13dc6d5d..796632f3f4 100644 --- a/filers/default/src/main/java/org/commonjava/indy/filer/def/DefaultGalleyStorageProvider.java +++ b/filers/default/src/main/java/org/commonjava/indy/filer/def/DefaultGalleyStorageProvider.java @@ -56,12 +56,15 @@ import org.commonjava.maven.galley.transport.htcli.UploadMetadataGenTransferDecorator; import org.commonjava.storage.pathmapped.config.DefaultPathMappedStorageConfig; import org.commonjava.storage.pathmapped.config.PathMappedStorageConfig; +import org.commonjava.storage.pathmapped.core.S3PhysicalStore; import org.commonjava.storage.pathmapped.pathdb.datastax.CassandraPathDB; import org.commonjava.storage.pathmapped.metrics.MeasuredPathDB; import org.commonjava.storage.pathmapped.spi.PathDB; import org.commonjava.storage.pathmapped.spi.PhysicalStore; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import software.amazon.awssdk.services.s3.S3Client; +import software.amazon.awssdk.services.s3.model.S3Exception; import javax.annotation.PostConstruct; import javax.enterprise.context.ApplicationScoped; @@ -236,7 +239,21 @@ protected boolean isMetricEnabled( String metricName ) } File legacyBaseDir = config.getLegacyStorageBasedir(); - PhysicalStore physicalStore = new LegacyReadonlyPhysicalStore( storeRoot, legacyBaseDir ); + String storageType = config.getStorageType(); + PhysicalStore physicalStore; + if (DefaultStorageProviderConfiguration.STORAGE_NFS.equals( storageType )) { + physicalStore = new LegacyReadonlyPhysicalStore( storeRoot, legacyBaseDir ); + } else { + try { + S3Client s3Client = S3Client.builder().build(); + String bucketName = config.getBucketName(); + physicalStore = new S3PhysicalStore( s3Client, bucketName ); + } catch ( S3Exception e ) { + logger.error( "Ran into error during storage init e: ", e); + throw e; + } + + } logger.info( "Create cacheProviderFactory, pathDB: {}, physicalStore: {}", pathDB, physicalStore ); PathMappedCacheProviderConfig cacheProviderConfig = diff --git a/filers/default/src/main/java/org/commonjava/indy/filer/def/conf/DefaultStorageProviderConfiguration.java b/filers/default/src/main/java/org/commonjava/indy/filer/def/conf/DefaultStorageProviderConfiguration.java index bd20c192bc..4882694de0 100644 --- a/filers/default/src/main/java/org/commonjava/indy/filer/def/conf/DefaultStorageProviderConfiguration.java +++ b/filers/default/src/main/java/org/commonjava/indy/filer/def/conf/DefaultStorageProviderConfiguration.java @@ -38,6 +38,12 @@ public class DefaultStorageProviderConfiguration public static final String STORAGE_DIR = "indy.storage.dir"; + public static final String STORAGE_S3 = "s3"; + + public static final String STORAGE_NFS = "nfs"; + + public static final String DEFAULT_STORAGE = STORAGE_NFS; + public static final String NFS_STORAGE_DIR = "indy.storage.nfs.dir"; private File storageBasedir; @@ -46,6 +52,10 @@ public class DefaultStorageProviderConfiguration private File nfsStoreBasedir; + private String storageType; + + private String bucketName; + private boolean storageTimeoutEnabled = true; private boolean physicalFileExistenceCheckEnabled = false; @@ -220,6 +230,31 @@ public void setLegacyStorageBasedir( File legacyStorageBasedir ) this.legacyStorageBasedir = legacyStorageBasedir; } + public String getStorageType() + { + if (storageType == null) { + return DEFAULT_STORAGE; + } + return storageType; + } + + @ConfigName( "storage.type" ) + public void setStorageType( String storageType ) + { + this.storageType = storageType; + } + + public String getBucketName() + { + return bucketName; + } + + @ConfigName( "storage.bucket.name" ) + public void setBucketName( String bucketName ) + { + this.bucketName = bucketName; + } + public boolean isStorageTimeoutEnabled() { return storageTimeoutEnabled; diff --git a/pom.xml b/pom.xml index fd8e768004..d0fae384a2 100644 --- a/pom.xml +++ b/pom.xml @@ -83,7 +83,7 @@ 1.19.0-alpha 3.7.1.0 3.11.3 - 2.6 + 2.7-SNAPSHOT 1.9.1 1.6.6 1.16