mirror of
https://github.com/dolthub/dolt.git
synced 2026-04-19 11:10:45 -05:00
Backup success=1, error=0 (#3792)
This commit is contained in:
committed by
GitHub
parent
da446fd737
commit
efdf426a66
@@ -30,7 +30,12 @@ import (
|
||||
"github.com/dolthub/dolt/go/store/datas/pull"
|
||||
)
|
||||
|
||||
const DoltBackupFuncName = "dolt_backup"
|
||||
const (
|
||||
DoltBackupFuncName = "dolt_backup"
|
||||
|
||||
statusOk = 1
|
||||
statusErr = 0
|
||||
)
|
||||
|
||||
// Deprecated: please use the version in the dprocedures package
|
||||
type DoltBackupFunc struct {
|
||||
@@ -63,7 +68,7 @@ func (d DoltBackupFunc) WithChildren(children ...sql.Expression) (sql.Expression
|
||||
func (d DoltBackupFunc) Eval(ctx *sql.Context, row sql.Row) (interface{}, error) {
|
||||
args, err := getDoltArgs(ctx, row, d.Children())
|
||||
if err != nil {
|
||||
return 1, err
|
||||
return statusErr, err
|
||||
}
|
||||
return DoDoltBackup(ctx, args)
|
||||
}
|
||||
@@ -71,83 +76,83 @@ func (d DoltBackupFunc) Eval(ctx *sql.Context, row sql.Row) (interface{}, error)
|
||||
func DoDoltBackup(ctx *sql.Context, args []string) (int, error) {
|
||||
dbName := ctx.GetCurrentDatabase()
|
||||
if len(dbName) == 0 {
|
||||
return 1, fmt.Errorf("Empty database name.")
|
||||
return statusErr, fmt.Errorf("Empty database name.")
|
||||
}
|
||||
|
||||
apr, err := cli.CreateBackupArgParser().Parse(args)
|
||||
if err != nil {
|
||||
return 1, err
|
||||
return statusErr, err
|
||||
}
|
||||
|
||||
sess := dsess.DSessFromSess(ctx.Session)
|
||||
dbData, ok := sess.GetDbData(ctx, dbName)
|
||||
if !ok {
|
||||
return 1, sql.ErrDatabaseNotFound.New(dbName)
|
||||
return statusErr, sql.ErrDatabaseNotFound.New(dbName)
|
||||
}
|
||||
|
||||
var b env.Remote
|
||||
switch {
|
||||
case apr.NArg() == 0:
|
||||
return 1, fmt.Errorf("listing existing backups endpoints in sql is unimplemented.")
|
||||
return statusErr, fmt.Errorf("listing existing backups endpoints in sql is unimplemented.")
|
||||
case apr.Arg(0) == cli.AddBackupId:
|
||||
return 1, fmt.Errorf("adding backup endpoint in sql is unimplemented.")
|
||||
return statusErr, fmt.Errorf("adding backup endpoint in sql is unimplemented.")
|
||||
case apr.Arg(0) == cli.RemoveBackupId:
|
||||
return 1, fmt.Errorf("removing backup endpoint in sql is unimplemented.")
|
||||
return statusErr, fmt.Errorf("removing backup endpoint in sql is unimplemented.")
|
||||
case apr.Arg(0) == cli.RemoveBackupShortId:
|
||||
return 1, fmt.Errorf("removing backup endpoint in sql is unimplemented.")
|
||||
return statusErr, fmt.Errorf("removing backup endpoint in sql is unimplemented.")
|
||||
case apr.Arg(0) == cli.RestoreBackupId:
|
||||
return 1, fmt.Errorf("restoring backup endpoint in sql is unimplemented.")
|
||||
return statusErr, fmt.Errorf("restoring backup endpoint in sql is unimplemented.")
|
||||
case apr.Arg(0) == cli.SyncBackupUrlId:
|
||||
if apr.NArg() != 2 {
|
||||
return 1, fmt.Errorf("usage: dolt_backup('sync-url', BACKUP_URL)")
|
||||
return statusErr, fmt.Errorf("usage: dolt_backup('sync-url', BACKUP_URL)")
|
||||
}
|
||||
|
||||
backupUrl := strings.TrimSpace(apr.Arg(1))
|
||||
cfg := loadConfig(ctx)
|
||||
scheme, absBackupUrl, err := env.GetAbsRemoteUrl(filesys.LocalFS, cfg, backupUrl)
|
||||
if err != nil {
|
||||
return 1, fmt.Errorf("error: '%s' is not valid.", backupUrl)
|
||||
return statusErr, fmt.Errorf("error: '%s' is not valid.", backupUrl)
|
||||
} else if scheme == dbfactory.HTTPScheme || scheme == dbfactory.HTTPSScheme {
|
||||
// not sure how to get the dialer so punting on this
|
||||
return 1, fmt.Errorf("sync-url does not support http or https backup locations currently")
|
||||
return statusErr, fmt.Errorf("sync-url does not support http or https backup locations currently")
|
||||
}
|
||||
|
||||
params, err := cli.ProcessBackupArgs(apr, scheme, absBackupUrl)
|
||||
if err != nil {
|
||||
return 1, err
|
||||
return statusErr, err
|
||||
}
|
||||
|
||||
b = env.NewRemote("__temp__", backupUrl, params, nil)
|
||||
|
||||
case apr.Arg(0) == cli.SyncBackupId:
|
||||
if apr.NArg() != 2 {
|
||||
return 1, fmt.Errorf("usage: dolt_backup('sync', BACKUP_NAME)")
|
||||
return statusErr, fmt.Errorf("usage: dolt_backup('sync', BACKUP_NAME)")
|
||||
}
|
||||
|
||||
backupName := strings.TrimSpace(apr.Arg(1))
|
||||
|
||||
backups, err := dbData.Rsr.GetBackups()
|
||||
if err != nil {
|
||||
return 1, err
|
||||
return statusErr, err
|
||||
}
|
||||
|
||||
b, ok = backups[backupName]
|
||||
if !ok {
|
||||
return 1, fmt.Errorf("error: unknown backup: '%s'; %v", backupName, backups)
|
||||
return statusErr, fmt.Errorf("error: unknown backup: '%s'; %v", backupName, backups)
|
||||
}
|
||||
|
||||
default:
|
||||
return 1, fmt.Errorf("unrecognized dolt_backup parameter: %s", apr.Arg(0))
|
||||
return statusErr, fmt.Errorf("unrecognized dolt_backup parameter: %s", apr.Arg(0))
|
||||
}
|
||||
|
||||
destDb, err := b.GetRemoteDB(ctx, dbData.Ddb.ValueReadWriter().Format())
|
||||
if err != nil {
|
||||
return 1, fmt.Errorf("error loading backup destination: %w", err)
|
||||
return statusErr, fmt.Errorf("error loading backup destination: %w", err)
|
||||
}
|
||||
|
||||
err = actions.SyncRoots(ctx, dbData.Ddb, destDb, dbData.Rsw.TempTableFilesDir(), runProgFuncs, stopProgFuncs)
|
||||
if err != nil && err != pull.ErrDBUpToDate {
|
||||
return 1, fmt.Errorf("error syncing backup: %w", err)
|
||||
}
|
||||
return 0, nil
|
||||
return statusOk, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user