From 8bbc86d83cb8009023fc58270040f14eefb95023 Mon Sep 17 00:00:00 2001 From: Matt Dainty Date: Fri, 11 Sep 2015 14:23:19 +0100 Subject: [PATCH] Override the GlusterFS log file location GlusterFS by default uses a log file based on the mountpoint path munged into a file, i.e. `/mnt/foo/bar` becomes `/var/log/glusterfs/mnt-foo-bar.log`. On certain Kubernetes environments this can result in a log file that exceeds the 255 character length most filesystems impose on filenames causing the mount to fail. Instead, use the `log-file` mount option to place the log file under the kubelet plugin directory with a filename of our choosing keeping it fairly persistent in the case of troubleshooting. --- pkg/volume/glusterfs/glusterfs.go | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/pkg/volume/glusterfs/glusterfs.go b/pkg/volume/glusterfs/glusterfs.go index 449c9e9d940..33c4a351557 100644 --- a/pkg/volume/glusterfs/glusterfs.go +++ b/pkg/volume/glusterfs/glusterfs.go @@ -17,8 +17,8 @@ limitations under the License. package glusterfs import ( - "math/rand" "os" + "path" "github.com/golang/glog" "k8s.io/kubernetes/pkg/api" @@ -221,12 +221,23 @@ func (b *glusterfsBuilder) setUpAtInternal(dir string) error { options = append(options, "ro") } - l := len(b.hosts.Subsets) + p := path.Join(b.glusterfs.plugin.host.GetPluginDir(glusterfsPluginName), b.glusterfs.volName) + if err := os.MkdirAll(p, 0750); err != nil { + return err + } + log := path.Join(p, "glusterfs.log") + options = append(options, "log-file="+log) + + addr := make(map[string]struct{}) + for _, s := range b.hosts.Subsets { + for _, a := range s.Addresses { + addr[a.IP] = struct{}{} + } + } + // Avoid mount storm, pick a host randomly. - start := rand.Int() % l // Iterate all hosts until mount succeeds. - for i := start; i < start+l; i++ { - hostIP := b.hosts.Subsets[i%l].Addresses[0].IP + for hostIP := range addr { errs = b.mounter.Mount(hostIP+":"+b.path, dir, "glusterfs", options) if errs == nil { return nil