Skip to content

Commit

Permalink
Improve how existing-volume-id checks for mounting requirement
Browse files Browse the repository at this point in the history
  • Loading branch information
erkie committed Jan 29, 2019
1 parent b3911ab commit 2e4b917
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 22 deletions.
2 changes: 1 addition & 1 deletion cmd/backup_perform.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ func backupMysqlPerform(backupType string, backupsBucket string, mysqlDataPath s

// - Start Percona XtraBackup
err = (func() error {
err = os.MkdirAll(backupDirectory, 0755)
err = os.MkdirAll(backupDirectory, 0700)
if err != nil {
pkg.AlertError(configStruct.Alerting, "Could not create backup directory.", err)
return err
Expand Down
5 changes: 5 additions & 0 deletions cmd/backup_restore.go
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,11 @@ func backupMysqlPerformRestore(fromHostname string, restoreTimestamp string, bac
existingBackupDirectory,
)

if err != nil {
pkg.ErrorLog.Println("Could not create mount volume.", err)
return nil
}

restoreDirectory := path.Join(mountDirectory, "really-simple-db-restore")
err = os.MkdirAll(restoreDirectory, 0755)
if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion cmd/prerequisites.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ func prerequisites(persistentStorageDirectory string) error {
dirInfo, err = os.Stat(persistentStorageDirectory)
if err != nil && os.IsNotExist(err) {
pkg.Log.Println("Persistent storage directory did not exist. Attempting to create", persistentStorageDirectory)
err = os.Mkdir(persistentStorageDirectory, 0755)
err = os.Mkdir(persistentStorageDirectory, 0700)
if err != nil {
pkg.ErrorLog.Fatalf("Could not create persistent storage directory at %s: %s", persistentStorageDirectory, err)
}
Expand Down
26 changes: 16 additions & 10 deletions cmd/volume.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package cmd

import (
"path"
"strings"
"time"

"github.com/digitalocean/godo"
Expand Down Expand Up @@ -55,19 +57,23 @@ func createAndMountVolumeForUse(volumePrefix string, sizeInGb int64, digitalOcea
pkg.Log.Println("Volume is being mounted.")

// - Mount that volume
var mountDirectory string
mountDirectory, err = pkg.MountVolume(volume.Name, volume.ID, thisHost.DropletID, digitalOceanClient)
mountDirectory := path.Join("/mnt/", strings.Replace(volume.Name, "-", "_", -1))
pkg.Log.Println("Volume is being mounted.", volume.DropletIDs)

if err != nil {
pkg.AlertError(configStruct.Alerting, "Could not mount volume "+volume.ID, err)
return volume, mountDirectory, err
}
if len(volume.DropletIDs) == 0 || volume.DropletIDs[0] != thisHost.DropletID {
err = pkg.MountVolume(volume.Name, mountDirectory, volume.ID, thisHost.DropletID, digitalOceanClient)

if len(volume.DropletIDs) == 0 {
volume.DropletIDs = append(volume.DropletIDs, thisHost.DropletID)
}
if err != nil {
pkg.AlertError(configStruct.Alerting, "Could not mount volume "+volume.ID, err)
return volume, mountDirectory, err
}

if len(volume.DropletIDs) == 0 {
volume.DropletIDs = append(volume.DropletIDs, thisHost.DropletID)
}

pkg.Log.Printf("Volume %s mounted on this host under %s.\n", volume.ID, mountDirectory)
pkg.Log.Printf("Volume %s mounted on this host under %s.\n", volume.ID, mountDirectory)
}

return volume, mountDirectory, nil
}
18 changes: 8 additions & 10 deletions pkg/volume_helper.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package pkg
import (
"errors"
"os"
"strings"
"time"

"github.com/digitalocean/godo"
Expand All @@ -30,24 +29,24 @@ func CreateVolume(createRequest *godo.VolumeCreateRequest, digitalOceanClient *D
}

// MountVolume mounts volume on machine and won't return until complete
func MountVolume(volumeName string, volumeID string, dropletID int, digitalOceanClient *DigitalOceanClient) (string, error) {
func MountVolume(volumeName string, mountPoint string, volumeID string, dropletID int, digitalOceanClient *DigitalOceanClient) error {
action, _, err := digitalOceanClient.Client.StorageActions.Attach(
digitalOceanClient.Context,
volumeID,
dropletID,
)

if err != nil {
return "", err
return err
}

if action.Status == "errored" {
return "", errors.New("Attach action had a status of errored")
return errors.New("Attach action had a status of errored")
}

err = digitalOceanWaitForAction(action, digitalOceanClient)
if err != nil {
return "", err
return err
}

// Wait for system to settle
Expand All @@ -57,11 +56,10 @@ func MountVolume(volumeName string, volumeID string, dropletID int, digitalOcean

// Volume is now available in /dev/disk/by-id/scsi-0DO_Volume_$VOLUME_NAME
diskLocation := "/dev/disk/by-id/scsi-0DO_Volume_" + volumeName
mountPoint := "/mnt/" + strings.Replace(volumeName, "-", "_", -1)

err = os.MkdirAll(mountPoint, 0755)
err = os.MkdirAll(mountPoint, 0700)
if err != nil {
return "", err
return err
}

_, err = PerformCommand("mount", "-o", "discard,defaults,noatime", diskLocation, mountPoint)
Expand All @@ -73,7 +71,7 @@ func MountVolume(volumeName string, volumeID string, dropletID int, digitalOcean

file, testErr := os.Create(mountPoint + "/test-mount")
if testErr != nil {
return mountPoint, testErr
return testErr
}
file.Close()

Expand All @@ -82,7 +80,7 @@ func MountVolume(volumeName string, volumeID string, dropletID int, digitalOcean
err = nil
}

return mountPoint, err
return err
}

// UnmountVolume unmounts a volume
Expand Down

0 comments on commit 2e4b917

Please sign in to comment.