daemon/pruner: fix exercise (don't call it test)

This commit is contained in:
Christian Schwarz 2018-09-05 21:47:44 -07:00
parent 2c25f28972
commit 0f75677e59
2 changed files with 28 additions and 11 deletions

View File

@ -270,11 +270,22 @@ fsloop:
l := GetLogger(ctx).WithField("fs", tfs.Path) l := GetLogger(ctx).WithField("fs", tfs.Path)
l.Debug("plan filesystem") l.Debug("plan filesystem")
pfs := &fs{
path: tfs.Path,
}
pfss[i] = pfs
tfsvs, err := target.ListFilesystemVersions(ctx, tfs.Path) tfsvs, err := target.ListFilesystemVersions(ctx, tfs.Path)
if err != nil { if err != nil {
l.WithError(err).Error("cannot list filesystem versions") l.WithError(err).Error("cannot list filesystem versions")
return onErr(u, err) if shouldRetry(err) {
return onErr(u, err)
}
pfs.err = err
continue fsloop
} }
pfs.snaps = make([]pruning.Snapshot, 0, len(tfsvs))
rcReq := &pdu.ReplicationCursorReq{ rcReq := &pdu.ReplicationCursorReq{
Filesystem: tfs.Path, Filesystem: tfs.Path,
@ -283,18 +294,18 @@ fsloop:
rc, err := receiver.ReplicationCursor(ctx, rcReq) rc, err := receiver.ReplicationCursor(ctx, rcReq)
if err != nil { if err != nil {
l.WithError(err).Error("cannot get replication cursor") l.WithError(err).Error("cannot get replication cursor")
return onErr(u, err) if shouldRetry(err) {
return onErr(u, err)
}
pfs.err = err
continue fsloop
} }
if rc.GetError() != "" { if rc.GetError() != "" {
l.WithField("reqErr", rc.GetError()).Error("cannot get replication cursor") l.WithField("reqErr", rc.GetError()).Error("cannot get replication cursor")
return onErr(u, fmt.Errorf("%s", rc.GetError())) pfs.err = fmt.Errorf("%s", rc.GetError())
continue fsloop
} }
pfs := &fs{
path: tfs.Path,
snaps: make([]pruning.Snapshot, 0, len(tfsvs)),
}
pfss[i] = pfs
// scan from older to newer, all snapshots older than cursor are interpreted as replicated // scan from older to newer, all snapshots older than cursor are interpreted as replicated
sort.Slice(tfsvs, func(i, j int) bool { sort.Slice(tfsvs, func(i, j int) bool {

View File

@ -30,6 +30,7 @@ func (m *mockFS) FilesystemVersions() []*pdu.FilesystemVersion {
Type: pdu.FilesystemVersion_Snapshot, Type: pdu.FilesystemVersion_Snapshot,
Name: v, Name: v,
Creation: pdu.FilesystemVersionCreation(time.Unix(0, 0)), Creation: pdu.FilesystemVersionCreation(time.Unix(0, 0)),
Guid: uint64(i),
} }
} }
return versions return versions
@ -89,18 +90,23 @@ func (t *mockTarget) DestroySnapshots(ctx context.Context, req *pdu.DestroySnaps
return &pdu.DestroySnapshotsRes{Results: res}, nil return &pdu.DestroySnapshotsRes{Results: res}, nil
} }
type mockCursor struct {
snapname string
guid uint64
}
type mockHistory struct { type mockHistory struct {
errs map[string][]error errs map[string][]error
cursors map[string]*mockCursor
} }
func (r *mockHistory) SnapshotReplicationStatus(ctx context.Context, req *pdu.SnapshotReplicationStatusReq) (*pdu.SnapshotReplicationStatusRes, error) { func (r *mockHistory) ReplicationCursor(ctx context.Context, req *pdu.ReplicationCursorReq) (*pdu.ReplicationCursorRes, error) {
fs := req.Filesystem fs := req.Filesystem
if len(r.errs[fs]) > 0 { if len(r.errs[fs]) > 0 {
e := r.errs[fs][0] e := r.errs[fs][0]
r.errs[fs] = r.errs[fs][1:] r.errs[fs] = r.errs[fs][1:]
return nil, e return nil, e
} }
return &pdu.SnapshotReplicationStatusRes{Status: pdu.SnapshotReplicationStatusRes_Nonexistent}, nil return &pdu.ReplicationCursorRes{Result: &pdu.ReplicationCursorRes_Guid{Guid: 0}}, nil
} }
type stubNetErr struct { type stubNetErr struct {
@ -195,7 +201,7 @@ func TestPruner_Prune(t *testing.T) {
exp := map[string][]string{ exp := map[string][]string{
"zroot/bar": {"drop_g"}, "zroot/bar": {"drop_g"},
// drop_c is prohibited by failing destroy // drop_c is prohibited by failing destroy
// drop_i is prohibiteed by failing WasSnapshotReplicated call // drop_i is prohibiteed by failing ReplicationCursor call
} }
assert.Equal(t, exp, target.destroyed) assert.Equal(t, exp, target.destroyed)