@@ -201,7 +201,7 @@ func (b *Backuper) Upload(backupName, diffFrom, diffFromRemote, tablePattern str
201
201
return err
202
202
}
203
203
remoteBackupMetaFile := path .Join (backupName , "metadata.json" )
204
- if ! b .resume || (b .resume && ! b .resumableState .IsAlreadyProcessed (remoteBackupMetaFile )) {
204
+ if ! b .resume || (b .resume && ! b .resumableState .IsAlreadyProcessedBool (remoteBackupMetaFile )) {
205
205
retry := retrier .New (retrier .ConstantBackoff (b .cfg .General .RetriesOnFailure , b .cfg .General .RetriesDuration ), nil )
206
206
err = retry .RunCtx (ctx , func (ctx context.Context ) error {
207
207
return b .dst .PutFile (ctx , remoteBackupMetaFile , io .NopCloser (bytes .NewReader (newBackupMetadataBody )))
@@ -210,7 +210,7 @@ func (b *Backuper) Upload(backupName, diffFrom, diffFromRemote, tablePattern str
210
210
return fmt .Errorf ("can't upload %s: %v" , remoteBackupMetaFile , err )
211
211
}
212
212
if b .resume {
213
- b .resumableState .AppendToState (remoteBackupMetaFile )
213
+ b .resumableState .AppendToState (remoteBackupMetaFile , int64 ( len ( newBackupMetadataBody )) )
214
214
}
215
215
}
216
216
if b .isEmbedded {
@@ -236,7 +236,7 @@ func (b *Backuper) Upload(backupName, diffFrom, diffFromRemote, tablePattern str
236
236
}
237
237
238
238
func (b * Backuper ) uploadSingleBackupFile (ctx context.Context , localFile , remoteFile string ) error {
239
- if b .resume && b .resumableState .IsAlreadyProcessed (remoteFile ) {
239
+ if b .resume && b .resumableState .IsAlreadyProcessedBool (remoteFile ) {
240
240
return nil
241
241
}
242
242
log := b .log .WithField ("logger" , "uploadSingleBackupFile" )
@@ -257,7 +257,11 @@ func (b *Backuper) uploadSingleBackupFile(ctx context.Context, localFile, remote
257
257
return fmt .Errorf ("can't upload %s: %v" , remoteFile , err )
258
258
}
259
259
if b .resume {
260
- b .resumableState .AppendToState (remoteFile )
260
+ info , err := os .Stat (localFile )
261
+ if err != nil {
262
+ return fmt .Errorf ("can't stat %s" , localFile )
263
+ }
264
+ b .resumableState .AppendToState (remoteFile , info .Size ())
261
265
}
262
266
return nil
263
267
}
@@ -385,8 +389,10 @@ func (b *Backuper) uploadAndArchiveBackupRelatedDir(ctx context.Context, localBa
385
389
if _ , err := os .Stat (localBackupRelatedDir ); os .IsNotExist (err ) {
386
390
return 0 , nil
387
391
}
388
- if b .resume && b .resumableState .IsAlreadyProcessed (remoteFile ) {
389
- return 0 , nil
392
+ if b .resume {
393
+ if isProcessed , processedSize := b .resumableState .IsAlreadyProcessed (remoteFile ); isProcessed {
394
+ return uint64 (processedSize ), nil
395
+ }
390
396
}
391
397
var localFiles []string
392
398
var err error
@@ -410,7 +416,7 @@ func (b *Backuper) uploadAndArchiveBackupRelatedDir(ctx context.Context, localBa
410
416
return 0 , fmt .Errorf ("can't check uploaded %s file: %v" , remoteFile , err )
411
417
}
412
418
if b .resume {
413
- b .resumableState .AppendToState (remoteFile )
419
+ b .resumableState .AppendToState (remoteFile , remoteUploaded . Size () )
414
420
}
415
421
return uint64 (remoteUploaded .Size ()), nil
416
422
}
@@ -462,16 +468,21 @@ breakByError:
462
468
remotePathFull := path .Join (remotePath , partSuffix )
463
469
g .Go (func () error {
464
470
defer s .Release (1 )
465
- if b .resume && b .resumableState .IsAlreadyProcessed (remotePathFull ) {
466
- return nil
471
+ if b .resume {
472
+ if isProcessed , processedSize := b .resumableState .IsAlreadyProcessed (remotePathFull ); isProcessed {
473
+ atomic .AddInt64 (& uploadedBytes , processedSize )
474
+ return nil
475
+ }
467
476
}
468
477
log .Debugf ("start upload %d files to %s" , len (partFiles ), remotePath )
469
- if err := b .dst .UploadPath (ctx , 0 , backupPath , partFiles , remotePath , b .cfg .General .RetriesOnFailure , b .cfg .General .RetriesDuration ); err != nil {
478
+ if uploadPathBytes , err := b .dst .UploadPath (ctx , 0 , backupPath , partFiles , remotePath , b .cfg .General .RetriesOnFailure , b .cfg .General .RetriesDuration ); err != nil {
470
479
log .Errorf ("UploadPath return error: %v" , err )
471
480
return fmt .Errorf ("can't upload: %v" , err )
472
- }
473
- if b .resume {
474
- b .resumableState .AppendToState (remotePathFull )
481
+ } else {
482
+ atomic .AddInt64 (& uploadedBytes , uploadPathBytes )
483
+ if b .resume {
484
+ b .resumableState .AppendToState (remotePathFull , uploadPathBytes )
485
+ }
475
486
}
476
487
log .Debugf ("finish upload %d files to %s" , len (partFiles ), remotePath )
477
488
return nil
@@ -483,8 +494,11 @@ breakByError:
483
494
localFiles := partFiles
484
495
g .Go (func () error {
485
496
defer s .Release (1 )
486
- if b .resume && b .resumableState .IsAlreadyProcessed (remoteDataFile ) {
487
- return nil
497
+ if b .resume {
498
+ if isProcessed , processedSize := b .resumableState .IsAlreadyProcessed (remoteDataFile ); isProcessed {
499
+ atomic .AddInt64 (& uploadedBytes , processedSize )
500
+ return nil
501
+ }
488
502
}
489
503
log .Debugf ("start upload %d files to %s" , len (localFiles ), remoteDataFile )
490
504
retry := retrier .New (retrier .ConstantBackoff (b .cfg .General .RetriesOnFailure , b .cfg .General .RetriesDuration ), nil )
@@ -501,7 +515,7 @@ breakByError:
501
515
}
502
516
atomic .AddInt64 (& uploadedBytes , remoteFile .Size ())
503
517
if b .resume {
504
- b .resumableState .AppendToState (remoteDataFile )
518
+ b .resumableState .AppendToState (remoteDataFile , remoteFile . Size () )
505
519
}
506
520
log .Debugf ("finish upload to %s" , remoteDataFile )
507
521
return nil
@@ -534,8 +548,10 @@ func (b *Backuper) uploadTableMetadataRegular(ctx context.Context, backupName st
534
548
return 0 , fmt .Errorf ("can't marshal json: %v" , err )
535
549
}
536
550
remoteTableMetaFile := path .Join (backupName , "metadata" , common .TablePathEncode (tableMetadata .Database ), fmt .Sprintf ("%s.json" , common .TablePathEncode (tableMetadata .Table )))
537
- if b .resume && b .resumableState .IsAlreadyProcessed (remoteTableMetaFile ) {
538
- return int64 (len (content )), nil
551
+ if b .resume {
552
+ if isProcessed , processedSize := b .resumableState .IsAlreadyProcessed (remoteTableMetaFile ); isProcessed {
553
+ return processedSize , nil
554
+ }
539
555
}
540
556
retry := retrier .New (retrier .ConstantBackoff (b .cfg .General .RetriesOnFailure , b .cfg .General .RetriesDuration ), nil )
541
557
err = retry .RunCtx (ctx , func (ctx context.Context ) error {
@@ -545,15 +561,17 @@ func (b *Backuper) uploadTableMetadataRegular(ctx context.Context, backupName st
545
561
return 0 , fmt .Errorf ("can't upload: %v" , err )
546
562
}
547
563
if b .resume {
548
- b .resumableState .AppendToState (remoteTableMetaFile )
564
+ b .resumableState .AppendToState (remoteTableMetaFile , int64 ( len ( content )) )
549
565
}
550
566
return int64 (len (content )), nil
551
567
}
552
568
553
569
func (b * Backuper ) uploadTableMetadataEmbedded (ctx context.Context , backupName string , tableMetadata metadata.TableMetadata ) (int64 , error ) {
554
570
remoteTableMetaFile := path .Join (backupName , "metadata" , common .TablePathEncode (tableMetadata .Database ), fmt .Sprintf ("%s.sql" , common .TablePathEncode (tableMetadata .Table )))
555
- if b .resume && b .resumableState .IsAlreadyProcessed (remoteTableMetaFile ) {
556
- return 0 , nil
571
+ if b .resume {
572
+ if isProcessed , processedSize := b .resumableState .IsAlreadyProcessed (remoteTableMetaFile ); isProcessed {
573
+ return processedSize , nil
574
+ }
557
575
}
558
576
log := b .log .WithField ("logger" , "uploadTableMetadataEmbedded" )
559
577
localTableMetaFile := path .Join (b .EmbeddedBackupDataPath , backupName , "metadata" , common .TablePathEncode (tableMetadata .Database ), fmt .Sprintf ("%s.sql" , common .TablePathEncode (tableMetadata .Table )))
@@ -573,12 +591,12 @@ func (b *Backuper) uploadTableMetadataEmbedded(ctx context.Context, backupName s
573
591
if err != nil {
574
592
return 0 , fmt .Errorf ("can't embeeded upload metadata: %v" , err )
575
593
}
576
- if b .resume {
577
- b .resumableState .AppendToState (remoteTableMetaFile )
578
- }
579
594
if info , err := os .Stat (localTableMetaFile ); err != nil {
580
595
return 0 , fmt .Errorf ("stat %s error: %v" , localTableMetaFile , err )
581
596
} else {
597
+ if b .resume {
598
+ b .resumableState .AppendToState (remoteTableMetaFile , info .Size ())
599
+ }
582
600
return info .Size (), nil
583
601
}
584
602
}
0 commit comments