Skip to content

Commit

Permalink
mvcc/backend: avoid unnecessary metrics update
Browse files Browse the repository at this point in the history
#9300

Signed-off-by: Gyuho Lee <gyuhox@gmail.com>
  • Loading branch information
gyuho committed Jul 3, 2018
1 parent 84d11a5 commit 78a13e6
Show file tree
Hide file tree
Showing 2 changed files with 1 addition and 28 deletions.
10 changes: 1 addition & 9 deletions mvcc/backend/backend.go
Original file line number Diff line number Diff line change
Expand Up @@ -225,15 +225,7 @@ func (b *backend) Commits() int64 {
}

func (b *backend) Defrag() error {
err := b.defrag()
if err != nil {
return err
}

// commit to update metadata like db.size
b.batchTx.Commit()

return nil
return b.defrag()
}

func (b *backend) defrag() error {
Expand Down
19 changes: 0 additions & 19 deletions mvcc/backend/batch_tx.go
Original file line number Diff line number Diff line change
Expand Up @@ -160,25 +160,6 @@ func (t *batchTx) commit(stop bool) {
// commit the last tx
if t.tx != nil {
if t.pending == 0 && !stop {
t.backend.mu.RLock()
defer t.backend.mu.RUnlock()

// batchTx.commit(true) calls *bolt.Tx.Commit, which
// initializes *bolt.Tx.db and *bolt.Tx.meta as nil,
// and subsequent *bolt.Tx.Size() call panics.
//
// This nil pointer reference panic happens when:
// 1. batchTx.commit(false) from newBatchTx
// 2. batchTx.commit(true) from stopping backend
// 3. batchTx.commit(false) from inflight mvcc Hash call
//
// Check if db is nil to prevent this panic
if t.tx.DB() != nil {
size := t.tx.Size()
db := t.tx.DB()
atomic.StoreInt64(&t.backend.size, size)
atomic.StoreInt64(&t.backend.sizeInUse, size-(int64(db.Stats().FreePageN)*int64(db.Info().PageSize)))
}
return
}
start := time.Now()
Expand Down

0 comments on commit 78a13e6

Please sign in to comment.