From 7ba7bd303ff9b41aad6f63c74025de041f8dbc30 Mon Sep 17 00:00:00 2001 From: Madhu Rajanna Date: Thu, 30 Aug 2018 20:14:05 +0530 Subject: [PATCH] return complete snapshot info in snapshot list during the snapshot list return the complete snapshots info along with the parent volume name, if we call snapshotlist we should be able to get complete snapshot information like listing volumes. Signed-off-by: Madhu Rajanna --- e2e/snapshot_ops_test.go | 26 +++++++------- glustercli/cmd/snapshot-list.go | 13 +++---- glusterd2/commands/snapshot/snapshot-list.go | 36 ++++++++++++-------- pkg/api/snapshot_resp.go | 6 ++-- 4 files changed, 45 insertions(+), 36 deletions(-) diff --git a/e2e/snapshot_ops_test.go b/e2e/snapshot_ops_test.go index 677a4d51..d0337957 100644 --- a/e2e/snapshot_ops_test.go +++ b/e2e/snapshot_ops_test.go @@ -168,11 +168,11 @@ func testSnapshotList(t *testing.T) { snaps, err := client.SnapshotList("") r.Nil(err) r.Len(snaps, 1) - r.Len(snaps[0].SnapName, 2) + r.Len(snaps[0].SnapList, 2) snaps, err = client.SnapshotList(snapTestName) r.Nil(err) - r.Len(snaps[0].SnapName, 2) + r.Len(snaps[0].SnapList, 2) } @@ -192,8 +192,8 @@ func testSnapshotActivate(t *testing.T) { r.Nil(err) for _, snaps := range vols { - for _, snapName := range snaps.SnapName { - err = client.SnapshotActivate(snapshotActivateReq, snapName) + for _, snap := range snaps.SnapList { + err = client.SnapshotActivate(snapshotActivateReq, snap.VolInfo.Name) r.Nil(err) snapshotActivateReq.Force = true @@ -207,18 +207,18 @@ func testSnapshotDelete(t *testing.T) { vols, err := client.SnapshotList("") r.Nil(err) - r.Len(vols[0].SnapName, 1) + r.Len(vols[0].SnapList, 1) for _, snaps := range vols { - for _, snapName := range snaps.SnapName { - err = client.SnapshotDelete(snapName) + for _, snap := range snaps.SnapList { + err = client.SnapshotDelete(snap.VolInfo.Name) r.Nil(err) } } vols, err = client.SnapshotList(snapTestName) r.Nil(err) - r.Len(vols[0].SnapName, 0) + r.Len(vols, 0) } func testSnapshotDeactivate(t *testing.T) { @@ -227,8 +227,8 @@ func testSnapshotDeactivate(t *testing.T) { r.Nil(err) for _, snaps := range vols { - for _, snapName := range snaps.SnapName { - err = client.SnapshotDeactivate(snapName) + for _, snap := range snaps.SnapList { + err = client.SnapshotDeactivate(snap.VolInfo.Name) r.Nil(err) } } @@ -243,7 +243,7 @@ func testSnapshotStatusForceActivate(t *testing.T) { vols, err := client.SnapshotList(snapTestName) r.Nil(err) - snapName := vols[0].SnapName[0] + snapName := vols[0].SnapList[0].VolInfo.Name result, err = client.SnapshotStatus(snapName) r.Nil(err) @@ -284,7 +284,7 @@ func testSnapshotRestore(t *testing.T) { vols, err := client.SnapshotList(snapTestName) r.Nil(err) - snapName := vols[0].SnapName[0] + snapName := vols[0].SnapList[0].VolInfo.Name result, err = client.SnapshotStatus(snapName) r.Nil(err) @@ -297,7 +297,7 @@ func testSnapshotRestore(t *testing.T) { snaps, err := client.SnapshotList(snapTestName) r.Nil(err) - r.Len(snaps[0].SnapName, 1) + r.Len(snaps[0].SnapList, 1) err = client.VolumeStart(snapTestName, true) r.Nil(err) diff --git a/glustercli/cmd/snapshot-list.go b/glustercli/cmd/snapshot-list.go index f71e1b8c..b02dc53a 100644 --- a/glustercli/cmd/snapshot-list.go +++ b/glustercli/cmd/snapshot-list.go @@ -43,21 +43,22 @@ func snapshotListHandler(cmd *cobra.Command) error { } table.SetHeader([]string{"Name", "Origin Volume"}) for _, snap := range snaps { - for _, entry := range snap.SnapName { - table.Append([]string{entry, snap.ParentName}) + for _, s := range snap.SnapList { + table.Append([]string{s.VolInfo.Name, snap.ParentName}) } } } else { - if len(snaps[0].SnapName) == 0 { + if len(snaps) == 0 { fmt.Printf("There are no snapshots for volume %s\n", snaps[0].ParentName) return nil } table.SetHeader([]string{"Name"}) - for _, entry := range snaps[0].SnapName { - table.Append([]string{entry}) + if len(snaps) > 0 { + for _, entry := range snaps[0].SnapList { + table.Append([]string{entry.VolInfo.Name}) + } } - } table.Render() return err diff --git a/glusterd2/commands/snapshot/snapshot-list.go b/glusterd2/commands/snapshot/snapshot-list.go index 30b9ca9b..8df990d7 100644 --- a/glusterd2/commands/snapshot/snapshot-list.go +++ b/glusterd2/commands/snapshot/snapshot-list.go @@ -11,7 +11,7 @@ import ( func snapshotListHandler(w http.ResponseWriter, r *http.Request) { - snapName := make(map[string][]string) + snapName := make(map[string][]api.SnapInfo) ctx := r.Context() volumeName := r.URL.Query().Get("volume") @@ -23,9 +23,17 @@ func snapshotListHandler(w http.ResponseWriter, r *http.Request) { restutils.SendHTTPError(ctx, w, status, err) return } - snapName[volumeName] = vol.SnapList - } else { + for _, s := range vol.SnapList { + snapInfo, err := snapshot.GetSnapshot(s) + if err != nil { + status, err := restutils.ErrToStatusCode(err) + restutils.SendHTTPError(ctx, w, status, err) + return + } + snapName[volumeName] = append(snapName[volumeName], *createSnapInfoResp(snapInfo)) + } + } else { snaps, err := snapshot.GetSnapshots() if err != nil { status, err := restutils.ErrToStatusCode(err) @@ -33,22 +41,22 @@ func snapshotListHandler(w http.ResponseWriter, r *http.Request) { return } for _, s := range snaps { - snapName[s.ParentVolume] = append(snapName[s.ParentVolume], s.SnapVolinfo.Name) + snapName[s.ParentVolume] = append(snapName[s.ParentVolume], *createSnapInfoResp(s)) } } - resp := createSnapshotListResp(snapName) - restutils.SendHTTPResponse(ctx, w, http.StatusOK, resp) + restutils.SendHTTPResponse(ctx, w, http.StatusOK, createSnapshotListResp(snapName)) } -func createSnapshotListResp(snaps map[string][]string) *api.SnapListResp { +func createSnapshotListResp(volSnaps map[string][]api.SnapInfo) *api.SnapListResp { var resp api.SnapListResp - var entry api.SnapList - - for key, s := range snaps { - entry.ParentName = key - entry.SnapName = s - resp = append(resp, entry) + resp = make(api.SnapListResp, 0) + for vol, snapList := range volSnaps { + var snap api.SnapList + snap.ParentName = vol + for _, s := range snapList { + snap.SnapList = append(snap.SnapList, s) + } + resp = append(resp, snap) } - return &resp } diff --git a/pkg/api/snapshot_resp.go b/pkg/api/snapshot_resp.go index cae270e4..7ec8f298 100644 --- a/pkg/api/snapshot_resp.go +++ b/pkg/api/snapshot_resp.go @@ -11,10 +11,10 @@ type SnapInfo struct { SnapTime string `json:"snaptime"` } -//SnapList contains snapshot name of a volume +//SnapList contains snapshots information of a volume. type SnapList struct { - ParentName string `json:"parentname"` - SnapName []string `json:"snaps"` + ParentName string `json:"parentname"` + SnapList []SnapInfo `json:"snaps"` } //LvsData gives the information provided in lvs command