aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Johnson <benbjohnson@yahoo.com>2014-04-02 13:58:03 -0600
committerBen Johnson <benbjohnson@yahoo.com>2014-04-02 13:58:03 -0600
commit1c3ebaebae8429f2f74beeb3e6ae3403d5474f68 (patch)
tree2fedd17fc85a27e2d5d666b54e963945c2c206a9
parentREADME (diff)
parentConsolidate file and metafile descriptors. (diff)
downloaddedo-1c3ebaebae8429f2f74beeb3e6ae3403d5474f68.tar.gz
dedo-1c3ebaebae8429f2f74beeb3e6ae3403d5474f68.tar.xz
Merge pull request #109 from benbjohnson/consolidate-file-descriptors
Consolidate file and metafile descriptors.
-rw-r--r--db.go23
-rw-r--r--tx.go5
2 files changed, 10 insertions, 18 deletions
diff --git a/db.go b/db.go
index 72c774c..5cdad81 100644
--- a/db.go
+++ b/db.go
@@ -32,7 +32,6 @@ var (
type DB struct {
path string
file *os.File
- metafile *os.File
data []byte
meta0 *meta
meta1 *meta
@@ -47,8 +46,7 @@ type DB struct {
mmaplock sync.RWMutex // Protects mmap access during remapping.
ops struct {
- writeAt func(b []byte, off int64) (n int, err error)
- metaWriteAt func(b []byte, off int64) (n int, err error)
+ writeAt func(b []byte, off int64) (n int, err error)
}
}
@@ -80,14 +78,9 @@ func Open(path string, mode os.FileMode) (*DB, error) {
_ = db.close()
return nil, err
}
- if db.metafile, err = os.OpenFile(db.path, os.O_RDWR|os.O_SYNC, mode); err != nil {
- _ = db.close()
- return nil, err
- }
// Default values for test hooks
db.ops.writeAt = db.file.WriteAt
- db.ops.metaWriteAt = db.metafile.WriteAt
// Initialize the database if it doesn't exist.
if info, err := db.file.Stat(); err != nil {
@@ -240,7 +233,10 @@ func (db *DB) init() error {
p.count = 0
// Write the buffer to our data file.
- if _, err := db.ops.metaWriteAt(buf, 0); err != nil {
+ if _, err := db.ops.writeAt(buf, 0); err != nil {
+ return err
+ }
+ if err := fdatasync(db.file); err != nil {
return err
}
@@ -263,7 +259,6 @@ func (db *DB) close() error {
// Clear ops.
db.ops.writeAt = nil
- db.ops.metaWriteAt = nil
// Close the mmap.
if err := db.munmap(); err != nil {
@@ -273,16 +268,10 @@ func (db *DB) close() error {
// Close file handles.
if db.file != nil {
if err := db.file.Close(); err != nil {
- return fmt.Errorf("db file close error: %s", err)
+ return fmt.Errorf("db file close: %s", err)
}
db.file = nil
}
- if db.metafile != nil {
- if err := db.metafile.Close(); err != nil {
- return fmt.Errorf("db metafile close error: %s", err)
- }
- db.metafile = nil
- }
return nil
}
diff --git a/tx.go b/tx.go
index 25cc829..788eab8 100644
--- a/tx.go
+++ b/tx.go
@@ -381,7 +381,10 @@ func (t *Tx) writeMeta() error {
t.meta.write(p)
// Write the meta page to file.
- if _, err := t.db.ops.metaWriteAt(buf, int64(p.id)*int64(t.db.pageSize)); err != nil {
+ if _, err := t.db.ops.writeAt(buf, int64(p.id)*int64(t.db.pageSize)); err != nil {
+ return err
+ }
+ if err := fdatasync(t.db.file); err != nil {
return err
}