1
0
mirror of https://github.com/gluster/glusterd2.git synced 2026-02-05 12:45:38 +01:00

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 <mrajanna@redhat.com>
This commit is contained in:
Madhu Rajanna
2018-08-30 20:14:05 +05:30
committed by Prashanth Pai
parent 07ffca782b
commit 7ba7bd303f
4 changed files with 45 additions and 36 deletions

View File

@@ -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)

View File

@@ -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

View File

@@ -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
}

View File

@@ -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