diff options
| author | Paweł Stołowski <stolowski@gmail.com> | 2021-01-19 13:11:04 +0000 |
|---|---|---|
| committer | Paweł Stołowski <stolowski@gmail.com> | 2021-01-19 13:11:04 +0000 |
| commit | 32ee2e70040c6d2d0d27c282616075e76ac1b15e (patch) | |
| tree | 5c31d30bf9a40d2698c88ed4eb6a7fd6877d73b3 | |
| parent | 7467a4905554801bc075ca8b757d547572cc7de9 (diff) | |
Fix returning of snap names when duplicated snapshot is detected.snapshots/fix-import-duplicated
| -rw-r--r-- | overlord/snapshotstate/backend/backend.go | 9 | ||||
| -rw-r--r-- | overlord/snapshotstate/backend/backend_test.go | 2 | ||||
| -rw-r--r-- | overlord/snapshotstate/snapshotstate.go | 2 | ||||
| -rw-r--r-- | overlord/snapshotstate/snapshotstate_test.go | 5 |
4 files changed, 12 insertions, 6 deletions
diff --git a/overlord/snapshotstate/backend/backend.go b/overlord/snapshotstate/backend/backend.go index 711b6ce032..f4d6bb3bff 100644 --- a/overlord/snapshotstate/backend/backend.go +++ b/overlord/snapshotstate/backend/backend.go @@ -692,7 +692,8 @@ func writeOneSnapshotFile(targetPath string, tr io.Reader) error { } type DuplicatedSnapshotImportError struct { - SetID uint64 + SetID uint64 + SnapNames []string } func (e DuplicatedSnapshotImportError) Error() string { @@ -721,7 +722,11 @@ func checkDuplicatedSnapshotSetWithContentHash(ctx context.Context, contentHash return fmt.Errorf("cannot calculate content hash for %v: %v", setID, err) } if bytes.Equal(h, contentHash) { - return DuplicatedSnapshotImportError{setID} + var snapNames []string + for _, snapshot := range ss.Snapshots { + snapNames = append(snapNames, snapshot.Snap) + } + return DuplicatedSnapshotImportError{SetID: setID, SnapNames: snapNames} } } return nil diff --git a/overlord/snapshotstate/backend/backend_test.go b/overlord/snapshotstate/backend/backend_test.go index d931e262cf..8f78b0747a 100644 --- a/overlord/snapshotstate/backend/backend_test.go +++ b/overlord/snapshotstate/backend/backend_test.go @@ -1016,7 +1016,7 @@ func (s *snapshotSuite) TestImportDuplicated(c *check.C) { _, err = backend.Import(ctx, 123, buf) dupErr, ok := err.(backend.DuplicatedSnapshotImportError) c.Assert(ok, check.Equals, true) - c.Assert(dupErr, check.DeepEquals, backend.DuplicatedSnapshotImportError{SetID: shID}) + c.Assert(dupErr, check.DeepEquals, backend.DuplicatedSnapshotImportError{SetID: shID, SnapNames: []string{"hello-snap"}}) } func (s *snapshotSuite) TestImportExportRoundtrip(c *check.C) { diff --git a/overlord/snapshotstate/snapshotstate.go b/overlord/snapshotstate/snapshotstate.go index e4be94ae95..662ebe37c4 100644 --- a/overlord/snapshotstate/snapshotstate.go +++ b/overlord/snapshotstate/snapshotstate.go @@ -338,7 +338,7 @@ func Import(ctx context.Context, st *state.State, r io.Reader) (setID uint64, sn if err := removeSnapshotState(st, dupErr.SetID); err != nil { return 0, nil, err } - return dupErr.SetID, snapNames, nil + return dupErr.SetID, dupErr.SnapNames, nil } return 0, nil, err } diff --git a/overlord/snapshotstate/snapshotstate_test.go b/overlord/snapshotstate/snapshotstate_test.go index 61927f27b8..1b214c7ae3 100644 --- a/overlord/snapshotstate/snapshotstate_test.go +++ b/overlord/snapshotstate/snapshotstate_test.go @@ -1641,7 +1641,7 @@ func (snapshotSuite) TestImportSnapshotDuplicate(c *check.C) { st := state.New(nil) restore := snapshotstate.MockBackendImport(func(ctx context.Context, id uint64, r io.Reader) ([]string, error) { - return nil, backend.DuplicatedSnapshotImportError{SetID: 3} + return nil, backend.DuplicatedSnapshotImportError{SetID: 3, SnapNames: []string{"foo-snap"}} }) defer restore() @@ -1652,9 +1652,10 @@ func (snapshotSuite) TestImportSnapshotDuplicate(c *check.C) { }) st.Unlock() - sid, _, err := snapshotstate.Import(context.TODO(), st, bytes.NewBufferString("")) + sid, snapNames, err := snapshotstate.Import(context.TODO(), st, bytes.NewBufferString("")) c.Assert(err, check.IsNil) c.Check(sid, check.Equals, uint64(3)) + c.Check(snapNames, check.DeepEquals, []string{"foo-snap"}) st.Lock() defer st.Unlock() |
