36533f7c3f
Fixes for new geth version
43 lines
920 B
Go
43 lines
920 B
Go
package flatfs
|
|
|
|
import (
|
|
"os"
|
|
"runtime"
|
|
)
|
|
|
|
// don't block more than 16 threads on sync opearation
|
|
// 16 should be able to sataurate most RAIDs
|
|
// in case of two used disks per write (RAID 1, 5) and queue depth of 2,
|
|
// 16 concurrent Sync calls should be able to saturate 16 HDDs RAID
|
|
//TODO: benchmark it out, maybe provide tweak parmeter
|
|
const SyncThreadsMax = 16
|
|
|
|
var syncSemaphore chan struct{} = make(chan struct{}, SyncThreadsMax)
|
|
|
|
func syncDir(dir string) error {
|
|
if runtime.GOOS == "windows" {
|
|
// dir sync on windows doesn't work: https://git.io/vPnCI
|
|
return nil
|
|
}
|
|
|
|
dirF, err := os.Open(dir)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer dirF.Close()
|
|
|
|
syncSemaphore <- struct{}{}
|
|
defer func() { <-syncSemaphore }()
|
|
|
|
if err := dirF.Sync(); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func syncFile(file *os.File) error {
|
|
syncSemaphore <- struct{}{}
|
|
defer func() { <-syncSemaphore }()
|
|
return file.Sync()
|
|
}
|