mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
make necessary changes
This commit is contained in:
parent
79a89dcb82
commit
56ef6fbcae
@ -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"
|
||||
)
|
||||
|
@ -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)
|
@ -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 {
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user