Merge pull request #5634 from gyuho/wal

wal: PrivateFileMode/DirMode as in pkg/fileutil
This commit is contained in:
Gyu-Ho Lee 2016-06-10 15:41:43 -07:00 committed by GitHub
commit 175c67a552
9 changed files with 23 additions and 24 deletions

View File

@ -25,9 +25,10 @@ import (
)
const (
privateFileMode = 0600
// owner can make/remove files inside the directory
privateDirMode = 0700
// PrivateFileMode grants owner to read/write a file.
PrivateFileMode = 0600
// PrivateDirMode grants owner to make/remove files inside the directory.
PrivateDirMode = 0700
)
var (
@ -38,7 +39,7 @@ var (
// to dir. It returns nil if dir is writable.
func IsDirWriteable(dir string) error {
f := path.Join(dir, ".touch")
if err := ioutil.WriteFile(f, []byte(""), privateFileMode); err != nil {
if err := ioutil.WriteFile(f, []byte(""), PrivateFileMode); err != nil {
return err
}
return os.Remove(f)
@ -62,7 +63,7 @@ func ReadDir(dirpath string) ([]string, error) {
// TouchDirAll is similar to os.MkdirAll. It creates directories with 0700 permission if any directory
// does not exists. TouchDirAll also ensures the given directory is writable.
func TouchDirAll(dir string) error {
err := os.MkdirAll(dir, privateDirMode)
err := os.MkdirAll(dir, PrivateDirMode)
if err != nil && err != os.ErrExist {
return err
}

View File

@ -21,7 +21,7 @@ import (
)
func TryLockFile(path string, flag int, perm os.FileMode) (*LockedFile, error) {
if err := os.Chmod(path, syscall.DMEXCL|0600); err != nil {
if err := os.Chmod(path, syscall.DMEXCL|PrivateFileMode); err != nil {
return nil, err
}
f, err := os.Open(path, flag, perm)
@ -32,7 +32,7 @@ func TryLockFile(path string, flag int, perm os.FileMode) (*LockedFile, error) {
}
func LockFile(path string, flag int, perm os.FileMode) (*LockedFile, error) {
if err := os.Chmod(path, syscall.DMEXCL|0600); err != nil {
if err := os.Chmod(path, syscall.DMEXCL|PrivateFileMode); err != nil {
return nil, err
}
for {

View File

@ -35,13 +35,13 @@ func TestLockAndUnlock(t *testing.T) {
}()
// lock the file
l, err := LockFile(f.Name(), os.O_WRONLY, 0600)
l, err := LockFile(f.Name(), os.O_WRONLY, PrivateFileMode)
if err != nil {
t.Fatal(err)
}
// try lock a locked file
if _, err = TryLockFile(f.Name(), os.O_WRONLY, 0600); err != ErrLocked {
if _, err = TryLockFile(f.Name(), os.O_WRONLY, PrivateFileMode); err != ErrLocked {
t.Fatal(err)
}
@ -51,7 +51,7 @@ func TestLockAndUnlock(t *testing.T) {
}
// try lock the unlocked file
dupl, err := TryLockFile(f.Name(), os.O_WRONLY, 0600)
dupl, err := TryLockFile(f.Name(), os.O_WRONLY, PrivateFileMode)
if err != nil {
t.Errorf("err = %v, want %v", err, nil)
}
@ -59,7 +59,7 @@ func TestLockAndUnlock(t *testing.T) {
// blocking on locked file
locked := make(chan struct{}, 1)
go func() {
bl, blerr := LockFile(f.Name(), os.O_WRONLY, 0600)
bl, blerr := LockFile(f.Name(), os.O_WRONLY, PrivateFileMode)
if blerr != nil {
t.Fatal(blerr)
}

View File

@ -40,7 +40,7 @@ func PurgeFile(dirname string, suffix string, max uint, interval time.Duration,
sort.Strings(newfnames)
for len(newfnames) > int(max) {
f := path.Join(dirname, newfnames[0])
l, err := TryLockFile(f, os.O_WRONLY, 0600)
l, err := TryLockFile(f, os.O_WRONLY, PrivateFileMode)
if err != nil {
break
}

View File

@ -102,7 +102,7 @@ func TestPurgeFileHoldingLockFile(t *testing.T) {
// create a purge barrier at 5
p := path.Join(dir, fmt.Sprintf("%d.test", 5))
l, err := LockFile(p, os.O_WRONLY, 0600)
l, err := LockFile(p, os.O_WRONLY, PrivateFileMode)
if err != nil {
t.Fatal(err)
}

View File

@ -66,7 +66,7 @@ func (fp *filePipeline) Close() error {
func (fp *filePipeline) alloc() (f *fileutil.LockedFile, err error) {
// count % 2 so this file isn't the same as the one last published
fpath := path.Join(fp.dir, fmt.Sprintf("%d.tmp", fp.count%2))
if f, err = fileutil.LockFile(fpath, os.O_CREATE|os.O_WRONLY, 0600); err != nil {
if f, err = fileutil.LockFile(fpath, os.O_CREATE|os.O_WRONLY, fileutil.PrivateFileMode); err != nil {
return nil, err
}
if err = fileutil.Preallocate(f.File, fp.size, true); err != nil {

View File

@ -95,5 +95,5 @@ func openLast(dirpath string) (*fileutil.LockedFile, error) {
return nil, err
}
last := path.Join(dirpath, names[len(names)-1])
return fileutil.LockFile(last, os.O_RDWR, 0600)
return fileutil.LockFile(last, os.O_RDWR, fileutil.PrivateFileMode)
}

View File

@ -41,9 +41,6 @@ const (
crcType
snapshotType
// the owner can make/remove files inside the directory
privateDirMode = 0700
// the expected size of each wal segment file.
// the actual size might be bigger than it.
segmentSizeBytes = 64 * 1000 * 1000 // 64MB
@ -100,12 +97,12 @@ func Create(dirpath string, metadata []byte) (*WAL, error) {
return nil, err
}
}
if err := os.MkdirAll(tmpdirpath, privateDirMode); err != nil {
if err := os.MkdirAll(tmpdirpath, fileutil.PrivateDirMode); err != nil {
return nil, err
}
p := path.Join(tmpdirpath, walName(0, 0))
f, err := fileutil.LockFile(p, os.O_WRONLY|os.O_CREATE, 0600)
f, err := fileutil.LockFile(p, os.O_WRONLY|os.O_CREATE, fileutil.PrivateFileMode)
if err != nil {
return nil, err
}
@ -177,7 +174,7 @@ func openAtIndex(dirpath string, snap walpb.Snapshot, write bool) (*WAL, error)
for _, name := range names[nameIndex:] {
p := path.Join(dirpath, name)
if write {
l, err := fileutil.TryLockFile(p, os.O_RDWR, 0600)
l, err := fileutil.TryLockFile(p, os.O_RDWR, fileutil.PrivateFileMode)
if err != nil {
closeAll(rcs...)
return nil, err
@ -185,7 +182,7 @@ func openAtIndex(dirpath string, snap walpb.Snapshot, write bool) (*WAL, error)
ls = append(ls, l)
rcs = append(rcs, l)
} else {
rf, err := os.OpenFile(p, os.O_RDONLY, 0600)
rf, err := os.OpenFile(p, os.O_RDONLY, fileutil.PrivateFileMode)
if err != nil {
closeAll(rcs...)
return nil, err
@ -373,7 +370,7 @@ func (w *WAL) cut() error {
}
newTail.Close()
if newTail, err = fileutil.LockFile(fpath, os.O_WRONLY, 0600); err != nil {
if newTail, err = fileutil.LockFile(fpath, os.O_WRONLY, fileutil.PrivateFileMode); err != nil {
return err
}
if _, err = newTail.Seek(off, os.SEEK_SET); err != nil {

View File

@ -23,6 +23,7 @@ import (
"reflect"
"testing"
"github.com/coreos/etcd/pkg/fileutil"
"github.com/coreos/etcd/pkg/pbutil"
"github.com/coreos/etcd/raft/raftpb"
"github.com/coreos/etcd/wal/walpb"
@ -614,7 +615,7 @@ func TestRestartCreateWal(t *testing.T) {
if err = os.Mkdir(p+".tmp", 0755); err != nil {
t.Fatal(err)
}
if _, err = os.OpenFile(path.Join(tmpdir, "test"), os.O_WRONLY|os.O_CREATE, 0600); err != nil {
if _, err = os.OpenFile(path.Join(tmpdir, "test"), os.O_WRONLY|os.O_CREATE, fileutil.PrivateFileMode); err != nil {
t.Fatal(err)
}