Skip to content

Commit

Permalink
Add tests for WAL skipline
Browse files Browse the repository at this point in the history
  • Loading branch information
x4m committed Nov 6, 2018
1 parent dc86fea commit 6505ab3
Show file tree
Hide file tree
Showing 2 changed files with 121 additions and 17 deletions.
42 changes: 25 additions & 17 deletions delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,23 +105,8 @@ func deleteBeforeTarget(target string, bk *Backup, pre *S3Prefix, findFull bool,
}
}

skip := true
skipLine := len(backups)
var walSkipFileName = ""
for i, b := range backups {
if skip {
log.Printf("%v skipped\n", b.Name)
if walSkipFileName == "" || walSkipFileName > b.WalFileName {
walSkipFileName = b.WalFileName
}
} else {
log.Printf("%v will be deleted\n", b.Name)
}
if b.Name == target {
skip = false
skipLine = i
}
}

skipLine, walSkipFileName := ComputeDeletionSkipline(backups, target)

if !dryRun {
if skipLine < len(backups)-1 {
Expand All @@ -133,6 +118,29 @@ func deleteBeforeTarget(target string, bk *Backup, pre *S3Prefix, findFull bool,
}
}

// ComputeDeletionSkipline selects last backup and name of last necessary WAL
func ComputeDeletionSkipline(backups []BackupTime, target string) (skipLine int, walSkipFileName string) {
skip := true
skipLine = len(backups)
walSkipFileName = ""
for i, backupTime := range backups {
if skip {
log.Printf("%v skipped\n", backupTime.Name)
if walSkipFileName == "" || walSkipFileName > backupTime.WalFileName {
walSkipFileName = backupTime.WalFileName
}
} else {
log.Printf("%v will be deleted\n", backupTime.Name)
}
if backupTime.Name == target {
skip = false
skipLine = i
}
}
return skipLine, walSkipFileName
}

// TODO : unit tests
func deleteBackupsBefore(backups []BackupTime, skipline int, pre *S3Prefix) {
for i, b := range backups {
if i > skipline {
Expand Down
96 changes: 96 additions & 0 deletions walg_test/delete_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
package walg_test

import (
"github.com/wal-g/wal-g"
"sort"
"testing"
"time"
)

//NB: order will reverse after sorting
var backup_times1 = []walg.BackupTime{
{
Name: "base_00000001000000000000007C",
Time: time.Date(2007, 2, 2, 30, 48, 39, 651387233, time.UTC),
WalFileName: "00000001000000000000007C",
},
{
Name: "base_00000001000000000000008C",
Time: time.Date(2008, 2, 27, 20, 8, 33, 651387235, time.UTC),
WalFileName: "00000001000000000000008C",
},
{
Name: "base_00000001000000000000009C",
Time: time.Date(2009, 11, 20, 16, 34, 58, 651387232, time.UTC),
WalFileName: "00000001000000000000009C",
},
{
Name: "base_0000000100000000000000AC",
Time: time.Date(2010, 11, 31, 20, 3, 58, 651387237, time.UTC),
WalFileName: "0000000100000000000000AC",
},
{
Name: "base_0000000100000000000000BC",
Time: time.Date(2011, 3, 13, 4, 2, 42, 651387234, time.UTC),
WalFileName: "0000000100000000000000BC",
},
}

func TestSkiplineComputation(t *testing.T) {

sort.Sort(walg.TimeSlice(backup_times1))

skipLine, walSkipFileName := walg.ComputeDeletionSkipline(backup_times1, "base_00000001000000000000008C")

if "00000001000000000000008C" != walSkipFileName {
t.Error("Incorrect walSkipFileName")
}

if 3 != skipLine { // we will skip 3 backups
t.Error("Incorrect skipLine")
}
}

//NB: order will reverse after sorting
var backup_times2 = []walg.BackupTime{
{
Name: "base_00000004000000000000007C",
Time: time.Date(2007, 2, 2, 30, 48, 39, 651387233, time.UTC),
WalFileName: "00000004000000000000007C",
},
{
Name: "base_00000004000000000000008C",
Time: time.Date(2008, 2, 27, 20, 8, 33, 651387235, time.UTC),
WalFileName: "00000004000000000000008C",
},
{
Name: "base_00000001000000000000009C",
Time: time.Date(2009, 11, 20, 16, 34, 58, 651387232, time.UTC),
WalFileName: "00000001000000000000009C",
},
{
Name: "base_0000000100000000000000AC",
Time: time.Date(2010, 11, 31, 20, 3, 58, 651387237, time.UTC),
WalFileName: "0000000100000000000000AC",
},
{
Name: "base_0000000100000000000000BC",
Time: time.Date(2011, 3, 13, 4, 2, 42, 651387234, time.UTC),
WalFileName: "0000000100000000000000BC",
},
}

func TestSkiplineComputationAfterUpgrade(t *testing.T) {

sort.Sort(walg.TimeSlice(backup_times2))

skipLine, walSkipFileName := walg.ComputeDeletionSkipline(backup_times2, "base_00000004000000000000008C")

if "00000001000000000000009C" != walSkipFileName {
t.Error("Incorrect walSkipFileName")
}

if 3 != skipLine { // we will skip 3 backups
t.Error("Incorrect skipLine")
}
}

0 comments on commit 6505ab3

Please sign in to comment.