Skip to content

Commit c4aa48d

Browse files
authored
[MRESOLVER-282] Drop PartialFile use (#212)
Drop PartialFile, clean up regarding resource handling and lessen temp file use. Downside: there is no "download resume" happening anymore. On the other hand, from now on, resolver will download "all or nothing", so no more "partial downloads" can happen either. HttpClientTransport is STILL ABLE to resume downloads (was the only one anyway), but due removal of PartialFile it will never resume. Later we may replace removed logic with something simpler. --- https://issues.apache.org/jira/browse/MRESOLVER-282
1 parent 76ee5e3 commit c4aa48d

File tree

12 files changed

+213
-1041
lines changed

12 files changed

+213
-1041
lines changed

maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/BasicRepositoryConnector.java

Lines changed: 5 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
import org.eclipse.aether.transfer.TransferResource;
6969
import org.eclipse.aether.transform.FileTransformer;
7070
import org.eclipse.aether.util.ConfigUtils;
71+
import org.eclipse.aether.util.FileUtils;
7172
import org.eclipse.aether.util.concurrency.RunnableErrorForwarder;
7273
import org.eclipse.aether.util.concurrency.WorkerThreadFactory;
7374
import org.slf4j.Logger;
@@ -82,10 +83,6 @@ final class BasicRepositoryConnector
8283

8384
private static final String CONFIG_PROP_THREADS = "aether.connector.basic.threads";
8485

85-
private static final String CONFIG_PROP_RESUME = "aether.connector.resumeDownloads";
86-
87-
private static final String CONFIG_PROP_RESUME_THRESHOLD = "aether.connector.resumeThreshold";
88-
8986
private static final String CONFIG_PROP_SMART_CHECKSUMS = "aether.connector.smartChecksums";
9087

9188
private static final Logger LOGGER = LoggerFactory.getLogger( BasicRepositoryConnector.class );
@@ -104,8 +101,6 @@ final class BasicRepositoryConnector
104101

105102
private final ChecksumPolicyProvider checksumPolicyProvider;
106103

107-
private final PartialFile.Factory partialFileFactory;
108-
109104
private final int maxThreads;
110105

111106
private final boolean smartChecksums;
@@ -154,18 +149,6 @@ final class BasicRepositoryConnector
154149
persistedChecksums =
155150
ConfigUtils.getBoolean( session, ConfigurationProperties.DEFAULT_PERSISTED_CHECKSUMS,
156151
ConfigurationProperties.PERSISTED_CHECKSUMS );
157-
158-
boolean resumeDownloads =
159-
ConfigUtils.getBoolean( session, true, CONFIG_PROP_RESUME + '.' + repository.getId(),
160-
CONFIG_PROP_RESUME );
161-
long resumeThreshold =
162-
ConfigUtils.getLong( session, 64 * 1024, CONFIG_PROP_RESUME_THRESHOLD + '.' + repository.getId(),
163-
CONFIG_PROP_RESUME_THRESHOLD );
164-
int requestTimeout =
165-
ConfigUtils.getInteger( session, ConfigurationProperties.DEFAULT_REQUEST_TIMEOUT,
166-
ConfigurationProperties.REQUEST_TIMEOUT + '.' + repository.getId(),
167-
ConfigurationProperties.REQUEST_TIMEOUT );
168-
partialFileFactory = new PartialFile.Factory( resumeDownloads, resumeThreshold, requestTimeout );
169152
}
170153

171154
private Executor getExecutor( Collection<?> artifacts, Collection<?> metadatas )
@@ -430,7 +413,7 @@ protected void runTask()
430413

431414
class GetTaskRunner
432415
extends TaskRunner
433-
implements PartialFile.RemoteAccessChecker, ChecksumValidator.ChecksumFetcher
416+
implements ChecksumValidator.ChecksumFetcher
434417
{
435418

436419
private final File file;
@@ -449,13 +432,6 @@ class GetTaskRunner
449432
checksumPolicy, providedChecksums, safe( checksumLocations ) );
450433
}
451434

