You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ma...@apache.org on 2022/04/16 17:07:35 UTC
[archiva] branch archiva-2.x updated: MRM-2028: Fixing errors when file does not exist
This is an automated email from the ASF dual-hosted git repository.
martin_s pushed a commit to branch archiva-2.x
in repository https://gitbox.apache.org/repos/asf/archiva.git
The following commit(s) were added to refs/heads/archiva-2.x by this push:
new 762b72183 MRM-2028: Fixing errors when file does not exist
762b72183 is described below
commit 762b721833bbb8228b0103a60c960684ee61c510
Author: Martin Schreier <ma...@apache.org>
AuthorDate: Sat Apr 16 19:07:29 2022 +0200
MRM-2028: Fixing errors when file does not exist
---
.../functors/ConsumerWantsFilePredicate.java | 2 +-
.../core/ArtifactMissingChecksumsConsumer.java | 66 ++++++++++++----------
.../scanner/RepositoryScannerInstance.java | 29 ++++++----
.../functors/ConsumerProcessFileClosure.java | 34 ++++++-----
.../scanner/RepositoryContentConsumersTest.java | 8 ++-
pom.xml | 4 ++
6 files changed, 83 insertions(+), 60 deletions(-)
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/archiva/consumers/functors/ConsumerWantsFilePredicate.java b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/archiva/consumers/functors/ConsumerWantsFilePredicate.java
index 07dc5276e..7c1910f57 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/archiva/consumers/functors/ConsumerWantsFilePredicate.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/archiva/consumers/functors/ConsumerWantsFilePredicate.java
@@ -128,7 +128,7 @@ public class ConsumerWantsFilePredicate
{
if ( SelectorUtils.matchPath( pattern, relativePath, isCaseSensitive ) )
{
- // Definately does NOT WANT FILE.
+ // Definitely does NOT WANT FILE.
return false;
}
}
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/ArtifactMissingChecksumsConsumer.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/ArtifactMissingChecksumsConsumer.java
index 9984b0b06..8865eeab9 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/ArtifactMissingChecksumsConsumer.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/ArtifactMissingChecksumsConsumer.java
@@ -155,47 +155,51 @@ public class ArtifactMissingChecksumsConsumer
File artifactFile = new File( this.repositoryDir, path );
File checksumFile = new File( this.repositoryDir, path + "." + checksumAlgorithm.getExt( ) );
- if ( checksumFile.exists( ) )
+ // Checking for existence
+ if (artifactFile.exists())
{
- checksum = new ChecksummedFile( artifactFile );
- try
+ if ( checksumFile.exists( ) )
{
- if ( !checksum.isValidChecksum( checksumAlgorithm ) )
+ checksum = new ChecksummedFile( artifactFile );
+ try
{
- checksum.fixChecksums( new ChecksumAlgorithm[]{checksumAlgorithm} );
- log.info( "Fixed checksum file {}", checksumFile.getAbsolutePath( ) );
- triggerConsumerInfo( "Fixed checksum file " + checksumFile.getAbsolutePath( ) );
+ if ( !checksum.isValidChecksum( checksumAlgorithm ) )
+ {
+ checksum.fixChecksums( new ChecksumAlgorithm[]{checksumAlgorithm} );
+ log.info( "Fixed checksum file {}", checksumFile.getAbsolutePath( ) );
+ triggerConsumerInfo( "Fixed checksum file " + checksumFile.getAbsolutePath( ) );
+ }
+ }
+ catch ( IOException e )
+ {
+ log.error( "Cannot calculate checksum for file {} :", checksumFile, e );
+ triggerConsumerError( TYPE_CHECKSUM_CANNOT_CALC, "Cannot calculate checksum for file " + checksumFile +
+ ": " + e.getMessage( ) );
}
}
- catch ( IOException e )
- {
- log.error( "Cannot calculate checksum for file {} :", checksumFile, e );
- triggerConsumerError( TYPE_CHECKSUM_CANNOT_CALC, "Cannot calculate checksum for file " + checksumFile +
- ": " + e.getMessage( ) );
- }
- }
- else if ( !checksumFile.exists( ) )
- {
- checksum = new ChecksummedFile( artifactFile );
- try
+ else if ( !checksumFile.exists( ) )
{
- checksum.createChecksum( checksumAlgorithm );
- log.info( "Created missing checksum file {}", checksumFile.getAbsolutePath( ) );
- triggerConsumerInfo( "Created missing checksum file " + checksumFile.getAbsolutePath( ) );
+ checksum = new ChecksummedFile( artifactFile );
+ try
+ {
+ checksum.createChecksum( checksumAlgorithm );
+ log.info( "Created missing checksum file {}", checksumFile.getAbsolutePath( ) );
+ triggerConsumerInfo( "Created missing checksum file " + checksumFile.getAbsolutePath( ) );
+ }
+ catch ( IOException e )
+ {
+ log.error( "Cannot create {} checksum for file {} :", checksumAlgorithm, artifactFile, e );
+ triggerConsumerError( TYPE_CHECKSUM_CANNOT_CREATE, "Cannot create checksum for file " + checksumFile +
+ ": " + e.getMessage( ) );
+ }
}
- catch ( IOException e )
+ else
{
- log.error( "Cannot create checksum for file {} :", checksumFile, e );
- triggerConsumerError( TYPE_CHECKSUM_CANNOT_CREATE, "Cannot create checksum for file " + checksumFile +
- ": " + e.getMessage( ) );
+ log.warn( "Checksum file {} is not a file. ", checksumFile.getAbsolutePath( ) );
+ triggerConsumerWarning( TYPE_CHECKSUM_NOT_FILE,
+ "Checksum file " + checksumFile.getAbsolutePath( ) + " is not a file." );
}
}
- else
- {
- log.warn( "Checksum file {} is not a file. ", checksumFile.getAbsolutePath( ) );
- triggerConsumerWarning( TYPE_CHECKSUM_NOT_FILE,
- "Checksum file " + checksumFile.getAbsolutePath( ) + " is not a file." );
- }
}
/*
diff --git a/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryScannerInstance.java b/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryScannerInstance.java
index 65cb6603c..cc9ae676b 100644
--- a/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryScannerInstance.java
+++ b/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryScannerInstance.java
@@ -150,22 +150,27 @@ public class RepositoryScannerInstance
// consume files regardless - the predicate will check the timestamp
BaseFile basefile = new BaseFile( repository.getLocation(), file );
- // Timestamp finished points to the last successful scan, not this current one.
- if ( file.lastModified() >= changesSince )
+ // Safety check, if a parallel process removes the file
+ if (basefile.exists())
{
- stats.increaseNewFileCount();
- }
- consumerProcessFile.setBasefile( basefile );
- consumerWantsFile.setBasefile( basefile );
+ // Timestamp finished points to the last successful scan, not this current one.
+ if ( file.lastModified( ) >= changesSince )
+ {
+ stats.increaseNewFileCount( );
+ }
- Closure processIfWanted = IfClosure.getInstance( consumerWantsFile, consumerProcessFile );
- CollectionUtils.forAllDo( this.knownConsumers, processIfWanted );
+ consumerProcessFile.setBasefile( basefile );
+ consumerWantsFile.setBasefile( basefile );
- if ( consumerWantsFile.getWantedFileCount() <= 0 )
- {
- // Nothing known processed this file. It is invalid!
- CollectionUtils.forAllDo( this.invalidConsumers, consumerProcessFile );
+ Closure processIfWanted = IfClosure.getInstance( consumerWantsFile, consumerProcessFile );
+ CollectionUtils.forAllDo( this.knownConsumers, processIfWanted );
+
+ if ( consumerWantsFile.getWantedFileCount( ) <= 0 )
+ {
+ // Nothing known processed this file. It is invalid!
+ CollectionUtils.forAllDo( this.invalidConsumers, consumerProcessFile );
+ }
}
}
diff --git a/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/functors/ConsumerProcessFileClosure.java b/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/functors/ConsumerProcessFileClosure.java
index ca44dd9ba..794889b66 100644
--- a/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/functors/ConsumerProcessFileClosure.java
+++ b/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/functors/ConsumerProcessFileClosure.java
@@ -54,22 +54,26 @@ public class ConsumerProcessFileClosure
String id = consumer.getId();
try
{
- log.debug( "Sending to consumer: {}", id );
-
- long startTime = System.currentTimeMillis();
- consumer.processFile( basefile.getRelativePath(), executeOnEntireRepo );
- long endTime = System.currentTimeMillis();
-
- if ( consumerTimings != null )
- {
- Long value = consumerTimings.get( id );
- consumerTimings.put( id, ( value != null ? value : 0 ) + endTime - startTime );
- }
-
- if ( consumerCounts != null )
+ // Safety check to avoid errors, if a parallel process removes files
+ if (basefile.exists())
{
- Long value = consumerCounts.get( id );
- consumerCounts.put( id, ( value != null ? value : 0 ) + 1 );
+ log.debug( "Sending to consumer: {}", id );
+
+ long startTime = System.currentTimeMillis( );
+ consumer.processFile( basefile.getRelativePath( ), executeOnEntireRepo );
+ long endTime = System.currentTimeMillis( );
+
+ if ( consumerTimings != null )
+ {
+ Long value = consumerTimings.get( id );
+ consumerTimings.put( id, ( value != null ? value : 0 ) + endTime - startTime );
+ }
+
+ if ( consumerCounts != null )
+ {
+ Long value = consumerCounts.get( id );
+ consumerCounts.put( id, ( value != null ? value : 0 ) + 1 );
+ }
}
}
catch ( Exception e )
diff --git a/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/RepositoryContentConsumersTest.java b/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/RepositoryContentConsumersTest.java
index db981234a..9f94f915a 100644
--- a/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/RepositoryContentConsumersTest.java
+++ b/archiva-modules/archiva-base/archiva-repository-scanner/src/test/java/org/apache/archiva/repository/scanner/RepositoryContentConsumersTest.java
@@ -26,6 +26,7 @@ import org.apache.archiva.configuration.ArchivaConfiguration;
import org.apache.archiva.consumers.InvalidRepositoryContentConsumer;
import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
import org.apache.archiva.test.utils.ArchivaSpringJUnit4ClassRunner;
+import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.SystemUtils;
import org.easymock.IMocksControl;
import org.junit.Test;
@@ -272,7 +273,10 @@ public class RepositoryContentConsumersTest
consumers.setSelectedInvalidConsumers( Collections.singletonList( selectedInvalidConsumer ) );
ManagedRepository repo = createRepository( "id", "name", new File( "target/test-repo" ) );
- File testFile = new File( "target/test-repo/path/to/test-file.txt" );
+ File testDir = new File( "target/test-repo/path/to" );
+ FileUtils.forceMkdir( testDir );
+ File testFile = new File( testDir, "test-file.txt" );
+ FileUtils.touch( testFile );
Date startTime = new Date( System.currentTimeMillis() );
startTime.setTime( 12345678 );
@@ -295,6 +299,8 @@ public class RepositoryContentConsumersTest
invalidControl.reset();
File notIncludedTestFile = new File( "target/test-repo/path/to/test-file.xml" );
+ FileUtils.touch( notIncludedTestFile );
+
selectedKnownConsumer.beginScan( repo, startTime, false );
expect( selectedKnownConsumer.getExcludes() ).andReturn( Collections.<String>emptyList() );
diff --git a/pom.xml b/pom.xml
index b675a8e1b..f63335bf8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -48,6 +48,10 @@
</scm>
<properties>
+
+ <maven.compiler.source>8</maven.compiler.source>
+ <maven.compiler.target>8</maven.compiler.target>
+
<commons-codec.version>1.6</commons-codec.version>
<commons-collections.version>3.2.1</commons-collections.version>
<commons-fileupload.version>1.2.2</commons-fileupload.version>