@@ -682,6 +682,16 @@ const services = {
682682 return metadata . getObjectMD ( mpuBucketName , mpuOverviewKey , { } , log ,
683683 ( err , res ) => {
684684 if ( err ) {
685+ if ( err . is && err . is . NoSuchKey ) {
686+ // The overview key no longer exists, meaning completeMultipartUpload
687+ // already ran to completion and cleaned up the MPU bucket.
688+ // This is a race condition: objectPutPart checked for old
689+ // part locations after completeMultipartUpload deleted the overview.
690+ // Returning true (complete in progress) prevents objectPutPart
691+ // from deleting part data that may have already been committed
692+ // as the final object.
693+ return cb ( null , true ) ;
694+ }
685695 log . error ( 'error getting the overview object from mpu bucket' , {
686696 error : err ,
687697 method : 'services.isCompleteMPUInProgress' ,
@@ -737,7 +747,7 @@ const services = {
737747 metadata . getObjectMD ( mpuBucket . getName ( ) , mpuOverviewKey ,
738748 { } , log , ( err , storedMetadata ) => {
739749 if ( err ) {
740- if ( err . is . NoSuchKey ) {
750+ if ( err . is && err . is . NoSuchKey ) {
741751 return cb ( errors . NoSuchUpload ) ;
742752 }
743753 log . error ( 'error from metadata' , { error : err } ) ;
0 commit comments