452-
@Override
453-
public void checkRemoteAccess()
454-
throws Exception
455-
{
456-
transporter.peek( new PeekTask( path ) );
457-
}
458-
459435
@Override
460436
public boolean fetchChecksum( URI remote, File local )
461437
throws Exception
@@ -481,21 +457,13 @@ protected void runTask()
481457
{
482458
fileProcessor.mkdirs( file.getParentFile() );
483459

484-
PartialFile partFile = partialFileFactory.newInstance( file, this );
485-
if ( partFile == null )
486-
{
487-
LOGGER.debug( "Concurrent download of {} just finished, skipping download", file );
488-
return;
489-
}
490-
491-
try
460+
try ( FileUtils.TempFile tempFile = FileUtils.newTempFile( file.toPath() ) )
492461
{
493-
File tmp = partFile.getFile();
462+
final File tmp = tempFile.getPath().toFile();
494463
listener.setChecksumCalculator( checksumValidator.newChecksumCalculator( tmp ) );
495464
for ( int firstTrial = 0, lastTrial = 1, trial = firstTrial; ; trial++ )
496465
{
497-
boolean resume = partFile.isResume() && trial <= firstTrial;
498-
GetTask task = new GetTask( path ).setDataFile( tmp, resume ).setListener( listener );
466+
GetTask task = new GetTask( path ).setDataFile( tmp, false ).setListener( listener );
499467
transporter.get( task );
500468
try
501469
{
@@ -527,11 +495,6 @@ protected void runTask()
527495
checksumValidator.commit();
528496
}
529497
}
530-
finally
531-
{
532-
partFile.close();
533-
checksumValidator.close();
534-
}
535498
}
536499

537500
}

maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/ChecksumValidator.java

Lines changed: 12 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,15 @@
2424
import java.net.URI;
2525
import java.util.Collection;
2626
import java.util.HashMap;
27-
import java.util.HashSet;
2827
import java.util.Map;
29-
import java.util.UUID;
3028

3129
import org.eclipse.aether.spi.connector.checksum.ChecksumAlgorithmFactory;
3230
import org.eclipse.aether.spi.connector.checksum.ChecksumPolicy;
3331
import org.eclipse.aether.spi.connector.checksum.ChecksumPolicy.ChecksumKind;
3432
import org.eclipse.aether.spi.connector.layout.RepositoryLayout.ChecksumLocation;
3533
import org.eclipse.aether.spi.io.FileProcessor;
3634
import org.eclipse.aether.transfer.ChecksumFailureException;
35+
import org.eclipse.aether.util.FileUtils;
3736
import org.slf4j.Logger;
3837
import org.slf4j.LoggerFactory;
3938

@@ -61,8 +60,6 @@ boolean fetchChecksum( URI remote, File local )
6160

6261
private final Collection<ChecksumAlgorithmFactory> checksumAlgorithmFactories;
6362

64-
private final Collection<File> tempFiles;
65-
6663
private final FileProcessor fileProcessor;
6764

6865
private final ChecksumFetcher checksumFetcher;
@@ -73,7 +70,7 @@ boolean fetchChecksum( URI remote, File local )
7370

7471
private final Collection<ChecksumLocation> checksumLocations;
7572

76-
private final Map<File, Object> checksumFiles;
73+
private final Map<File, String> checksumExpectedValues;
7774

