diff options
author | Ben Johnson <benbjohnson@yahoo.com> | 2014-04-02 13:58:03 -0600 |
---|---|---|
committer | Ben Johnson <benbjohnson@yahoo.com> | 2014-04-02 13:58:03 -0600 |
commit | 1c3ebaebae8429f2f74beeb3e6ae3403d5474f68 (patch) | |
tree | 2fedd17fc85a27e2d5d666b54e963945c2c206a9 | |
parent | README (diff) | |
parent | Consolidate file and metafile descriptors. (diff) | |
download | dedo-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.go | 23 | ||||
-rw-r--r-- | tx.go | 5 |
2 files changed, 10 insertions, 18 deletions
@@ -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 } @@ -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 } |