blob: 3397c6b31727339675264b5de488f6ede8312079 [file]
package backup
import (
"sync"
"github.com/apache/cloudberry-backup/filepath"
"github.com/apache/cloudberry-backup/options"
"github.com/apache/cloudberry-backup/report"
"github.com/apache/cloudberry-backup/toc"
"github.com/apache/cloudberry-backup/utils"
"github.com/apache/cloudberry-go-libs/cluster"
"github.com/apache/cloudberry-go-libs/dbconn"
"github.com/nightlyone/lockfile"
"github.com/spf13/pflag"
)
/*
* This file contains global variables and setter functions for those variables
* used in testing.
*/
/*
Table backup state constants
*/
const (
Unknown int = iota
Deferred
Complete
PG_LOCK_NOT_AVAILABLE = "55P03"
ENUM_TYPE_OID = 3500
)
/*
* Non-flag variables
*/
var (
backupReport *report.Report
connectionPool *dbconn.DBConn
globalCluster *cluster.Cluster
globalFPInfo filepath.FilePathInfo
globalTierMap map[UniqueID][]uint32
globalTOC *toc.TOC
objectCounts map[string]int
pluginConfig *utils.PluginConfig
version string
wasTerminated bool
backupLockFile lockfile.Lockfile
filterRelationClause string
quotedRoleNames map[string]string
backupSnapshot string
/*
* Used for synchronizing DoCleanup. In DoInit() we increment the group
* and then wait for at least one DoCleanup to finish, either in DoTeardown
* or the signal handler.
*/
CleanupGroup *sync.WaitGroup
// Allow global access to pre-processed include and exclude table lists
IncludedRelationFqns []options.Relation
ExcludedRelationFqns []options.Relation
)
/*
* Command-line flags
*/
var cmdFlags *pflag.FlagSet
/*
* Setter functions
*/
func SetCmdFlags(flagSet *pflag.FlagSet) {
cmdFlags = flagSet
options.SetBackupFlagDefaults(cmdFlags)
}
func SetConnection(conn *dbconn.DBConn) {
connectionPool = conn
}
func SetCluster(cluster *cluster.Cluster) {
globalCluster = cluster
}
func SetFPInfo(fpInfo filepath.FilePathInfo) {
globalFPInfo = fpInfo
}
func GetFPInfo() filepath.FilePathInfo {
return globalFPInfo
}
func SetBackupSnapshot(snapshot string) {
backupSnapshot = snapshot
}
func GetBackupSnapshot() string {
return backupSnapshot
}
func SetPluginConfig(config *utils.PluginConfig) {
pluginConfig = config
}
func SetReport(report *report.Report) {
backupReport = report
}
func GetReport() *report.Report {
return backupReport
}
func SetTOC(toc *toc.TOC) {
globalTOC = toc
}
func SetVersion(v string) {
version = v
}
func SetFilterRelationClause(filterClause string) {
filterRelationClause = filterClause
}
func SetQuotedRoleNames(quotedRoles map[string]string) {
quotedRoleNames = quotedRoles
}
// Util functions to enable ease of access to global flag values
func FlagChanged(flagName string) bool {
return cmdFlags.Changed(flagName)
}
func MustGetFlagString(flagName string) string {
return options.MustGetFlagString(cmdFlags, flagName)
}
func MustGetFlagInt(flagName string) int {
return options.MustGetFlagInt(cmdFlags, flagName)
}
func MustGetFlagBool(flagName string) bool {
return options.MustGetFlagBool(cmdFlags, flagName)
}
func MustGetFlagStringSlice(flagName string) []string {
return options.MustGetFlagStringSlice(cmdFlags, flagName)
}
func MustGetFlagStringArray(flagName string) []string {
return options.MustGetFlagStringArray(cmdFlags, flagName)
}
// Allow global access to pre-processed include and exclude table lists
func AddIncludedRelationFqn(relation options.Relation) {
IncludedRelationFqns = append(IncludedRelationFqns, relation)
}
func AddExcludedRelationFqn(relation options.Relation) {
ExcludedRelationFqns = append(ExcludedRelationFqns, relation)
}