mirror of https://github.com/hak5/bolt.git
commit
f8365b732e
6
db.go
6
db.go
|
@ -556,8 +556,12 @@ func (db *DB) allocate(count int) (*page, error) {
|
|||
|
||||
// Stats represents statistics about the database.
|
||||
type Stats struct {
|
||||
// Freelist stats
|
||||
FreelistN int // total number of pages on the freelist
|
||||
FreelistAlloc int // total bytes used by the freelist and the pages on it
|
||||
|
||||
// Transaction stats
|
||||
TxN int // total number of completed read transactions
|
||||
TxN int // total number of started read transactions
|
||||
OpenTxN int // number of currently open read transactions
|
||||
|
||||
TxStats TxStats // global, ongoing stats.
|
||||
|
|
|
@ -253,7 +253,8 @@ func TestDB_Stats(t *testing.T) {
|
|||
return err
|
||||
})
|
||||
stats := db.Stats()
|
||||
assert.Equal(t, 2, stats.TxStats.PageCount)
|
||||
assert.Equal(t, 2, stats.TxStats.PageCount, "PageCount")
|
||||
assert.Equal(t, 2, stats.FreelistN, "FreelistN %d", db.freelist.count())
|
||||
})
|
||||
}
|
||||
|
||||
|
|
11
freelist.go
11
freelist.go
|
@ -22,7 +22,16 @@ type freelist struct {
|
|||
|
||||
// size returns the size of the page after serialization.
|
||||
func (f *freelist) size() int {
|
||||
return pageHeaderSize + (int(unsafe.Sizeof(pgid(0))) * len(f.all()))
|
||||
return pageHeaderSize + (int(unsafe.Sizeof(pgid(0))) * f.count())
|
||||
}
|
||||
|
||||
// count returns count of pages on the freelist
|
||||
func (f *freelist) count() int {
|
||||
var count = len(f.ids)
|
||||
for _, list := range f.pending {
|
||||
count += len(list)
|
||||
}
|
||||
return count
|
||||
}
|
||||
|
||||
// all returns a list of all free ids and all pending ids in one sorted list.
|
||||
|
|
6
tx.go
6
tx.go
|
@ -232,11 +232,17 @@ func (tx *Tx) rollback() {
|
|||
|
||||
func (tx *Tx) close() {
|
||||
if tx.writable {
|
||||
// Grab freelist stats.
|
||||
var freelistN = tx.db.freelist.count()
|
||||
var freelistAlloc = tx.db.freelist.size()
|
||||
|
||||
// Remove writer lock.
|
||||
tx.db.rwlock.Unlock()
|
||||
|
||||
// Merge statistics.
|
||||
tx.db.statlock.Lock()
|
||||
tx.db.stats.FreelistN = freelistN
|
||||
tx.db.stats.FreelistAlloc = freelistAlloc
|
||||
tx.db.stats.TxStats.add(&tx.stats)
|
||||
tx.db.statlock.Unlock()
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue