@@ -120,7 +120,9 @@ public MultipartUpload createMultipartUpload(
120120 tags ,
121121 null ,
122122 checksumType ,
123- checksumAlgorithm );
123+ checksumAlgorithm ,
124+ false
125+ );
124126 lockStore .putIfAbsent (uploadId , new Object ());
125127 writeMetafile (bucket , multipartUploadInfo );
126128
@@ -139,7 +141,7 @@ public List<MultipartUpload> listMultipartUploads(BucketMetadata bucketMetadata,
139141 path -> {
140142 var fileName = path .getFileName ().toString ();
141143 var uploadMetadata = getUploadMetadata (bucketMetadata , UUID .fromString (fileName ));
142- if (uploadMetadata != null ) {
144+ if (uploadMetadata != null && ! uploadMetadata . completed () ) {
143145 return uploadMetadata .upload ();
144146 } else {
145147 return null ;
@@ -161,10 +163,18 @@ public MultipartUploadInfo getMultipartUploadInfo(
161163 return getUploadMetadata (bucketMetadata , uploadId );
162164 }
163165
164- public MultipartUpload getMultipartUpload (BucketMetadata bucketMetadata , UUID uploadId ) {
166+ public MultipartUpload getMultipartUpload (BucketMetadata bucketMetadata , UUID uploadId , boolean includeCompleted ) {
165167 var uploadMetadata = getUploadMetadata (bucketMetadata , uploadId );
166168 if (uploadMetadata != null ) {
167- return uploadMetadata .upload ();
169+ if (includeCompleted ) {
170+ return uploadMetadata .upload ();
171+ } else {
172+ if (uploadMetadata .completed ()) {
173+ throw new IllegalArgumentException ("No active MultipartUpload found with uploadId: " + uploadId );
174+ } else {
175+ return uploadMetadata .upload ();
176+ }
177+ }
168178 } else {
169179 throw new IllegalArgumentException ("No MultipartUpload found with uploadId: " + uploadId );
170180 }
@@ -243,12 +253,16 @@ public CompleteMultipartUploadResult completeMultipartUpload(
243253 uploadInfo .storageClass (),
244254 ChecksumType .COMPOSITE
245255 );
246- FileUtils .deleteDirectory (partFolder .toFile ());
256+ //delete parts and update MultipartInfo
257+ partsPaths .forEach (partPath -> FileUtils .deleteQuietly (partPath .toFile ()));
258+ var completedUploadInfo = uploadInfo .complete ();
259+ writeMetafile (bucket , completedUploadInfo );
260+
247261 return CompleteMultipartUploadResult .from (location ,
248- uploadInfo .bucket (),
262+ completedUploadInfo .bucket (),
249263 key ,
250264 etag ,
251- uploadInfo ,
265+ completedUploadInfo ,
252266 checksumFor ,
253267 s3ObjectMetadata .checksumType (),
254268 checksumAlgorithm ,
@@ -343,8 +357,13 @@ public String copyPart(
343357
344358 verifyMultipartUploadPreparation (destinationBucket , destinationId , uploadId );
345359
346- return copyPartToFile (bucket , id , copyRange ,
347- createPartFile (destinationBucket , destinationId , uploadId , partNumber ), versionId );
360+ return copyPartToFile (
361+ bucket ,
362+ id ,
363+ copyRange ,
364+ createPartFile (destinationBucket , destinationId , uploadId , partNumber ),
365+ versionId
366+ );
348367 }
349368
350369 private static InputStream toInputStream (List <Path > paths ) {
0 commit comments