Skip to content

Commit

Permalink
Override the GlusterFS log file location
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
bodgit committed Sep 11, 2015
1 parent 703130e commit 8bbc86d
Showing 1 changed file with 16 additions and 5 deletions.
21 changes: 16 additions & 5 deletions pkg/volume/glusterfs/glusterfs.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ limitations under the License.
package glusterfs

import (
"math/rand"
"os"
"path"

"github.com/golang/glog"
"k8s.io/kubernetes/pkg/api"
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 8bbc86d

Please sign in to comment.