Skip to content
This repository has been archived by the owner on Mar 9, 2019. It is now read-only.

Commit

Permalink
Merge pull request #109 from benbjohnson/consolidate-file-descriptors
Browse files Browse the repository at this point in the history
Consolidate file and metafile descriptors.
  • Loading branch information
benbjohnson committed Apr 2, 2014
2 parents 76acd60 + 4ef1912 commit 1c3ebae
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 18 deletions.
23 changes: 6 additions & 17 deletions db.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ var (
type DB struct {
path string
file *os.File
metafile *os.File
data []byte
meta0 *meta
meta1 *meta
Expand All @@ -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)
}
}

Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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
}

Expand All @@ -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 {
Expand All @@ -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
}
Expand Down
5 changes: 4 additions & 1 deletion tx.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}

Expand Down

0 comments on commit 1c3ebae

Please sign in to comment.