From 0b62cdef4ac6fee056d17e759a4d36ed62374f47 Mon Sep 17 00:00:00 2001 From: Jan Safranek Date: Fri, 21 Jul 2017 11:05:06 +0200 Subject: [PATCH 1/3] UPSTREAM: 48709: glusterfs: retry without auto_unmount only when it's not supported --- .../pkg/volume/glusterfs/glusterfs.go | 30 +++++++++---------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/vendor/k8s.io/kubernetes/pkg/volume/glusterfs/glusterfs.go b/vendor/k8s.io/kubernetes/pkg/volume/glusterfs/glusterfs.go index 6c16d524c132..8f21587945b7 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/glusterfs/glusterfs.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/glusterfs/glusterfs.go @@ -342,24 +342,24 @@ func (b *glusterfsMounter) setUpAtInternal(dir string) error { return nil } - // Give a try without `auto_unmount mount option, because - // it could be that gluster fuse client is older version and - // mount.glusterfs is unaware of `auto_unmount`. - // Use a mount string without `auto_unmount`` - - autoMountOptions := make([]string, len(mountOptions)) - for _, opt := range mountOptions { - if opt != "auto_unmount" { - autoMountOptions = append(autoMountOptions, opt) + const invalidOption = "Invalid option auto_unmount" + if dstrings.Contains(errs.Error(), invalidOption) { + // Give a try without `auto_unmount mount option, because + // it could be that gluster fuse client is older version and + // mount.glusterfs is unaware of `auto_unmount`. + noAutoMountOptions := make([]string, len(mountOptions)) + for _, opt := range mountOptions { + if opt != "auto_unmount" { + noAutoMountOptions = append(noAutoMountOptions, opt) + } } - } - autoerrs := b.mounter.Mount(ip+":"+b.path, dir, "glusterfs", autoMountOptions) - if autoerrs == nil { - glog.Infof("glusterfs: successfully mounted %s", dir) - return nil + errs = b.mounter.Mount(ip+":"+b.path, dir, "glusterfs", noAutoMountOptions) + if errs == nil { + glog.Infof("glusterfs: successfully mounted %s", dir) + return nil + } } - } // Failed mount scenario. From b0958718d5e4f59de6d3321bbfae022ee7468720 Mon Sep 17 00:00:00 2001 From: Jan Safranek Date: Fri, 21 Jul 2017 11:05:06 +0200 Subject: [PATCH 2/3] UPSTREAM: 49127: Make definite mount timeout for glusterfs volume mount --- .../kubernetes/pkg/volume/glusterfs/glusterfs.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/vendor/k8s.io/kubernetes/pkg/volume/glusterfs/glusterfs.go b/vendor/k8s.io/kubernetes/pkg/volume/glusterfs/glusterfs.go index 8f21587945b7..519785ab48df 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/glusterfs/glusterfs.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/glusterfs/glusterfs.go @@ -333,9 +333,14 @@ func (b *glusterfsMounter) setUpAtInternal(dir string) error { options = append(options, "backup-volfile-servers="+dstrings.Join(addrlist[:], ":")) mountOptions := volume.JoinMountOptions(b.mountOptions, options) - // Avoid mount storm, pick a host randomly. - // Iterate all hosts until mount succeeds. - for _, ip := range addrlist { + // with `backup-volfile-servers` mount option in place, it is not required to + // iterate over all the servers in the addrlist. A mount attempt with this option + // will fetch all the servers mentioned in the backup-volfile-servers list. + // Refer backup-volfile-servers @ https://access.redhat.com/documentation/en-US/Red_Hat_Storage/3/html/Administration_Guide/sect-Native_Client.html + + if (len(addrlist) > 0) && (addrlist[0] != "") { + ip := addrlist[0] + errs = b.mounter.Mount(ip+":"+b.path, dir, "glusterfs", mountOptions) if errs == nil { glog.Infof("glusterfs: successfully mounted %s", dir) @@ -360,6 +365,8 @@ func (b *glusterfsMounter) setUpAtInternal(dir string) error { return nil } } + } else { + return fmt.Errorf("glusterfs: failed to execute mount command:[no valid ipaddress found in endpoint address list]") } // Failed mount scenario. From 398697da4ed773cfb50485da7985a9bc22db5490 Mon Sep 17 00:00:00 2001 From: Jan Safranek Date: Tue, 25 Jul 2017 10:16:00 +0200 Subject: [PATCH 3/3] UPSTREAM: 49475: Fixed glusterfs mount options --- vendor/k8s.io/kubernetes/pkg/volume/glusterfs/glusterfs.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/k8s.io/kubernetes/pkg/volume/glusterfs/glusterfs.go b/vendor/k8s.io/kubernetes/pkg/volume/glusterfs/glusterfs.go index 519785ab48df..4e2aa638ed11 100644 --- a/vendor/k8s.io/kubernetes/pkg/volume/glusterfs/glusterfs.go +++ b/vendor/k8s.io/kubernetes/pkg/volume/glusterfs/glusterfs.go @@ -352,7 +352,7 @@ func (b *glusterfsMounter) setUpAtInternal(dir string) error { // Give a try without `auto_unmount mount option, because // it could be that gluster fuse client is older version and // mount.glusterfs is unaware of `auto_unmount`. - noAutoMountOptions := make([]string, len(mountOptions)) + noAutoMountOptions := make([]string, 0, len(mountOptions)) for _, opt := range mountOptions { if opt != "auto_unmount" { noAutoMountOptions = append(noAutoMountOptions, opt)