This is an automated email from the ASF dual-hosted git repository. martin_s pushed a commit to branch feature/storage_refactoring in repository https://gitbox.apache.org/repos/asf/archiva.git
commit 17c3bb60da9fa76d69f53fc6c42e9b49c959e644 Author: Martin Stockhammer <[email protected]> AuthorDate: Sun May 19 17:34:57 2019 +0200 Switching to repository storage API --- .../archiva/repository/ManagedRepository.java | 2 + .../repository/ManagedRepositoryContent.java | 54 +------------- .../archiva/repository/AbstractRepository.java | 4 + .../mock/ManagedRepositoryContentMock.java | 34 +++++++++ .../maven2/ManagedDefaultRepositoryContent.java | 86 +++------------------- 5 files changed, 52 insertions(+), 128 deletions(-) diff --git a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ManagedRepository.java b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ManagedRepository.java index 3acd161..2c77cad 100644 --- a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ManagedRepository.java +++ b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ManagedRepository.java @@ -20,6 +20,8 @@ package org.apache.archiva.repository; */ +import org.apache.archiva.repository.content.RepositoryStorage; + import java.util.Set; /** diff --git a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ManagedRepositoryContent.java b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ManagedRepositoryContent.java index 37ba9cf..a496f83 100644 --- a/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ManagedRepositoryContent.java +++ b/archiva-modules/archiva-base/archiva-repository-api/src/main/java/org/apache/archiva/repository/ManagedRepositoryContent.java @@ -23,6 +23,7 @@ import org.apache.archiva.model.ArchivaArtifact; import org.apache.archiva.model.ArtifactReference; import org.apache.archiva.model.ProjectReference; import org.apache.archiva.model.VersionedReference; +import org.apache.archiva.repository.content.RepositoryStorage; import org.apache.archiva.repository.content.StorageAsset; import java.io.IOException; @@ -41,7 +42,7 @@ import java.util.function.Function; * * This interface */ -public interface ManagedRepositoryContent extends RepositoryContent +public interface ManagedRepositoryContent extends RepositoryContent, RepositoryStorage { @@ -233,56 +234,5 @@ public interface ManagedRepositoryContent extends RepositoryContent */ String toPath( ArchivaArtifact reference ); - /** - * Returns information about a specific storage asset. - * @param path - * @return - */ - StorageAsset getAsset(String path); - - /** - * Consumes the data and sets a lock for the file during the operation. - * - * @param asset - * @param consumerFunction - * @param readLock - * @throws IOException - */ - void consumeData( StorageAsset asset, Consumer<InputStream> consumerFunction, boolean readLock ) throws IOException; - /** - * Adds a new asset to the underlying storage. - * @param path The path to the asset. - * @param container True, if the asset should be a container, false, if it is a file. - * @return - */ - StorageAsset addAsset(String path, boolean container); - - /** - * Removes the given asset from the storage. - * - * @param asset - * @throws IOException - */ - void removeAsset(StorageAsset asset) throws IOException; - - /** - * Moves the asset to the given location and returns the asset object for the destination. - * - * @param origin - * @param destination - * @return - */ - StorageAsset moveAsset(StorageAsset origin, String destination) throws IOException; - - - /** - * Copies the given asset to the new destination. - * - * @param origin - * @param destination - * @return - * @throws IOException - */ - StorageAsset copyAsset(StorageAsset origin, String destination) throws IOException; } diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepository.java b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepository.java index 62d8168..5272708 100644 --- a/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepository.java +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/main/java/org/apache/archiva/repository/AbstractRepository.java @@ -321,4 +321,8 @@ public abstract class AbstractRepository implements EditableRepository, Reposito this.listeners.clear(); } + protected Path getRepositoryBase() { + return repositoryBase; + } + } diff --git a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java index efcdfed..91d584b 100644 --- a/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java +++ b/archiva-modules/archiva-base/archiva-repository-layer/src/test/java/org/apache/archiva/repository/mock/ManagedRepositoryContentMock.java @@ -28,10 +28,14 @@ import org.apache.archiva.repository.LayoutException; import org.apache.archiva.repository.ManagedRepository; import org.apache.archiva.repository.ManagedRepositoryContent; import org.apache.archiva.repository.RepositoryException; +import org.apache.archiva.repository.content.StorageAsset; import org.springframework.stereotype.Service; +import java.io.IOException; +import java.io.InputStream; import java.nio.file.Path; import java.util.Set; +import java.util.function.Consumer; /** * @author Martin Stockhammer <[email protected]> @@ -166,4 +170,34 @@ public class ManagedRepositoryContentMock implements ManagedRepositoryContent { return null; } + + @Override + public StorageAsset getAsset(String path) { + return null; + } + + @Override + public void consumeData(StorageAsset asset, Consumer<InputStream> consumerFunction, boolean readLock) throws IOException { + + } + + @Override + public StorageAsset addAsset(String path, boolean container) { + return null; + } + + @Override + public void removeAsset(StorageAsset asset) throws IOException { + + } + + @Override + public StorageAsset moveAsset(StorageAsset origin, String destination) throws IOException { + return null; + } + + @Override + public StorageAsset copyAsset(StorageAsset origin, String destination) throws IOException { + return null; + } } diff --git a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/ManagedDefaultRepositoryContent.java b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/ManagedDefaultRepositoryContent.java index e6da2c1..92c9b60 100644 --- a/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/ManagedDefaultRepositoryContent.java +++ b/archiva-modules/archiva-maven/archiva-maven-repository/src/main/java/org/apache/archiva/repository/content/maven2/ManagedDefaultRepositoryContent.java @@ -38,6 +38,7 @@ import org.apache.archiva.repository.ManagedRepository; import org.apache.archiva.repository.ManagedRepositoryContent; import org.apache.archiva.repository.RepositoryException; import org.apache.archiva.repository.content.FilesystemAsset; +import org.apache.archiva.repository.content.FilesystemStorage; import org.apache.archiva.repository.content.StorageAsset; import org.apache.commons.io.FileUtils; import org.apache.commons.lang.StringUtils; @@ -66,7 +67,7 @@ public class ManagedDefaultRepositoryContent implements ManagedRepositoryContent { - private final FileLockManager fileLockManager; + private final FilesystemStorage storage; private FileTypes filetypes; @@ -81,16 +82,16 @@ public class ManagedDefaultRepositoryContent public ManagedDefaultRepositoryContent(ManagedRepository repository, FileTypes fileTypes, FileLockManager lockManager) { super(Collections.singletonList( new DefaultArtifactMappingProvider() )); setFileTypes( fileTypes ); - this.fileLockManager = lockManager; setRepository( repository ); + storage = new FilesystemStorage(getRepoDir(), lockManager); } public ManagedDefaultRepositoryContent( ManagedRepository repository, List<? extends ArtifactMappingProvider> artifactMappingProviders, FileTypes fileTypes, FileLockManager lockManager ) { super(artifactMappingProviders==null ? Collections.singletonList( new DefaultArtifactMappingProvider() ) : artifactMappingProviders); setFileTypes( fileTypes ); - this.fileLockManager = lockManager; setRepository( repository ); + storage = new FilesystemStorage(getRepoDir(), lockManager); } private Path getRepoDir() { @@ -535,105 +536,38 @@ public class ManagedDefaultRepositoryContent @Override public void consumeData( StorageAsset asset, Consumer<InputStream> consumerFunction, boolean readLock ) throws IOException { - final Path path = asset.getFilePath(); - try { - if (readLock) { - consumeDataLocked( path, consumerFunction ); - } else - { - try ( InputStream is = Files.newInputStream( path ) ) - { - consumerFunction.accept( is ); - } - catch ( IOException e ) - { - log.error("Could not read the input stream from file {}", path); - throw e; - } - } - } catch (RuntimeException e) - { - log.error( "Runtime exception during data consume from artifact {}. Error: {}", path, e.getMessage() ); - throw new IOException( e ); - } - - } - - public void consumeDataLocked( Path file, Consumer<InputStream> consumerFunction) throws IOException - { - - final Lock lock; - try - { - lock = fileLockManager.readFileLock( file ); - try ( InputStream is = Files.newInputStream( lock.getFile())) - { - consumerFunction.accept( is ); - } - catch ( IOException e ) - { - log.error("Could not read the input stream from file {}", file); - throw e; - } finally - { - fileLockManager.release( lock ); - } - } - catch ( FileLockException | FileNotFoundException | FileLockTimeoutException e) - { - log.error("Locking error on file {}", file); - throw new IOException(e); - } + storage.consumeData(asset, consumerFunction, readLock); } @Override public StorageAsset getAsset( String path ) { - final Path repoPath = getRepoDir(); - return new FilesystemAsset( repoPath, path); + return storage.getAsset(path); } @Override public StorageAsset addAsset( String path, boolean container ) { - final Path repoPath = getRepoDir(); - FilesystemAsset asset = new FilesystemAsset( repoPath, path , container); - return asset; + return storage.addAsset(path, container); } @Override public void removeAsset( StorageAsset asset ) throws IOException { - Files.delete(asset.getFilePath()); + storage.removeAsset(asset); } @Override public StorageAsset moveAsset( StorageAsset origin, String destination ) throws IOException { - final Path repoPath = getRepoDir(); - boolean container = origin.isContainer(); - FilesystemAsset newAsset = new FilesystemAsset( repoPath, destination, container ); - Files.move(origin.getFilePath(), newAsset.getFilePath()); - return newAsset; + return storage.moveAsset(origin, destination); } @Override public StorageAsset copyAsset( StorageAsset origin, String destination ) throws IOException { - final Path repoPath = getRepoDir(); - boolean container = origin.isContainer(); - FilesystemAsset newAsset = new FilesystemAsset( repoPath, destination, container ); - if (Files.exists(newAsset.getFilePath())) { - throw new IOException("Destination file exists already "+ newAsset.getFilePath()); - } - if (Files.isDirectory( origin.getFilePath() )) - { - FileUtils.copyDirectory(origin.getFilePath( ).toFile(), newAsset.getFilePath( ).toFile() ); - } else if (Files.isRegularFile( origin.getFilePath() )) { - FileUtils.copyFile(origin.getFilePath( ).toFile(), newAsset.getFilePath( ).toFile() ); - } - return newAsset; + return storage.copyAsset(origin, destination); }
