Skip to content

Commit

Permalink
check mount path +fix log
Browse files Browse the repository at this point in the history
  • Loading branch information
sapk committed Jan 17, 2019
1 parent b69d15d commit b58085f
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 11 deletions.
47 changes: 38 additions & 9 deletions rclone/driver/driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ package driver

import (
"fmt"
"io/ioutil"
"os"
"path/filepath"
"strings"
"sync"
"time"

Expand All @@ -27,6 +29,16 @@ type rcloneMountpoint struct {
Connections int `json:"connections"`
}

func (m *rcloneMountpoint) isMounted() (bool, error) {
//TODO Better check for remote /var/lib/docker-volumes/rclone/mountpath fuse.rclone ro,nosuid,nodev,relatime,user_id=0,group_id=0 0 0
buf, err := ioutil.ReadFile("/proc/mounts")
if err != nil {
return false, err
}
log.Debugf("isMounted Path: path: %s %v", m.Path, strings.Contains(string(buf), " "+m.Path+" fuse.rclone"))
return strings.Contains(string(buf), " "+m.Path+" fuse.rclone"), nil
}

type rcloneVolume struct {
Config string `json:"config"`
Args string `json:"args"`
Expand Down Expand Up @@ -254,19 +266,27 @@ func (d *RcloneDriver) Mount(r *volume.MountRequest) (*volume.MountResponse, err
return nil, fmt.Errorf("volume mount %s not found for %s", v.Mount, r.Name)
}

if m.Connections > 0 {
ready, err := m.isMounted()
if err != nil {
return nil, err
}
if ready {
v.Connections++
m.Connections++
if err := d.saveConfig(); err != nil {
return nil, err
}
return &volume.MountResponse{Mountpoint: m.Path}, nil
} else {
//Reset (maybe a reboot)
v.Connections = 0
m.Connections = 0
}

//TODO write temp file before dans don't use base64
var cmd string
if log.GetLevel() == log.DebugLevel {
cmd = fmt.Sprintf("/usr/bin/rclone --log-file /var/log/rclone.log --config=<(echo \"%s\"| base64 -d) %s mount \"%s\" \"%s\" & sleep 5s", v.Config, v.Args, v.Remote, m.Path)
cmd = fmt.Sprintf("/usr/bin/rclone --log-file /var/log/rclone.%d.log --config=<(echo \"%s\"| base64 -d) %s mount \"%s\" \"%s\" & sleep 5s", time.Now().Unix(), v.Config, v.Args, v.Remote, m.Path)
} else {
cmd = fmt.Sprintf("/usr/bin/rclone --config=<(echo \"%s\"| base64 -d) %s mount \"%s\" \"%s\" & sleep 5s", v.Config, v.Args, v.Remote, m.Path)
}
Expand Down Expand Up @@ -310,16 +330,25 @@ func (d *RcloneDriver) Unmount(r *volume.UnmountRequest) error {
return fmt.Errorf("volume mount %s not found for %s", v.Mount, r.Name)
}

if m.Connections <= 1 {
cmd := fmt.Sprintf("/usr/bin/umount %s", m.Path)
if err := d.runCmd(cmd); err != nil {
return err
}
mounted, err := m.isMounted()
if err != nil {
return err
}
if !mounted { //Force reset if not mounted
m.Connections = 0
v.Connections = 0
} else {
m.Connections--
v.Connections--
if m.Connections <= 1 {
cmd := fmt.Sprintf("/usr/bin/umount %s", m.Path)
if err := d.runCmd(cmd); err != nil {
return err
}
m.Connections = 0
v.Connections = 0
} else {
m.Connections--
v.Connections--
}
}

if err := d.saveConfig(); err != nil {
Expand Down
2 changes: 1 addition & 1 deletion rclone/rclone.go
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ func setupLogger(cmd *cobra.Command, args []string) {
if verbose, _ := cmd.Flags().GetBool(VerboseFlag); verbose {
log.SetLevel(log.DebugLevel)
//Activate log to file in debug mode
f, err := os.OpenFile("/var/log/docker-volume-rclone.log", os.O_WRONLY|os.O_CREATE, 0644)
f, err := os.OpenFile("/var/log/docker-volume-rclone.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
if err != nil {
log.Fatal(err)
}
Expand Down
2 changes: 1 addition & 1 deletion support/docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ RUN make clean build
RUN go get -u -v github.com/ncw/rclone

FROM alpine
MAINTAINER Antoine GIRARD <[email protected]>
LABEL maintainer="Antoine GIRARD <[email protected]>"

RUN apk add --no-cache ca-certificates bash fuse \
&& mkdir -p /var/lib/docker-volumes/rclone /etc/docker-volumes/rclone
Expand Down

0 comments on commit b58085f

Please sign in to comment.