Browse Source

make necessary changes

Yicheng Qin 11 years ago
parent
commit
56ef6fbcae
4 changed files with 15 additions and 13 deletions
  1. 0 1
      etcd/etcd.go
  2. 8 9
      pkg/btrfs/btrfs.go
  3. 4 2
      pkg/btrfs/btrfs_test.go
  4. 3 1
      server/peer_server.go

+ 0 - 1
etcd/etcd.go

@@ -33,7 +33,6 @@ import (
 	ehttp "github.com/coreos/etcd/http"
 	"github.com/coreos/etcd/log"
 	"github.com/coreos/etcd/metrics"
-	"github.com/coreos/etcd/pkg/btrfs"
 	"github.com/coreos/etcd/server"
 	"github.com/coreos/etcd/store"
 )

+ 8 - 9
pkg/btrfs/fs.go → pkg/btrfs/btrfs.go

@@ -1,6 +1,7 @@
 package btrfs
 
 import (
+	"fmt"
 	"os"
 	"runtime"
 	"syscall"
@@ -39,33 +40,31 @@ func IsBtrfs(path string) bool {
 	return true
 }
 
-// SetNOCOWDir sets NOCOW flag for the directory
-func SetNOCOWDir(path string) error {
+// SetNOCOWFile sets NOCOW flag for file
+func SetNOCOWFile(path string) error {
 	file, err := os.Open(path)
 	if err != nil {
-		log.Warnf("Failed to open %v: %v", path, err)
 		return err
 	}
 	defer file.Close()
 
 	fileinfo, err := file.Stat()
 	if err != nil {
-		log.Warnf("Failed to stat %v: %v", path, err)
 		return err
 	}
-	if !fileinfo.IsDir() {
-		log.Infof("Skip NOCOW setting for non directory")
-		return nil
+	if fileinfo.IsDir() {
+		return fmt.Errorf("skip directory")
+	}
+	if fileinfo.Size() != 0 {
+		return fmt.Errorf("skip nonempty file")
 	}
 
 	var attr int
 	if _, _, errno := syscall.Syscall(syscall.SYS_IOCTL, file.Fd(), FS_IOC_GETFLAGS, uintptr(unsafe.Pointer(&attr))); errno != 0 {
-		log.Warnf("Failed to get file flags: %v", errno.Error())
 		return errno
 	}
 	attr |= FS_NOCOW_FL
 	if _, _, errno := syscall.Syscall(syscall.SYS_IOCTL, file.Fd(), FS_IOC_SETFLAGS, uintptr(unsafe.Pointer(&attr))); errno != 0 {
-		log.Warnf("Failed to set file flags: %v", errno.Error())
 		return errno
 	}
 	log.Infof("Set NOCOW to path %v succeeded", path)

+ 4 - 2
pkg/btrfs/fs_test.go → pkg/btrfs/btrfs_test.go

@@ -9,14 +9,16 @@ import (
 )
 
 func TestSetNOCOW(t *testing.T) {
-	name, err := ioutil.TempDir(".", "etcdtest")
+	f, err := ioutil.TempFile(".", "etcdtest")
 	if err != nil {
 		t.Fatal("Failed creating temp dir")
 	}
+	name := f.Name()
+	f.Close()
 	defer os.Remove(name)
 
 	if IsBtrfs(name) {
-		SetNOCOWDir(name)
+		SetNOCOWFile(name)
 		cmd := exec.Command("lsattr", name)
 		out, err := cmd.Output()
 		if err != nil {

+ 3 - 1
server/peer_server.go

@@ -294,7 +294,9 @@ func (s *PeerServer) Start(snapshot bool, discoverURL string, peers []string) er
 
 	// Set NOCOW for data directory in btrfs
 	if btrfs.IsBtrfs(s.raftServer.LogPath()) {
-		btrfs.SetNOCOW(s.raftServer.LogPath())
+		if err := btrfs.SetNOCOWFile(s.raftServer.LogPath()); err != nil {
+			log.Warnf("Failed setting NOCOW: %v", err)
+		}
 	}
 
 	s.findCluster(discoverURL, peers)