@@ -3,7 +3,6 @@ package backup
33import (
44 "context"
55 "encoding/json"
6- "errors"
76 "fmt"
87 "os"
98 "path"
@@ -17,6 +16,7 @@ import (
1716 "github.com/Altinity/clickhouse-backup/v2/pkg/pidlock"
1817 "github.com/Altinity/clickhouse-backup/v2/pkg/resumable"
1918 "github.com/eapache/go-resiliency/retrier"
19+ "github.com/pkg/errors"
2020
2121 "github.com/google/uuid"
2222 recursiveCopy "github.com/otiai10/copy"
@@ -78,7 +78,7 @@ func (b *Backuper) CreateBackup(backupName, diffFromRemote, tablePattern string,
7878 backupName = utils .CleanBackupNameRE .ReplaceAllString (backupName , "" )
7979
8080 if err := b .ch .Connect (); err != nil {
81- return fmt . Errorf ( "can't connect to clickhouse: %v" , err )
81+ return errors . Wrap ( err , "can't connect to clickhouse" )
8282 }
8383 defer b .ch .Close ()
8484
@@ -106,11 +106,11 @@ func (b *Backuper) CreateBackup(backupName, diffFromRemote, tablePattern string,
106106
107107 allDatabases , err := b .ch .GetDatabases (ctx , b .cfg , tablePattern )
108108 if err != nil {
109- return fmt . Errorf ( "can't get database engines from clickhouse: %v" , err )
109+ return errors . Wrap ( err , "can't get database engines from clickhouse" )
110110 }
111111 tables , err := b .GetTables (ctx , tablePattern )
112112 if err != nil {
113- return fmt . Errorf ( "can't get tables from clickhouse: %v" , err )
113+ return errors . Wrap ( err , "can't get tables from clickhouse" )
114114 }
115115
116116 if b .CalculateNonSkipTables (tables ) == 0 && ! b .cfg .General .AllowEmptyBackups {
@@ -119,7 +119,7 @@ func (b *Backuper) CreateBackup(backupName, diffFromRemote, tablePattern string,
119119
120120 allFunctions , err := b .ch .GetUserDefinedFunctions (ctx )
121121 if err != nil {
122- return fmt . Errorf ( "GetUserDefinedFunctions return error: %v" , err )
122+ return errors . Wrap ( err , "GetUserDefinedFunctions return error" )
123123 }
124124
125125 disks , err := b .ch .GetDisks (ctx , false )
@@ -274,7 +274,7 @@ func (b *Backuper) createBackupLocal(ctx context.Context, backupName, diffFromRe
274274 return err
275275 }
276276 if err = b .dst .Connect (ctx ); err != nil {
277- return fmt . Errorf ( "can't connect to %s: %v " , b .dst .Kind (), err )
277+ return errors . Wrapf ( err , "can't connect to %s" , b .dst .Kind ())
278278 }
279279 defer func () {
280280 if closeErr := b .dst .Close (ctx ); closeErr != nil {
@@ -297,7 +297,7 @@ func (b *Backuper) createBackupLocal(ctx context.Context, backupName, diffFromRe
297297 var diffFromRemoteErr error
298298 tablesDiffFromRemote , diffFromRemoteErr = b .getTablesDiffFromRemote (ctx , diffFromRemote , tablePattern )
299299 if diffFromRemoteErr != nil {
300- return fmt . Errorf ( "b.getTablesDiffFromRemote return error: %v" , diffFromRemoteErr )
300+ return errors . Wrap ( diffFromRemoteErr , "b.getTablesDiffFromRemote return error" )
301301 }
302302 }
303303
@@ -378,12 +378,12 @@ func (b *Backuper) createBackupLocal(ctx context.Context, backupName, diffFromRe
378378 })
379379 }
380380 if wgWaitErr := createBackupWorkingGroup .Wait (); wgWaitErr != nil {
381- return fmt . Errorf ( "one of createBackupLocal go-routine return error: %v" , wgWaitErr )
381+ return errors . Wrap ( wgWaitErr , "one of createBackupLocal go-routine return error" )
382382 }
383383
384384 backupMetaFile := path .Join (b .DefaultDataPath , "backup" , backupName , "metadata.json" )
385385 if err := b .createBackupMetadata (ctx , backupMetaFile , backupName , diffFromRemote , backupVersion , "regular" , diskMap , diskTypes , disks , backupDataSize , backupObjectDiskSize , backupMetadataSize , backupRBACSize , backupConfigSize , backupNamedCollectionsSize , tableMetas , allDatabases , allFunctions ); err != nil {
386- return fmt . Errorf ( "createBackupMetadata return error: %v" , err )
386+ return errors . Wrap ( err , "createBackupMetadata return error" )
387387 }
388388 log .Info ().Str ("version" , backupVersion ).Str ("operation" , "createBackupLocal" ).Str ("duration" , utils .HumanizeDuration (time .Since (startBackup ))).Msg ("done" )
389389 return nil
@@ -429,7 +429,7 @@ func (b *Backuper) createBackupEmbedded(ctx context.Context, backupName, baseBac
429429 }
430430 backupResult := make ([]clickhouse.SystemBackups , 0 )
431431 if err := b .ch .SelectContext (ctx , & backupResult , backupSQL ); err != nil {
432- return fmt . Errorf ( "backup error: %v" , err )
432+ return errors . Wrap ( err , "backup error" )
433433 }
434434 if len (backupResult ) != 1 || (backupResult [0 ].Status != "BACKUP_COMPLETE" && backupResult [0 ].Status != "BACKUP_CREATED" ) {
435435 return fmt .Errorf ("backup return wrong results: %+v" , backupResult )
@@ -474,7 +474,7 @@ func (b *Backuper) createBackupEmbedded(ctx context.Context, backupName, baseBac
474474 return err
475475 }
476476 if err = b .dst .Connect (ctx ); err != nil {
477- return fmt . Errorf ( "createBackupEmbedded: can't connect to %s: %v " , b .dst .Kind (), err )
477+ return errors . Wrapf ( err , "createBackupEmbedded: can't connect to %s" , b .dst .Kind ())
478478 }
479479 defer func () {
480480 if closeErr := b .dst .Close (ctx ); closeErr != nil {
@@ -721,11 +721,11 @@ func (b *Backuper) createBackupRBAC(ctx context.Context, backupPath string, disk
721721 rbacBackup := path .Join (backupPath , "access" )
722722 replicatedRBACDataSize , err := b .createBackupRBACReplicated (ctx , rbacBackup )
723723 if err != nil {
724- return 0 , fmt . Errorf ( "b.createBackupRBACReplicated error: %v" , err )
724+ return 0 , errors . Wrap ( err , "b.createBackupRBACReplicated error" )
725725 }
726726 accessPath , err := b .ch .GetAccessManagementPath (ctx , disks )
727727 if err != nil {
728- return 0 , fmt . Errorf ( "b.ch.GetAccessManagementPath error: %v" , err )
728+ return 0 , errors . Wrap ( err , "b.ch.GetAccessManagementPath error" )
729729 }
730730 accessPathInfo , err := os .Stat (accessPath )
731731 if err != nil && ! os .IsNotExist (err ) {
@@ -851,7 +851,7 @@ func (b *Backuper) createBackupRBACReplicated(ctx context.Context, rbacBackup st
851851 for _ , userDirectory := range replicatedRBAC {
852852 replicatedAccessPath , err := k .GetReplicatedAccessPath (userDirectory .Name )
853853 if err != nil {
854- return 0 , fmt . Errorf ( "k.GetReplicatedAccessPath(%s) error: %v " , userDirectory .Name , err )
854+ return 0 , errors . Wrapf ( err , "k.GetReplicatedAccessPath(%s) error" , userDirectory .Name )
855855 }
856856 rbacUUIDObjectsCount , err := k .ChildCount (replicatedAccessPath , "uuid" )
857857 if err != nil {
@@ -1063,7 +1063,7 @@ func (b *Backuper) uploadObjectDiskParts(ctx context.Context, backupName string,
10631063 return nil
10641064 })
10651065 if copyObjectErr != nil {
1066- return fmt . Errorf ( "b.dst.CopyObject in %s error: %v " , backupShadowPath , copyObjectErr )
1066+ return errors . Wrapf ( copyObjectErr , "b.dst.CopyObject in %s error" , backupShadowPath )
10671067 }
10681068 } else {
10691069 if ! isCopyFailed .Load () {
@@ -1079,7 +1079,7 @@ func (b *Backuper) uploadObjectDiskParts(ctx context.Context, backupName string,
10791079 return object_disk .CopyObjectStreaming (uploadCtx , srcDiskConnection .GetRemoteStorage (), b .dst , srcKey , path .Join (objectDiskPath , dstKey ))
10801080 })
10811081 if copyObjectErr != nil {
1082- return fmt . Errorf ( "object_disk.CopyObjectStreaming in %s error: %v " , backupShadowPath , copyObjectErr )
1082+ return errors . Wrapf ( copyObjectErr , "object_disk.CopyObjectStreaming in %s error" , backupShadowPath )
10831083 }
10841084 }
10851085 objSize = storageObject .ObjectSize
@@ -1103,7 +1103,7 @@ func (b *Backuper) uploadObjectDiskParts(ctx context.Context, backupName string,
11031103 }
11041104
11051105 if wgWaitErr := uploadObjectDiskPartsWorkingGroup .Wait (); wgWaitErr != nil {
1106- return 0 , fmt . Errorf ( "one of uploadObjectDiskParts go-routine return error: %v" , wgWaitErr )
1106+ return 0 , errors . Wrap ( wgWaitErr , "one of uploadObjectDiskParts go-routine return error" )
11071107 }
11081108 return size , nil
11091109}
@@ -1140,7 +1140,7 @@ func (b *Backuper) createBackupMetadata(ctx context.Context, backupMetaFile, bac
11401140 }
11411141 content , err := json .MarshalIndent (& backupMetadata , "" , "\t " )
11421142 if err != nil {
1143- return fmt . Errorf ( "can't marshal backup metafile json: %v" , err )
1143+ return errors . Wrap ( err , "can't marshal backup metafile json" )
11441144 }
11451145 if err := os .WriteFile (backupMetaFile , content , 0640 ); err != nil {
11461146 return err
@@ -1164,10 +1164,10 @@ func (b *Backuper) createTableMetadata(metadataPath string, table metadata.Table
11641164 metadataFile := path .Join (metadataDatabasePath , fmt .Sprintf ("%s.json" , common .TablePathEncode (table .Table )))
11651165 metadataBody , err := json .MarshalIndent (& table , "" , " " )
11661166 if err != nil {
1167- return 0 , fmt . Errorf ( "can't marshal %s: %v " , MetaFileName , err )
1167+ return 0 , errors . Wrapf ( err , "can't marshal %s" , MetaFileName )
11681168 }
11691169 if err := os .WriteFile (metadataFile , metadataBody , 0644 ); err != nil {
1170- return 0 , fmt . Errorf ( "can't create %s: %v " , MetaFileName , err )
1170+ return 0 , errors . Wrapf ( err , "can't create %s" , MetaFileName )
11711171 }
11721172 if err := filesystemhelper .Chown (metadataFile , b .ch , disks , false ); err != nil {
11731173 return 0 , err
0 commit comments