This is an automated email from the ASF dual-hosted git repository. djwang pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/cloudberry-backup.git
commit 6a4cb4abd35d9ab445bf536bb210b5acf07ad956 Author: woblerr <[email protected]> AuthorDate: Tue Apr 7 11:43:18 2026 +0300 Bump Go version from 1.21 to 1.24. Update Go to 1.24. Fix non-constant format string errors for Go 1.24. Fix patterns applied: - func(err.Error()) -> func("%s", err.Error()) - func(fmt.Sprintf("...", args)) -> func("...", args) --- backup/backup.go | 14 +++++++------- backup/data.go | 2 +- backup/incremental.go | 6 +++--- backup/predata_functions.go | 8 ++++---- backup/queries_acl.go | 2 +- backup/wrappers.go | 4 ++-- go.mod | 2 +- plugins/s3plugin/backup.go | 2 +- plugins/s3plugin/restore.go | 6 +++--- plugins/s3plugin/s3plugin.go | 2 +- report/report.go | 6 +++--- restore/data.go | 10 +++++----- restore/restore.go | 4 ++-- restore/validate.go | 4 ++-- restore/wrappers.go | 4 ++-- utils/gpexpand_sensor.go | 9 ++++----- utils/io.go | 4 ++-- utils/plugin.go | 12 ++++++------ utils/util.go | 2 +- 19 files changed, 51 insertions(+), 52 deletions(-) diff --git a/backup/backup.go b/backup/backup.go index 0c8249ac..2711f83c 100644 --- a/backup/backup.go +++ b/backup/backup.go @@ -387,7 +387,7 @@ func DoTeardown() { if err := recover(); err != nil { // gplog's Fatal will cause a panic with error code 2 if gplog.GetErrorCode() != 2 { - gplog.Error(fmt.Sprintf("%v: %s", err, debug.Stack())) + gplog.Error("%v: %s", err, debug.Stack()) gplog.SetErrorCode(2) } else { errStr = fmt.Sprintf("%v", err) @@ -448,12 +448,12 @@ func DoTeardown() { if pluginConfig != nil { err = pluginConfig.BackupFile(configFilename) if err != nil { - gplog.Error(fmt.Sprintf("%v", err)) + gplog.Error("%v", err) return } err = pluginConfig.BackupFile(reportFilename) if err != nil { - gplog.Error(fmt.Sprintf("%v", err)) + gplog.Error("%v", err) return } } @@ -499,7 +499,7 @@ func DoCleanup(backupFailed bool) { if wasTerminated { err := utils.CheckAgentErrorsOnSegments(globalCluster, globalFPInfo) if err != nil { - gplog.Error(err.Error()) + gplog.Error("%s", err.Error()) } } } @@ -519,12 +519,12 @@ func DoCleanup(backupFailed bool) { historyDBName := globalFPInfo.GetBackupHistoryDatabasePath() historyDB, err := history.InitializeHistoryDatabase(historyDBName) if err != nil { - gplog.Error(fmt.Sprintf("Unable to update history database. Error: %v", err)) + gplog.Error("Unable to update history database. Error: %v", err) } else { _, err := historyDB.Exec(fmt.Sprintf("UPDATE backups SET status='%s', end_time='%s' WHERE timestamp='%s'", statusString, backupReport.BackupConfig.EndTime, globalFPInfo.Timestamp)) historyDB.Close() if err != nil { - gplog.Error(fmt.Sprintf("Unable to update history database. Error: %v", err)) + gplog.Error("Unable to update history database. Error: %v", err) } } } @@ -559,7 +559,7 @@ func cancelBlockedQueries(timestamp string) { return } - gplog.Info(fmt.Sprintf("Canceling %d blocked queries", len(pids))) + gplog.Info("Canceling %d blocked queries", len(pids)) // Cancel all gpbackup queries waiting for a lock for _, pid := range pids { conn.MustExec(fmt.Sprintf("SELECT pg_cancel_backend(%d)", pid)) diff --git a/backup/data.go b/backup/data.go index 85ee1de9..9d937bae 100644 --- a/backup/data.go +++ b/backup/data.go @@ -117,7 +117,7 @@ func BackupSingleTableData(table Table, rowsCopiedMap map[uint32]int64, counters logMessage := fmt.Sprintf("%sWriting data for table %s to file", workerInfo, table.FQN()) // Avoid race condition by incrementing counters in call to sprintf tableCount := fmt.Sprintf(" (table %d of %d)", atomic.AddInt64(&counters.NumRegTables, 1), counters.TotalRegTables) - utils.LogProgress(logMessage + tableCount) + utils.LogProgress("%s", logMessage+tableCount) destinationToWrite := "" if MustGetFlagBool(options.SINGLE_DATA_FILE) { diff --git a/backup/incremental.go b/backup/incremental.go index 0326c940..dcf70619 100644 --- a/backup/incremental.go +++ b/backup/incremental.go @@ -86,7 +86,7 @@ func GetLatestMatchingBackupConfig(historyDBPath string, currentBackupConfig *hi ORDER BY timestamp DESC`, whereClause) timestampRows, err := historyDB.Query(getBackupTimetampsQuery) if err != nil { - gplog.Error(err.Error()) + gplog.Error("%s", err.Error()) return nil } defer timestampRows.Close() @@ -96,7 +96,7 @@ func GetLatestMatchingBackupConfig(historyDBPath string, currentBackupConfig *hi var timestamp string err = timestampRows.Scan(×tamp) if err != nil { - gplog.Error(err.Error()) + gplog.Error("%s", err.Error()) return nil } timestamps = append(timestamps, timestamp) @@ -105,7 +105,7 @@ func GetLatestMatchingBackupConfig(historyDBPath string, currentBackupConfig *hi for _, ts := range timestamps { backupConfig, err := history.GetBackupConfig(ts, historyDB) if err != nil { - gplog.Error(err.Error()) + gplog.Error("%s", err.Error()) return nil } if !backupConfig.Failed() && matchesIncrementalFlags(backupConfig, currentBackupConfig) { diff --git a/backup/predata_functions.go b/backup/predata_functions.go index f7953932..9f6324ef 100644 --- a/backup/predata_functions.go +++ b/backup/predata_functions.go @@ -393,7 +393,7 @@ func PrintCreateTransformStatement(metadataFile *utils.FileWithByteCount, objToc TypeFQN := fmt.Sprintf("%s.%s", transform.TypeNamespace, transform.TypeName) if !fromSQLIsDefined && !toSQLIsDefined { - gplog.Warn(fmt.Sprintf("Skipping invalid transform object for type %s and language %s; At least one of FROM and TO functions should be specified.", TypeFQN, transform.LanguageName)) + gplog.Warn("Skipping invalid transform object for type %s and language %s; At least one of FROM and TO functions should be specified.", TypeFQN, transform.LanguageName) return } start := metadataFile.ByteCount @@ -401,7 +401,7 @@ func PrintCreateTransformStatement(metadataFile *utils.FileWithByteCount, objToc if fromSQLIsDefined { statement += fmt.Sprintf("FROM SQL WITH FUNCTION %s", fromSQLFunc.FQN()) } else { - gplog.Warn(fmt.Sprintf("No FROM function found for transform object with type %s and language %s\n", TypeFQN, transform.LanguageName)) + gplog.Warn("No FROM function found for transform object with type %s and language %s\n", TypeFQN, transform.LanguageName) } if toSQLIsDefined { @@ -410,10 +410,10 @@ func PrintCreateTransformStatement(metadataFile *utils.FileWithByteCount, objToc } statement += fmt.Sprintf("TO SQL WITH FUNCTION %s", toSQLFunc.FQN()) } else { - gplog.Warn(fmt.Sprintf("No TO function found for transform object with type %s and language %s\n", TypeFQN, transform.LanguageName)) + gplog.Warn("No TO function found for transform object with type %s and language %s\n", TypeFQN, transform.LanguageName) } statement += ");" - metadataFile.MustPrintf(statement) + metadataFile.MustPrintf("%s", statement) section, entry := transform.GetMetadataEntry() tier := globalTierMap[transform.GetUniqueID()] objToc.AddMetadataEntry(section, entry, start, metadataFile.ByteCount, tier) diff --git a/backup/queries_acl.go b/backup/queries_acl.go index b47a4be7..11d02b6b 100644 --- a/backup/queries_acl.go +++ b/backup/queries_acl.go @@ -138,7 +138,7 @@ type MetadataQueryStruct struct { } func GetMetadataForObjectType(connectionPool *dbconn.DBConn, params MetadataQueryParams) MetadataMap { - gplog.Verbose("Getting object type metadata from " + params.CatalogTable) + gplog.Verbose("Getting object type metadata from %s", params.CatalogTable) tableName := params.CatalogTable nameCol := "''" diff --git a/backup/wrappers.go b/backup/wrappers.go index c32df413..284348cd 100644 --- a/backup/wrappers.go +++ b/backup/wrappers.go @@ -63,7 +63,7 @@ func initializeConnectionPool(timestamp string) { numConns = 2 } - gplog.Verbose(fmt.Sprintf("Initializing %d database connections", numConns)) + gplog.Verbose("Initializing %d database connections", numConns) connectionPool.MustConnect(numConns) utils.ValidateGPDBVersionCompatibility(connectionPool) @@ -183,7 +183,7 @@ func createBackupLockFile(timestamp string) { gplog.FatalOnError(err) err = backupLockFile.TryLock() if err != nil { - gplog.Error(err.Error()) + gplog.Error("%s", err.Error()) gplog.Fatal(errors.Errorf("A backup with timestamp %s is already in progress. Wait 1 second and try the backup again.", timestamp), "") } } diff --git a/go.mod b/go.mod index 3adaf23e..cec552ff 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/apache/cloudberry-backup -go 1.21 +go 1.24.0 require ( github.com/DATA-DOG/go-sqlmock v1.5.0 diff --git a/plugins/s3plugin/backup.go b/plugins/s3plugin/backup.go index a2fcbea5..0a7d0c50 100644 --- a/plugins/s3plugin/backup.go +++ b/plugins/s3plugin/backup.go @@ -155,7 +155,7 @@ func BackupDirectoryParallel(c *cli.Context) error { totalBytes += bytes msg := fmt.Sprintf("Uploaded %d bytes for %s in %v", bytes, filepath.Base(fileKey), elapsed.Round(time.Millisecond)) - gplog.Verbose(msg) + gplog.Verbose("%s", msg) fmt.Println(msg) } else { finalErr = err diff --git a/plugins/s3plugin/restore.go b/plugins/s3plugin/restore.go index b7f31f23..deb3cc98 100644 --- a/plugins/s3plugin/restore.go +++ b/plugins/s3plugin/restore.go @@ -44,7 +44,7 @@ func RestoreFile(c *cli.Context) error { if err != nil { fileErr := os.Remove(fileName) if fileErr != nil { - gplog.Error(fileErr.Error()) + gplog.Error("%s", fileErr.Error()) } return err } @@ -95,7 +95,7 @@ func RestoreDirectory(c *cli.Context) error { if err != nil { fileErr := os.Remove(filename) if fileErr != nil { - gplog.Error(fileErr.Error()) + gplog.Error("%s", fileErr.Error()) } return err } @@ -175,7 +175,7 @@ func RestoreDirectoryParallel(c *cli.Context) error { numFiles++ msg := fmt.Sprintf("Downloaded %d bytes for %s in %v", bytes, filepath.Base(fileKey), elapsed.Round(time.Millisecond)) - gplog.Verbose(msg) + gplog.Verbose("%s", msg) fmt.Println(msg) } else { finalErr = err diff --git a/plugins/s3plugin/s3plugin.go b/plugins/s3plugin/s3plugin.go index 92f0e080..9a2a4e83 100644 --- a/plugins/s3plugin/s3plugin.go +++ b/plugins/s3plugin/s3plugin.go @@ -336,7 +336,7 @@ func DeleteBackup(c *cli.Context) error { if !IsValidTimestamp(timestamp) { msg := fmt.Sprintf("delete requires a <timestamp> with format "+ "YYYYMMDDHHMMSS, but received: %s", timestamp) - return fmt.Errorf(msg) + return fmt.Errorf("%s", msg) } date := timestamp[0:8] diff --git a/report/report.go b/report/report.go index 0b3a2153..d50ad9e5 100644 --- a/report/report.go +++ b/report/report.go @@ -236,9 +236,9 @@ func logOutputReport(reportFile io.WriteCloser, reportInfo []LineInfo) { for _, lineInfo := range reportInfo { if lineInfo.Key == "" { - utils.MustPrintf(reportFile, fmt.Sprintf("\n")) + utils.MustPrintf(reportFile, "\n") } else { - utils.MustPrintf(reportFile, fmt.Sprintf("%-*s%s\n", maxSize+3, lineInfo.Key, lineInfo.Value)) + utils.MustPrintf(reportFile, "%-*s%s\n", maxSize+3, lineInfo.Key, lineInfo.Value) } } } @@ -279,7 +279,7 @@ func PrintObjectCounts(reportFile io.WriteCloser, objectCounts map[string]int) { objectStr += fmt.Sprintf("%-*s%d\n", maxSize+3, strings.ToLower(object), objectCounts[object]) } } - utils.MustPrintf(reportFile, objectStr) + utils.MustPrintf(reportFile, "%s", objectStr) } /* diff --git a/restore/data.go b/restore/data.go index ee073379..11d2deea 100644 --- a/restore/data.go +++ b/restore/data.go @@ -111,7 +111,7 @@ func restoreSingleTableData(fpInfo *filepath.FilePathInfo, entry toc.Coordinator partialRowsRestored, copyErr := CopyTableIn(connectionPool, tableName, entry.AttributeString, destinationToRead, backupConfig.SingleDataFile, whichConn) if copyErr != nil { - gplog.Error(copyErr.Error()) + gplog.Error("%s", copyErr.Error()) if MustGetFlagBool(options.ON_ERROR_CONTINUE) { if ((connectionPool.Version.IsGPDB() && connectionPool.Version.AtLeast("6")) || connectionPool.Version.IsCBDB()) && backupConfig.SingleDataFile { // inform segment helpers to skip this entry @@ -149,7 +149,7 @@ func restoreSingleTableData(fpInfo *filepath.FilePathInfo, entry toc.Coordinator // The subsequent division in gprestore leads to a miscalculated row count, causing this check to fail. err := CheckRowsRestored(numRowsRestored, numRowsBackedUp, tableName) if err != nil { - gplog.Error(err.Error()) + gplog.Error("%s", err.Error()) return err } @@ -158,12 +158,12 @@ func restoreSingleTableData(fpInfo *filepath.FilePathInfo, entry toc.Coordinator if entry.IsReplicated && (origSize < destSize) { err := ExpandReplicatedTable(origSize, tableName, whichConn) if err != nil { - gplog.Error(err.Error()) + gplog.Error("%s", err.Error()) } } else { err := RedistributeTableData(tableName, whichConn) if err != nil { - gplog.Error(err.Error()) + gplog.Error("%s", err.Error()) } } } @@ -294,7 +294,7 @@ func restoreDataFromTimestamp(fpInfo filepath.FilePathInfo, dataEntries []toc.Co gplog.Verbose("Truncating table %s prior to restoring data", tableName) _, err := connectionPool.Exec(`TRUNCATE `+tableName, whichConn) if err != nil { - gplog.Error(err.Error()) + gplog.Error("%s", err.Error()) } } if err == nil { diff --git a/restore/restore.go b/restore/restore.go index c91d0ec1..91c6c5ab 100644 --- a/restore/restore.go +++ b/restore/restore.go @@ -612,7 +612,7 @@ func DoTeardown() { if err := recover(); err != nil { // Check if gplog.Fatal did not cause the panic if gplog.GetErrorCode() != 2 { - gplog.Error(fmt.Sprintf("%v: %s", err, debug.Stack())) + gplog.Error("%v: %s", err, debug.Stack()) gplog.SetErrorCode(2) } else { errStr = fmt.Sprintf("%+v", err) @@ -733,7 +733,7 @@ func DoCleanup(restoreFailed bool) { if wasTerminated { err := utils.CheckAgentErrorsOnSegments(globalCluster, globalFPInfo) if err != nil { - gplog.Error(err.Error()) + gplog.Error("%s", err.Error()) } } } diff --git a/restore/validate.go b/restore/validate.go index be0ee281..f9fb55fb 100644 --- a/restore/validate.go +++ b/restore/validate.go @@ -138,7 +138,7 @@ WHERE quote_ident(n.nspname) || '.' || quote_ident(c.relname) IN (%s)`, quotedTa errMsg = fmt.Sprintf("Relation %s already exists", relationsInDB[0]) } if errMsg != "" { - gplog.Fatal(nil, errMsg) + gplog.Fatal(nil, "%s", errMsg) } } @@ -147,7 +147,7 @@ func ValidateRedirectSchema(connectionPool *dbconn.DBConn, redirectSchema string schemaInDB := dbconn.MustSelectStringSlice(connectionPool, query) if len(schemaInDB) == 0 { - gplog.Fatal(nil, fmt.Sprintf("Schema %s to redirect into does not exist", redirectSchema)) + gplog.Fatal(nil, "Schema %s to redirect into does not exist", redirectSchema) } } diff --git a/restore/wrappers.go b/restore/wrappers.go index 73d7e22c..ceafeb25 100644 --- a/restore/wrappers.go +++ b/restore/wrappers.go @@ -366,10 +366,10 @@ func RestoreSchemas(schemaStatements []toc.StatementWithType, progressBar utils. } else { errMsg := fmt.Sprintf("Error encountered while creating schema %s", schema.Name) if MustGetFlagBool(options.ON_ERROR_CONTINUE) { - gplog.Verbose(fmt.Sprintf("%s: %s", errMsg, err.Error())) + gplog.Verbose("%s: %s", errMsg, err.Error()) numErrors++ } else { - gplog.Fatal(err, errMsg) + gplog.Fatal(err, "%s", errMsg) } } } diff --git a/utils/gpexpand_sensor.go b/utils/gpexpand_sensor.go index 8ca83676..0d0d4655 100644 --- a/utils/gpexpand_sensor.go +++ b/utils/gpexpand_sensor.go @@ -1,7 +1,6 @@ package utils import ( - "fmt" "os" "path/filepath" @@ -54,12 +53,12 @@ func NewGpexpandSensor(myfs vfs.Filesystem, conn *dbconn.DBConn) GpexpandSensor func (sensor GpexpandSensor) IsGpexpandRunning() (bool, error) { err := validateConnection(sensor.postgresConn) if err != nil { - gplog.Error(fmt.Sprintf("Error encountered validating db connection: %v", err)) + gplog.Error("Error encountered validating db connection: %v", err) return false, err } coordinatorDataDir, err := dbconn.SelectString(sensor.postgresConn, CoordinatorDataDirQuery) if err != nil { - gplog.Error(fmt.Sprintf("Error encountered retrieving data directory: %v", err)) + gplog.Error("Error encountered retrieving data directory: %v", err) return false, err } @@ -76,7 +75,7 @@ func (sensor GpexpandSensor) IsGpexpandRunning() (bool, error) { var tableName string tableName, err = dbconn.SelectString(sensor.postgresConn, GpexpandStatusTableExistsQuery) if err != nil { - gplog.Error(fmt.Sprintf("Error encountered retrieving gpexpand status: %v", err)) + gplog.Error("Error encountered retrieving gpexpand status: %v", err) return false, err } if len(tableName) <= 0 { @@ -87,7 +86,7 @@ func (sensor GpexpandSensor) IsGpexpandRunning() (bool, error) { var status string status, err = dbconn.SelectString(sensor.postgresConn, GpexpandTemporaryTableStatusQuery) if err != nil { - gplog.Error(fmt.Sprintf("Error encountered retrieving gpexpand status: %v", err)) + gplog.Error("Error encountered retrieving gpexpand status: %v", err) return false, err } diff --git a/utils/io.go b/utils/io.go index 0985d588..a425b9c2 100644 --- a/utils/io.go +++ b/utils/io.go @@ -92,11 +92,11 @@ func CopyFile(src, dest string) error { var content []byte content, err = ioutil.ReadFile(src) if err != nil { - gplog.Error(fmt.Sprintf("Error: %v, encountered when reading file: %s", err, src)) + gplog.Error("Error: %v, encountered when reading file: %s", err, src) return err } return ioutil.WriteFile(dest, content, info.Mode()) } - gplog.Error(fmt.Sprintf("Error: %v, encountered when trying to stat file: %s", err, src)) + gplog.Error("Error: %v, encountered when trying to stat file: %s", err, src) return err } diff --git a/utils/plugin.go b/utils/plugin.go index 212ee7db..e1e9b1a2 100644 --- a/utils/plugin.go +++ b/utils/plugin.go @@ -245,10 +245,10 @@ func (plugin *PluginConfig) executeHook(c *cluster.Cluster, verboseCommandMsg st plugin.buildHookString(command, fpInfo, scope, coordinatorContentID)) if coordinatorErr != nil { if noFatal { - gplog.Error(coordinatorOutput) + gplog.Error("%s", coordinatorOutput) return } - gplog.Fatal(coordinatorErr, coordinatorOutput) + gplog.Fatal(coordinatorErr, "%s", coordinatorOutput) } // Execute command once on each segment host @@ -368,14 +368,14 @@ func (plugin *PluginConfig) createHostPluginConfig(contentIDForSegmentOnHost int if plugin.UsesEncryption() { pluginName, err := plugin.GetPluginName(c) if err != nil { - _, _ = fmt.Fprintf(operating.System.Stdout, err.Error()) - gplog.Fatal(nil, err.Error()) + _, _ = fmt.Fprintf(operating.System.Stdout, "%s", err.Error()) + gplog.Fatal(nil, "%s", err.Error()) } secret, err := GetSecretKey(pluginName, c.GetDirForContent(-1)) if err != nil { - _, _ = fmt.Fprintf(operating.System.Stdout, err.Error()) - gplog.Fatal(nil, err.Error()) + _, _ = fmt.Fprintf(operating.System.Stdout, "%s", err.Error()) + gplog.Fatal(nil, "%s", err.Error()) } plugin.Options[pluginName] = secret } diff --git a/utils/util.go b/utils/util.go index c2450c53..e773f099 100644 --- a/utils/util.go +++ b/utils/util.go @@ -252,7 +252,7 @@ func ValidateGPDBVersionCompatibility(connectionPool *dbconn.DBConn) { func LogExecutionTime(start time.Time, name string) { elapsed := time.Since(start) - gplog.Debug(fmt.Sprintf("%s took %s", name, elapsed)) + gplog.Debug("%s took %s", name, elapsed) } func Exists(slice []string, val string) bool { --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