7875
ChecksumValidator( File dataFile,
7976
Collection<ChecksumAlgorithmFactory> checksumAlgorithmFactories,
@@ -85,13 +82,12 @@ boolean fetchChecksum( URI remote, File local )
8582
{
8683
this.dataFile = dataFile;
8784
this.checksumAlgorithmFactories = checksumAlgorithmFactories;
88-
this.tempFiles = new HashSet<>();
8985
this.fileProcessor = fileProcessor;
9086
this.checksumFetcher = checksumFetcher;
9187
this.checksumPolicy = checksumPolicy;
9288
this.providedChecksums = providedChecksums;
9389
this.checksumLocations = checksumLocations;
94-
this.checksumFiles = new HashMap<>();
90+
this.checksumExpectedValues = new HashMap<>();
9591
}
9692

9793
public ChecksumCalculator newChecksumCalculator( File targetFile )
@@ -152,7 +148,7 @@ private boolean validateChecksums( Map<String, ?> actualChecksums, ChecksumKind
152148

153149
String actual = String.valueOf( calculated );
154150
String expected = entry.getValue().toString();
155-
checksumFiles.put( getChecksumFile( checksumAlgorithmFactory ), expected );
151+
checksumExpectedValues.put( getChecksumFile( checksumAlgorithmFactory ), expected );
156152

157153
if ( !isEqualChecksum( expected, actual ) )
158154
{
@@ -183,10 +179,10 @@ private boolean validateExternalChecksums( Map<String, ?> actualChecksums )
183179
);
184180
continue;
185181
}
186-
try
182+
File checksumFile = getChecksumFile( checksumLocation.getChecksumAlgorithmFactory() );
183+
try ( FileUtils.TempFile tempFile = FileUtils.newTempFile( checksumFile.toPath() ) )
187184
{
188-
File checksumFile = getChecksumFile( checksumLocation.getChecksumAlgorithmFactory() );
189-
File tmp = createTempFile( checksumFile );
185+
File tmp = tempFile.getPath().toFile();
190186
try
191187
{
192188
if ( !checksumFetcher.fetchChecksum(
@@ -206,7 +202,7 @@ private boolean validateExternalChecksums( Map<String, ?> actualChecksums )
206202

207203
String actual = String.valueOf( calculated );
208204
String expected = fileProcessor.readChecksum( tmp );
209-
checksumFiles.put( checksumFile, tmp );
205+
checksumExpectedValues.put( checksumFile, expected );
210206

211207
if ( !isEqualChecksum( expected, actual ) )
212208
{
@@ -240,33 +236,10 @@ private File getChecksumFile( ChecksumAlgorithmFactory factory )
240236
return new File( dataFile.getPath() + '.' + factory.getFileExtension() );
241237
}
242238

243-
private File createTempFile( File path )
244-
throws IOException
245-
{
246-
File file =
247-
File.createTempFile( path.getName() + "-"
248-
+ UUID.randomUUID().toString().replace( "-", "" ).substring( 0, 8 ), ".tmp", path.getParentFile() );
249-
tempFiles.add( file );
250-
return file;
251-
}
252-
253-
private void clearTempFiles()
254-
{
255-
for ( File file : tempFiles )
256-
{
257-
if ( !file.delete() && file.exists() )
258-
{
259-
LOGGER.debug( "Could not delete temporary file {}", file );
260-
}
261-
}
262-
tempFiles.clear();
263-
}
264-
265239
public void retry()
266240
{
267241
checksumPolicy.onTransferRetry();
268-
checksumFiles.clear();
269-
clearTempFiles();
242+
checksumExpectedValues.clear();
270243
}
271244

272245
public boolean handle( ChecksumFailureException exception )
@@ -276,33 +249,18 @@ public boolean handle( ChecksumFailureException exception )
276249

277250
public void commit()
278251
{
279-
for ( Map.Entry<File, Object> entry : checksumFiles.entrySet() )
252+
for ( Map.Entry<File, String> entry : checksumExpectedValues.entrySet() )
280253
{
281254
File checksumFile = entry.getKey();
282-
Object tmp = entry.getValue();
283255
try
284256
{
285-
if ( tmp instanceof File )
286-
{
287-
fileProcessor.move( (File) tmp, checksumFile );
288-
tempFiles.remove( tmp );
289-
}
290-
else
291-
{
292-
fileProcessor.writeChecksum( checksumFile, String.valueOf( tmp ) );
293-
}
257+
fileProcessor.writeChecksum( checksumFile, entry.getValue() );
294258
}
295259
catch ( IOException e )
296260
{
297261
LOGGER.debug( "Failed to write checksum file {}", checksumFile, e );
298262
}
299263
}
300-
checksumFiles.clear();
264+
checksumExpectedValues.clear();
301265
}
302-
303-
public void close()
304-
{
305-
clearTempFiles();
306-
}
307-
308266
}

0 commit comments

Comments
 (0)