Merge pull request #46 from riccardobiraghi/issue32

Bubble up errors instead of using log.Fatal
This commit is contained in:
Arthur Barr
2018-04-10 16:29:29 +01:00
committed by GitHub
4 changed files with 21 additions and 10 deletions

View File

@@ -58,7 +58,11 @@ func doMain() error {
// Start signal handler
signalControl := signalHandler(name)
logConfig()
err = logConfig()
if err != nil {
logTermination(err)
return err
}
err = createVolume("/mnt/mqm")
if err != nil {
logTermination(err)

View File

@@ -16,6 +16,7 @@ limitations under the License.
package main
import (
"fmt"
"io/ioutil"
"os/user"
"runtime"
@@ -90,12 +91,12 @@ func readMounts() error {
if !detected {
log.Print("No volume detected. Persistent messages may be lost")
} else {
checkFS("/mnt/mqm")
return checkFS("/mnt/mqm")
}
return nil
}
func logConfig() {
func logConfig() error {
log.Printf("CPU architecture: %v", runtime.GOARCH)
if runtime.GOOS == "linux" {
var err error
@@ -114,8 +115,12 @@ func logConfig() {
}
logUser()
logCapabilities()
readMounts()
err = readMounts()
if err != nil {
return err
}
} else {
log.Fatalf("Unsupported platform: %v", runtime.GOOS)
return fmt.Errorf("Unsupported platform: %v", runtime.GOOS)
}
return nil
}

View File

@@ -18,6 +18,7 @@ limitations under the License.
package main
import (
"fmt"
"golang.org/x/sys/unix"
)
@@ -33,18 +34,19 @@ var fsTypes = map[int64]string{
0x794c7630: "overlayfs",
}
func checkFS(path string) {
func checkFS(path string) error {
statfs := &unix.Statfs_t{}
err := unix.Statfs(path, statfs)
if err != nil {
log.Println(err)
return
return nil
}
t := fsTypes[statfs.Type]
switch t {
case "aufs", "overlayfs", "tmpfs":
log.Fatalf("Error: %v uses unsupported filesystem type %v", path, t)
return fmt.Errorf("%v uses unsupported filesystem type: %v", path, t)
default:
log.Printf("Detected %v has filesystem type '%v'", path, t)
return nil
}
}

View File

@@ -19,6 +19,6 @@ package main
// Dummy version of this function, only for non-Linux systems.
// Having this allows unit tests to be run on other platforms (e.g. macOS)
func checkFS(path string) {
return
func checkFS(path string) error {
return nil
}