Skip to content

Commit

Permalink
libs/db: Add cleveldb.Stats() (#3379)
Browse files Browse the repository at this point in the history
Fixes: #3378

* Add stats to cleveldb implementation

* update changelog

* remote TODO

also
- sort keys
- preallocate memory

* fix const initializer []string literal is not a constant

* add test
  • Loading branch information
jackzampolin authored and melekes committed Mar 5, 2019
1 parent 52771e1 commit 8c9df30
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 3 deletions.
9 changes: 9 additions & 0 deletions CHANGELOG_PENDING.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,15 @@ Special thanks to external contributors on this release:

### IMPROVEMENTS:
- [libs/common] \#3238 exit with zero (0) code upon receiving SIGTERM/SIGINT
- [libs/db] \#3378 CLevelDB#Stats now returns the following properties:
- leveldb.num-files-at-level{n}
- leveldb.stats
- leveldb.sstables
- leveldb.blockpool
- leveldb.cachedblock
- leveldb.openedtables
- leveldb.alivesnaps
- leveldb.aliveiters

### BUG FIXES:

Expand Down
14 changes: 11 additions & 3 deletions libs/db/c_level_db.go
Original file line number Diff line number Diff line change
Expand Up @@ -128,10 +128,18 @@ func (db *CLevelDB) Print() {

// Implements DB.
func (db *CLevelDB) Stats() map[string]string {
// TODO: Find the available properties for the C LevelDB implementation
keys := []string{}
keys := []string{
"leveldb.aliveiters",
"leveldb.alivesnaps",
"leveldb.blockpool",
"leveldb.cachedblock",
"leveldb.num-files-at-level{n}",
"leveldb.openedtables",
"leveldb.sstables",
"leveldb.stats",
}

stats := make(map[string]string)
stats := make(map[string]string, len(keys))
for _, key := range keys {
str := db.db.PropertyValue(key)
stats[key] = str
Expand Down
9 changes: 9 additions & 0 deletions libs/db/c_level_db_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,3 +99,12 @@ func TestCLevelDBBackend(t *testing.T) {
_, ok := db.(*CLevelDB)
assert.True(t, ok)
}

func TestCLevelDBStats(t *testing.T) {
name := fmt.Sprintf("test_%x", cmn.RandStr(12))
dir := os.TempDir()
db := NewDB(name, LevelDBBackend, dir)
defer cleanupDBDir(dir, name)

assert.NotEmpty(t, db.Stats())
}

0 comments on commit 8c9df30

Please sign in to comment.