mirror of
https://github.com/zrepl/zrepl.git
synced 2025-01-10 16:28:26 +01:00
daemon/pruner: fix exercise (don't call it test)
This commit is contained in:
parent
2c25f28972
commit
0f75677e59
@ -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 {
|
||||||
|
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user