in pitr/agent/internal/handler/restore.go [32:102]
func Restore(ctx *fiber.Ctx) (err error) {
in := &view.RestoreIn{}
if err = ctx.BodyParser(in); err != nil {
err = fmt.Errorf("body parse err=%s,wrap=%w", err, cons.BodyParseFailed)
return
}
if err = in.Validate(); err != nil {
err = fmt.Errorf("invalid parameter,err=%w", err)
return
}
if err = pkg.OG.Auth(in.Username, in.Password, in.DBName, in.DBPort); err != nil {
efmt := "pkg.OG.Auth failure[un=%s,pw.len=%d,db=%s],err=%w"
err = fmt.Errorf(efmt, in.Username, len(in.Password), in.DBName, err)
return
}
// stop openGauss
if err = pkg.OG.Stop(); err != nil {
err = fmt.Errorf("stop openGauss failure,err=%w", err)
return
}
defer func() {
if err != nil {
err2 := pkg.OG.Start()
if err2 != nil {
err = fmt.Errorf("pkg.OG.Start() return err=%s,wrap=%w", err2, err)
return
}
}
}()
// move pgdata to temp
if err = pkg.OG.MvPgDataToTemp(); err != nil {
err = fmt.Errorf("pkg.OG.MvPgDataToTemp return err=%w", err)
return
}
var status = "restoring"
defer func() {
if status != "restore success" {
err2 := pkg.OG.MvTempToPgData()
err = fmt.Errorf("resotre failre[err=%s],pkg.OG.MvTempToPgData return err=%w", err, err2)
}
}()
// restore data from backup
if err = pkg.OG.Restore(in.DnBackupPath, in.Instance, in.DnBackupID); err != nil {
efmt := "pkg.OG.Restore failure[path=%s,instance=%s,backupID=%s],err=%w"
err = fmt.Errorf(efmt, in.DnBackupPath, in.Instance, in.DnBackupID, err)
status = "restore failure"
return
}
status = "restore success"
// clean temp
if err = pkg.OG.CleanPgDataTemp(); err != nil {
err = fmt.Errorf("pkg.OG.CleanPgDataTemp return err=%w", err)
return
}
if err = pkg.OG.Start(); err != nil {
err = fmt.Errorf("pkg.OG.Start return err=%w", err)
return
}
return responder.Success(ctx, nil)
}