Skip to content
This repository has been archived by the owner on Mar 26, 2020. It is now read-only.

Commit

Permalink
Merge branch 'master' into edit-volume-metadata-API
Browse files Browse the repository at this point in the history
  • Loading branch information
root committed May 8, 2018
2 parents 862088d + 32db967 commit 6c3a1ef
Show file tree
Hide file tree
Showing 39 changed files with 770 additions and 387 deletions.
1 change: 1 addition & 0 deletions doc/endpoints.md

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

64 changes: 31 additions & 33 deletions e2e/volume_ops_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package e2e

import (
"errors"
"fmt"
"io/ioutil"
"net"
Expand Down Expand Up @@ -40,7 +41,7 @@ func TestVolume(t *testing.T) {

client = initRestclient(gds[0].ClientAddress)

tmpDir, err = ioutil.TempDir("", t.Name())
tmpDir, err = ioutil.TempDir(baseWorkdir, t.Name())
r.Nil(err)
t.Logf("Using temp dir: %s", tmpDir)
//defer os.RemoveAll(tmpDir)
Expand All @@ -59,15 +60,13 @@ func TestVolume(t *testing.T) {
t.Run("Stop", testVolumeStop)
t.Run("List", testVolumeList)
t.Run("Info", testVolumeInfo)
t.Run("Edit", testEditVolume)

// delete volume
t.Run("Delete", testVolumeDelete)

// Disperse volume test
t.Run("Disperse", testDisperse)

// Edit Volume Metadata test
t.Run("Edit", testEditVolume)
}

func testVolumeCreate(t *testing.T) {
Expand Down Expand Up @@ -229,7 +228,7 @@ func TestVolumeOptions(t *testing.T) {

// skip this test if glusterfs server packages and xlators are not
// installed
_, err := exec.Command("sh", "-c", "which glusterfsd").Output()
_, err := exec.Command("sh", "-c", "command -v glusterfsd").Output()
if err != nil {
t.SkipNow()
}
Expand All @@ -240,7 +239,7 @@ func TestVolumeOptions(t *testing.T) {
r.Nil(err)
defer teardownCluster(gds)

brickDir, err := ioutil.TempDir("", t.Name())
brickDir, err := ioutil.TempDir(baseWorkdir, t.Name())
defer os.RemoveAll(brickDir)

brickPath, err := ioutil.TempDir(brickDir, "brick")
Expand Down Expand Up @@ -413,40 +412,39 @@ func testDisperse(t *testing.T) {
r.Nil(client.VolumeDelete(disperseVolName), "disperse volume delete failed")
}

func testEditVolume(t *testing.T) {
r := require.New(t)

var brickPaths []string

for i := 1; i <= 4; i++ {
brickPath, err := ioutil.TempDir(tmpDir, "brick")
r.Nil(err)
brickPaths = append(brickPaths, brickPath)
}

createReq := api.VolCreateReq{
Name: volname,
Subvols: []api.SubvolReq{
{
ReplicaCount: 2,
Type: "replicate",
Bricks: []api.BrickReq{
{PeerID: gds[0].PeerID(), Path: brickPaths[0]},
{PeerID: gds[1].PeerID(), Path: brickPaths[1]},
},
},
},
Force: true,
func validateVolumeEdit(volinfo api.VolumeGetResp, editMetadataReq api.VolEditReq, resp api.VolumeEditResp) error {
for key, value := range editMetadataReq.Metadata {
if volinfo.Metadata[key] != value || resp.Metadata[key] != value {
err := errors.New("invalid response")
return err
}
}
_, err := client.VolumeCreate(createReq)
return nil
}

func testEditVolume(t *testing.T) {
r := require.New(t)
editMetadataReq := api.VolEditReq{
Metadata: map[string]string{
"owner": "gd2tests",
},
}
_, err = client.EditVolume(volname, editMetadataReq)
resp, err := client.EditVolume(volname, editMetadataReq)
r.Nil(err)
volinfo, err := client.Volumes(volname)
r.Nil(err)
err = validateVolumeEdit(volinfo[0], editMetadataReq, resp)
r.Nil(err)
editMetadataReq = api.VolEditReq{
Metadata: map[string]string{
"owner": "gd2functests",
"year": "2018",
},
}
resp, err = client.EditVolume(volname, editMetadataReq)
r.Nil(err)
volinfo, err = client.Volumes(volname)
r.Nil(err)
err = client.VolumeDelete(volname)
err = validateVolumeEdit(volinfo[0], editMetadataReq, resp)
r.Nil(err)
}
78 changes: 46 additions & 32 deletions glustercli/cmd/bitrot.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ func init() {
bitrotCmd.AddCommand(bitrotScrubCmd)

RootCmd.AddCommand(bitrotCmd)

}

var bitrotCmd = &cobra.Command{
Expand All @@ -54,13 +55,14 @@ var bitrotEnableCmd = &cobra.Command{
Args: cobra.ExactArgs(1),
Run: func(cmd *cobra.Command, args []string) {
volname := args[0]

err := client.BitrotEnable(volname)
if err != nil {
log.WithFields(log.Fields{
"volume": volname,
"error": err.Error(),
}).Error("failed to enable bitrot")
if verbose {
log.WithFields(log.Fields{
"volume": volname,
"error": err.Error(),
}).Error("failed to enable bitrot")
}
failure(fmt.Sprintf("Failed to enable bitrot for volume %s\n", volname), err, 1)
}
fmt.Printf("Bitrot enabled successfully for volume %s\n", volname)
Expand All @@ -76,10 +78,12 @@ var bitrotDisableCmd = &cobra.Command{

err := client.BitrotDisable(volname)
if err != nil {
log.WithFields(log.Fields{
"volume": volname,
"error": err.Error(),
}).Error("failed to disable bitrot")
if verbose {
log.WithFields(log.Fields{
"volume": volname,
"error": err.Error(),
}).Error("failed to disable bitrot")
}
failure(fmt.Sprintf("Failed to disable bitrot for volume %s\n", volname), err, 1)
}
fmt.Printf("Bitrot disabled successfully for volume '%s'\n", volname)
Expand All @@ -98,11 +102,13 @@ var bitrotScrubThrottleCmd = &cobra.Command{

err := volumeOptionJSONHandler(cmd, volname, option)
if err != nil {
log.WithFields(log.Fields{
"volume": volname,
"value": args[1],
"error": err.Error(),
}).Error("failed to set scrub-throttle")
if verbose {
log.WithFields(log.Fields{
"volume": volname,
"value": args[1],
"error": err.Error(),
}).Error("failed to set scrub-throttle")
}
failure(fmt.Sprintf("Failed to set bitrot scrub throttle to %s for volume %s", args[1], volname), err, 1)
}
fmt.Printf("Bitrot scrub throttle set successfully to %s for volume %s\n", args[1], volname)
Expand All @@ -121,11 +127,13 @@ var bitrotScrubFrequencyCmd = &cobra.Command{

err := volumeOptionJSONHandler(cmd, volname, option)
if err != nil {
log.WithFields(log.Fields{
"volume": volname,
"value": args[1],
"error": err.Error(),
}).Error("failed to set scrub-frequency")
if verbose {
log.WithFields(log.Fields{
"volume": volname,
"value": args[1],
"error": err.Error(),
}).Error("failed to set scrub-frequency")
}
failure(fmt.Sprintf("Failed to set bitrot scrub frequency to %s for volume %s", args[1], volname), err, 1)
}
fmt.Printf("Bitrot scrub frequency is set successfully to %s for volume %s\n", args[1], volname)
Expand All @@ -146,22 +154,26 @@ var bitrotScrubCmd = &cobra.Command{
option = append(option, args[1])
err := volumeOptionJSONHandler(cmd, volname, option)
if err != nil {
log.WithFields(log.Fields{
"volume": volname,
"value": args[1],
"error": err.Error(),
}).Error("Bitrot scrub", scrubCmd, "command failed")
if verbose {
log.WithFields(log.Fields{
"volume": volname,
"value": args[1],
"error": err.Error(),
}).Error("Bitrot scrub", scrubCmd, "command failed")
}
failure(fmt.Sprintf("Failed to %s bitrot scrub for volume %s", args[1], volname), err, 1)
}
fmt.Printf("Bitrot scrub %s is successful for volume %s\n", args[1], volname)

case scrubStatus:
scrubStatus, err := client.BitrotScrubStatus(volname)
if err != nil {
log.WithFields(log.Fields{
"volume": volname,
"error": err.Error(),
}).Error("failed to get bitrot scrub status")
if verbose {
log.WithFields(log.Fields{
"volume": volname,
"error": err.Error(),
}).Error("failed to get bitrot scrub status")
}
failure(fmt.Sprintf("Failed to get bitrot scrub status for volume %s\n", volname), err, 1)
}
fmt.Println()
Expand Down Expand Up @@ -203,10 +215,12 @@ var bitrotScrubCmd = &cobra.Command{
case scrubOndemand:
err := client.BitrotScrubOndemand(volname)
if err != nil {
log.WithFields(log.Fields{
"volume": volname,
"error": err.Error(),
}).Error("failed to start bitrot scrub on demand")
if verbose {
log.WithFields(log.Fields{
"volume": volname,
"error": err.Error(),
}).Error("failed to start bitrot scrub on demand")
}
failure(fmt.Sprintf("Failed to start bitrot scrub on demand for volume %s\n", volname), err, 1)
}
fmt.Printf("Bitrot scrub on demand started successfully for volume %s\n", volname)
Expand Down
29 changes: 18 additions & 11 deletions glustercli/cmd/events.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ var (
func init() {
eventsWebhookAddCmd.Flags().StringVarP(&flagWebhookAddCmdToken, "bearer-token", "t", "", "Bearer Token")
eventsWebhookAddCmd.Flags().StringVarP(&flagWebhookAddCmdSecret, "secret", "s", "", "Secret to generate JWT Bearer Token")

eventsCmd.AddCommand(eventsWebhookAddCmd)

eventsCmd.AddCommand(eventsWebhookDeleteCmd)
Expand All @@ -46,10 +47,12 @@ var eventsWebhookAddCmd = &cobra.Command{
url := args[0]
err := client.WebhookAdd(url, flagWebhookAddCmdToken, flagWebhookAddCmdSecret)
if err != nil {
log.WithFields(log.Fields{
"url": url,
"error": err.Error(),
}).Error("failed to add webhook")
if verbose {
log.WithFields(log.Fields{
"url": url,
"error": err.Error(),
}).Error("failed to add webhook")
}
failure("Failed to add Webhook", err, 1)
}
fmt.Printf("Webhook %s added successfully\n", url)
Expand All @@ -64,10 +67,12 @@ var eventsWebhookDeleteCmd = &cobra.Command{
url := args[0]
err := client.WebhookDelete(url)
if err != nil {
log.WithFields(log.Fields{
"url": url,
"error": err.Error(),
}).Error("failed to delete webhook")
if verbose {
log.WithFields(log.Fields{
"url": url,
"error": err.Error(),
}).Error("failed to delete webhook")
}
failure("Failed to delete Webhook", err, 1)
}
fmt.Printf("Webhook %s deleted successfully\n", url)
Expand All @@ -81,9 +86,11 @@ var eventsWebhookListCmd = &cobra.Command{
Run: func(cmd *cobra.Command, args []string) {
webhooks, err := client.Webhooks()
if err != nil {
log.WithFields(log.Fields{
"error": err.Error(),
}).Error("failed to get list of Webhooks")
if verbose {
log.WithFields(log.Fields{
"error": err.Error(),
}).Error("failed to get list of Webhooks")
}
failure("Failed to get list of registered Webhooks", err, 1)
}

Expand Down
47 changes: 27 additions & 20 deletions glustercli/cmd/georep.go
Original file line number Diff line number Diff line change
Expand Up @@ -123,11 +123,12 @@ func getVolumeDetails(volname string, rclient *restclient.Client) (*volumeDetail
if !master {
emsg = errGeorepRemoteInfoNotAvailable
}

log.WithFields(log.Fields{
"volume": volname,
"error": err.Error(),
}).Error("failed to get Volume details")
if verbose {
log.WithFields(log.Fields{
"volume": volname,
"error": err.Error(),
}).Error("failed to get Volume details")
}
return nil, errors.New(emsg)
}

Expand Down Expand Up @@ -187,11 +188,12 @@ var georepCreateCmd = &cobra.Command{
// Generate SSH Keys from all nodes of Master Volume
sshkeys, err := client.GeorepSSHKeysGenerate(volname)
if err != nil {
log.WithFields(log.Fields{
"volume": volname,
"error": err.Error(),
}).Error("failed to generate SSH Keys")

if verbose {
log.WithFields(log.Fields{
"volume": volname,
"error": err.Error(),
}).Error("failed to generate SSH Keys")
}
failure(errGeorepSessionCreationFailed+errGeorepSSHKeysGenerate, err, 1)
}

Expand All @@ -204,17 +206,20 @@ var georepCreateCmd = &cobra.Command{
})

if err != nil {
log.WithField("volume", volname).Println("georep session creation failed")
if verbose {
log.WithField("volume", volname).Println("georep session creation failed")
}
failure(errGeorepSessionCreationFailed, err, 1)
}

err = rclient.GeorepSSHKeysPush(remotevol, sshkeys)
if err != nil {
log.WithFields(log.Fields{
"volume": remotevol,
"error": err.Error(),
}).Error("failed to push SSH Keys to Remote Cluster")

if verbose {
log.WithFields(log.Fields{
"volume": remotevol,
"error": err.Error(),
}).Error("failed to push SSH Keys to Remote Cluster")
}
handleGlusterdConnectFailure(errGeorepSessionCreationFailed, err, flagGeorepRemoteGlusterdHTTPS, flagGeorepRemoteGlusterdHost, flagGeorepRemoteGlusterdPort, 1)

// If not Glusterd connect issue
Expand Down Expand Up @@ -270,10 +275,12 @@ func handleGeorepAction(args []string, action georepAction) {
}

if err != nil {
log.WithFields(log.Fields{
"volume": masterdata.volname,
"error": err.Error(),
}).Error("geo-replication", action.String(), "failed")
if verbose {
log.WithFields(log.Fields{
"volume": masterdata.volname,
"error": err.Error(),
}).Error("geo-replication", action.String(), "failed")
}
failure(fmt.Sprintf("Geo-replication %s failed", action.String()), err, 1)
}
fmt.Println("Geo-replication session", action.String(), "successful")
Expand Down
Loading

0 comments on commit 6c3a1ef

Please sign in to comment.