Remove -dry-run flag in restore
This flag is being removed because it's not actually that useful in practice and it just makes the restoration code more complicated.
This commit is contained in:
@@ -26,7 +26,6 @@ func (c *RestoreCommand) Run(ctx context.Context, args []string) (err error) {
|
|||||||
fs.StringVar(&opt.ReplicaName, "replica", "", "replica name")
|
fs.StringVar(&opt.ReplicaName, "replica", "", "replica name")
|
||||||
fs.StringVar(&opt.Generation, "generation", "", "generation name")
|
fs.StringVar(&opt.Generation, "generation", "", "generation name")
|
||||||
fs.IntVar(&opt.Index, "index", opt.Index, "wal index")
|
fs.IntVar(&opt.Index, "index", opt.Index, "wal index")
|
||||||
fs.BoolVar(&opt.DryRun, "dry-run", false, "dry run")
|
|
||||||
ifReplicaExists := fs.Bool("if-replica-exists", false, "")
|
ifReplicaExists := fs.Bool("if-replica-exists", false, "")
|
||||||
timestampStr := fs.String("timestamp", "", "timestamp")
|
timestampStr := fs.String("timestamp", "", "timestamp")
|
||||||
verbose := fs.Bool("v", false, "verbose output")
|
verbose := fs.Bool("v", false, "verbose output")
|
||||||
@@ -46,11 +45,6 @@ func (c *RestoreCommand) Run(ctx context.Context, args []string) (err error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verbose output is automatically enabled if dry run is specified.
|
|
||||||
if opt.DryRun {
|
|
||||||
*verbose = true
|
|
||||||
}
|
|
||||||
|
|
||||||
// Instantiate logger if verbose output is enabled.
|
// Instantiate logger if verbose output is enabled.
|
||||||
if *verbose {
|
if *verbose {
|
||||||
opt.Logger = log.New(os.Stderr, "", log.LstdFlags|log.Lmicroseconds)
|
opt.Logger = log.New(os.Stderr, "", log.LstdFlags|log.Lmicroseconds)
|
||||||
@@ -173,10 +167,6 @@ Arguments:
|
|||||||
Output path of the restored database.
|
Output path of the restored database.
|
||||||
Defaults to original DB path.
|
Defaults to original DB path.
|
||||||
|
|
||||||
-dry-run
|
|
||||||
Prints all log output as if it were running but does
|
|
||||||
not perform actual restore.
|
|
||||||
|
|
||||||
-if-replica-exists
|
-if-replica-exists
|
||||||
Returns exit code of 0 if no backups found.
|
Returns exit code of 0 if no backups found.
|
||||||
|
|
||||||
|
|||||||
40
db.go
40
db.go
@@ -1455,13 +1455,11 @@ func RestoreReplica(ctx context.Context, r Replica, opt RestoreOptions) error {
|
|||||||
logPrefix = fmt.Sprintf("%s(%s)", db.Path(), r.Name())
|
logPrefix = fmt.Sprintf("%s(%s)", db.Path(), r.Name())
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensure output path does not already exist (unless this is a dry run).
|
// Ensure output path does not already exist.
|
||||||
if !opt.DryRun {
|
if _, err := os.Stat(opt.OutputPath); err == nil {
|
||||||
if _, err := os.Stat(opt.OutputPath); err == nil {
|
return fmt.Errorf("cannot restore, output path already exists: %s", opt.OutputPath)
|
||||||
return fmt.Errorf("cannot restore, output path already exists: %s", opt.OutputPath)
|
} else if err != nil && !os.IsNotExist(err) {
|
||||||
} else if err != nil && !os.IsNotExist(err) {
|
return err
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Find lastest snapshot that occurs before timestamp.
|
// Find lastest snapshot that occurs before timestamp.
|
||||||
@@ -1483,21 +1481,17 @@ func RestoreReplica(ctx context.Context, r Replica, opt RestoreOptions) error {
|
|||||||
|
|
||||||
// Copy snapshot to output path.
|
// Copy snapshot to output path.
|
||||||
logger.Printf("%s: restoring snapshot %s/%08x to %s", logPrefix, opt.Generation, minWALIndex, tmpPath)
|
logger.Printf("%s: restoring snapshot %s/%08x to %s", logPrefix, opt.Generation, minWALIndex, tmpPath)
|
||||||
if !opt.DryRun {
|
if err := restoreSnapshot(ctx, r, pos.Generation, pos.Index, tmpPath); err != nil {
|
||||||
if err := restoreSnapshot(ctx, r, pos.Generation, pos.Index, tmpPath); err != nil {
|
return fmt.Errorf("cannot restore snapshot: %w", err)
|
||||||
return fmt.Errorf("cannot restore snapshot: %w", err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Restore each WAL file until we reach our maximum index.
|
// Restore each WAL file until we reach our maximum index.
|
||||||
for index := minWALIndex; index <= maxWALIndex; index++ {
|
for index := minWALIndex; index <= maxWALIndex; index++ {
|
||||||
if !opt.DryRun {
|
if err = restoreWAL(ctx, r, opt.Generation, index, tmpPath); os.IsNotExist(err) && index == minWALIndex && index == maxWALIndex {
|
||||||
if err = restoreWAL(ctx, r, opt.Generation, index, tmpPath); os.IsNotExist(err) && index == minWALIndex && index == maxWALIndex {
|
logger.Printf("%s: no wal available, snapshot only", logPrefix)
|
||||||
logger.Printf("%s: no wal available, snapshot only", logPrefix)
|
break // snapshot file only, ignore error
|
||||||
break // snapshot file only, ignore error
|
} else if err != nil {
|
||||||
} else if err != nil {
|
return fmt.Errorf("cannot restore wal: %w", err)
|
||||||
return fmt.Errorf("cannot restore wal: %w", err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if opt.Verbose {
|
if opt.Verbose {
|
||||||
@@ -1507,10 +1501,8 @@ func RestoreReplica(ctx context.Context, r Replica, opt RestoreOptions) error {
|
|||||||
|
|
||||||
// Copy file to final location.
|
// Copy file to final location.
|
||||||
logger.Printf("%s: renaming database from temporary location", logPrefix)
|
logger.Printf("%s: renaming database from temporary location", logPrefix)
|
||||||
if !opt.DryRun {
|
if err := os.Rename(tmpPath, opt.OutputPath); err != nil {
|
||||||
if err := os.Rename(tmpPath, opt.OutputPath); err != nil {
|
return err
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@@ -1740,10 +1732,6 @@ type RestoreOptions struct {
|
|||||||
// If zero, database restore to most recent state available.
|
// If zero, database restore to most recent state available.
|
||||||
Timestamp time.Time
|
Timestamp time.Time
|
||||||
|
|
||||||
// If true, no actual restore is performed.
|
|
||||||
// Only equivalent log output for a regular restore.
|
|
||||||
DryRun bool
|
|
||||||
|
|
||||||
// Logging settings.
|
// Logging settings.
|
||||||
Logger *log.Logger
|
Logger *log.Logger
|
||||||
Verbose bool
|
Verbose bool
|
||||||
|
|||||||
Reference in New Issue
Block a user