Do not use direction package on macos #57
5 changed files with 93 additions and 57 deletions
|
@ -1,8 +1,6 @@
|
||||||
package store
|
package store
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
|
||||||
"io"
|
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"path"
|
"path"
|
||||||
|
@ -13,8 +11,6 @@ import (
|
||||||
|
|
||||||
"github.com/lbryio/lbry.go/v2/extras/errors"
|
"github.com/lbryio/lbry.go/v2/extras/errors"
|
||||||
"github.com/lbryio/lbry.go/v2/stream"
|
"github.com/lbryio/lbry.go/v2/stream"
|
||||||
|
|
||||||
"github.com/brk0v/directio"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// DiskStore stores blobs on a local disk
|
// DiskStore stores blobs on a local disk
|
||||||
|
@ -76,40 +72,6 @@ func (d *DiskStore) Get(hash string) (stream.Blob, shared.BlobTrace, error) {
|
||||||
return blob, shared.NewBlobTrace(time.Since(start), d.Name()), nil
|
return blob, shared.NewBlobTrace(time.Since(start), d.Name()), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Put stores the blob on disk
|
|
||||||
func (d *DiskStore) Put(hash string, blob stream.Blob) error {
|
|
||||||
err := d.initOnce()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
err = d.ensureDirExists(d.dir(hash))
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// Open file with O_DIRECT
|
|
||||||
f, err := os.OpenFile(d.tmpPath(hash), openFileFlags, 0644)
|
|
||||||
if err != nil {
|
|
||||||
return errors.Err(err)
|
|
||||||
}
|
|
||||||
defer f.Close()
|
|
||||||
|
|
||||||
// Use directio writer
|
|
||||||
dio, err := directio.New(f)
|
|
||||||
if err != nil {
|
|
||||||
return errors.Err(err)
|
|
||||||
}
|
|
||||||
defer dio.Flush()
|
|
||||||
// Write the body to file
|
|
||||||
_, err = io.Copy(dio, bytes.NewReader(blob))
|
|
||||||
if err != nil {
|
|
||||||
return errors.Err(err)
|
|
||||||
}
|
|
||||||
err = os.Rename(d.tmpPath(hash), d.path(hash))
|
|
||||||
return errors.Err(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// PutSD stores the sd blob on the disk
|
// PutSD stores the sd blob on the disk
|
||||||
func (d *DiskStore) PutSD(hash string, blob stream.Blob) error {
|
func (d *DiskStore) PutSD(hash string, blob stream.Blob) error {
|
||||||
return d.Put(hash, blob)
|
return d.Put(hash, blob)
|
||||||
|
|
42
store/diskstore_put_darwin.go
Normal file
42
store/diskstore_put_darwin.go
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
//go:build darwin
|
||||||
|
// +build darwin
|
||||||
|
|
||||||
|
package store
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/lbryio/lbry.go/v2/extras/errors"
|
||||||
|
"github.com/lbryio/lbry.go/v2/stream"
|
||||||
|
)
|
||||||
|
|
||||||
|
var openFileFlags = os.O_WRONLY | os.O_CREATE
|
||||||
|
|
||||||
|
// Put stores the blob on disk
|
||||||
|
func (d *DiskStore) Put(hash string, blob stream.Blob) error {
|
||||||
|
err := d.initOnce()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = d.ensureDirExists(d.dir(hash))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Open file with O_DIRECT
|
||||||
|
f, err := os.OpenFile(d.tmpPath(hash), openFileFlags, 0644)
|
||||||
|
if err != nil {
|
||||||
|
return errors.Err(err)
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
_, err = io.Copy(f, bytes.NewReader(blob))
|
||||||
|
if err != nil {
|
||||||
|
return errors.Err(err)
|
||||||
|
}
|
||||||
|
err = os.Rename(d.tmpPath(hash), d.path(hash))
|
||||||
|
return errors.Err(err)
|
||||||
|
}
|
51
store/diskstore_put_linux.go
Normal file
51
store/diskstore_put_linux.go
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
//go:build linux
|
||||||
|
// +build linux
|
||||||
|
|
||||||
|
package store
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"io"
|
||||||
|
"os"
|
||||||
|
"syscall"
|
||||||
|
|
||||||
|
"github.com/lbryio/lbry.go/v2/extras/errors"
|
||||||
|
"github.com/lbryio/lbry.go/v2/stream"
|
||||||
|
|
||||||
|
"github.com/brk0v/directio"
|
||||||
|
)
|
||||||
|
|
||||||
|
var openFileFlags = os.O_WRONLY | os.O_CREATE | syscall.O_DIRECT
|
||||||
|
|
||||||
|
// Put stores the blob on disk
|
||||||
|
func (d *DiskStore) Put(hash string, blob stream.Blob) error {
|
||||||
|
err := d.initOnce()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
err = d.ensureDirExists(d.dir(hash))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Open file with O_DIRECT
|
||||||
|
f, err := os.OpenFile(d.tmpPath(hash), openFileFlags, 0644)
|
||||||
|
if err != nil {
|
||||||
|
return errors.Err(err)
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
dio, err := directio.New(f)
|
||||||
|
if err != nil {
|
||||||
|
return errors.Err(err)
|
||||||
|
}
|
||||||
|
defer dio.Flush()
|
||||||
|
|
||||||
|
_, err = io.Copy(dio, bytes.NewReader(blob))
|
||||||
|
if err != nil {
|
||||||
|
return errors.Err(err)
|
||||||
|
}
|
||||||
|
err = os.Rename(d.tmpPath(hash), d.path(hash))
|
||||||
|
return errors.Err(err)
|
||||||
|
}
|
|
@ -1,9 +0,0 @@
|
||||||
// +build darwin
|
|
||||||
|
|
||||||
package store
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
)
|
|
||||||
|
|
||||||
var openFileFlags = os.O_WRONLY | os.O_CREATE
|
|
|
@ -1,10 +0,0 @@
|
||||||
// +build linux
|
|
||||||
|
|
||||||
package store
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
"syscall"
|
|
||||||
)
|
|
||||||
|
|
||||||
var openFileFlags = os.O_WRONLY | os.O_CREATE | syscall.O_DIRECT
|
|
Loading…
Reference in a new issue