Merge pull request #5572 from heyitsanthony/fallocate-eintr-fallback

pkg/fileutil: fall back to truncate() if fallocate is interrupted
This commit is contained in:
Anthony Romano 2016-06-06 15:24:42 -07:00
commit 7f461b2df9
2 changed files with 3 additions and 9 deletions

View File

@ -26,8 +26,9 @@ func preallocExtend(f *os.File, sizeInBytes int64) error {
err := syscall.Fallocate(int(f.Fd()), 0, 0, sizeInBytes)
if err != nil {
errno, ok := err.(syscall.Errno)
// treat not support as nil error
if ok && errno == syscall.ENOTSUP {
// not supported; fallback
// fallocate EINTRs frequently in some enviroments; fallback
if ok && (errno == syscall.ENOTSUP || errno == syscall.EINTR) {
return preallocExtendTrunc(f, sizeInBytes)
}
}

View File

@ -207,17 +207,10 @@ func openAtIndex(dirpath string, snap walpb.Snapshot, write bool) (*WAL, error)
// write reuses the file descriptors from read; don't close so
// WAL can append without dropping the file lock
w.readClose = nil
if _, _, err := parseWalName(path.Base(w.tail().Name())); err != nil {
closer()
return nil, err
}
// don't resize file for preallocation in case tail is corrupted
if err := fileutil.Preallocate(w.tail().File, segmentSizeBytes, false); err != nil {
closer()
plog.Errorf("failed to allocate space when creating new wal file (%v)", err)
return nil, err
}
w.fp = newFilePipeline(w.dir, segmentSizeBytes)
}