diff --git a/cmd/kava/opendb/opendb_rocksdb.go b/cmd/kava/opendb/opendb_rocksdb.go index 763eea6911..2478f95a3f 100644 --- a/cmd/kava/opendb/opendb_rocksdb.go +++ b/cmd/kava/opendb/opendb_rocksdb.go @@ -23,7 +23,6 @@ package opendb import ( "errors" "fmt" - "log" "os" "path/filepath" "runtime" @@ -44,6 +43,8 @@ const ( defaultColumnFamilyName = "default" + enableRocksdbMetricsOptName = "enable_rocksdb_metrics" + maxOpenFilesDBOptName = "max_open_files" maxFileOpeningThreadsDBOptName = "max_file_opening_threads" @@ -70,8 +71,9 @@ func openRocksdb(dir string, appOpts types.AppOptions) (dbm.DB, error) { // customize rocksdb options dbOpts = overrideDBOpts(dbOpts, appOpts) cfOpts = overrideCFOpts(cfOpts, appOpts) + enableMetrics := cast.ToBool(appOpts.Get(enableRocksdbMetricsOptName)) - return newRocksDBWithOptions("application", dir, dbOpts, cfOpts) + return newRocksDBWithOptions("application", dir, dbOpts, cfOpts, enableMetrics) } // loadLatestOptions loads and returns database and column family options @@ -130,7 +132,7 @@ func overrideCFOpts(cfOpts *grocksdb.Options, appOpts types.AppOptions) *grocksd // newRocksDBWithOptions opens rocksdb with provided database and column family options // newRocksDBWithOptions expects that db has only one column family named default -func newRocksDBWithOptions(name string, dir string, dbOpts, cfOpts *grocksdb.Options) (*dbm.RocksDB, error) { +func newRocksDBWithOptions(name string, dir string, dbOpts, cfOpts *grocksdb.Options, enableMetrics bool) (*dbm.RocksDB, error) { dbPath := filepath.Join(dir, name+".db") // Ensure path exists @@ -139,29 +141,29 @@ func newRocksDBWithOptions(name string, dir string, dbOpts, cfOpts *grocksdb.Opt } dbOpts.EnableStatistics() - //cfOpts.EnableStatistics() db, _, err := grocksdb.OpenDbColumnFamilies(dbOpts, dbPath, []string{defaultColumnFamilyName}, []*grocksdb.Options{cfOpts}) if err != nil { return nil, err } - registerMetrics() - - go func() { - ticker := time.NewTicker(time.Second * 15) - for { - select { - case <-ticker.C: - props, stats, err := getPropsAndStats(db) - if err != nil { - log.Fatal(err) - continue - } + if enableMetrics { + registerMetrics() + + go func() { + ticker := time.NewTicker(time.Second * 15) + for { + select { + case <-ticker.C: + props, stats, err := getPropsAndStats(db) + if err != nil { + continue + } - rocksdbMetrics.send(props, stats) + rocksdbMetrics.send(props, stats) + } } - } - }() + }() + } ro := grocksdb.NewDefaultReadOptions() wo := grocksdb.NewDefaultWriteOptions() diff --git a/cmd/kava/opendb/opendb_rocksdb_test.go b/cmd/kava/opendb/opendb_rocksdb_test.go index a7eafa92d6..133e179afe 100644 --- a/cmd/kava/opendb/opendb_rocksdb_test.go +++ b/cmd/kava/opendb/opendb_rocksdb_test.go @@ -186,7 +186,7 @@ func TestLoadLatestOptions(t *testing.T) { require.NoError(t, err) }() - db, err := newRocksDBWithOptions(name, dir, tc.dbOpts, tc.cfOpts) + db, err := newRocksDBWithOptions(name, dir, tc.dbOpts, tc.cfOpts, true) require.NoError(t, err) require.NoError(t, db.Close()) @@ -337,7 +337,7 @@ func TestNewRocksDBWithOptions(t *testing.T) { cfOpts := newDefaultOptions() cfOpts.SetWriteBufferSize(999_999) - db, err := newRocksDBWithOptions(name, dir, dbOpts, cfOpts) + db, err := newRocksDBWithOptions(name, dir, dbOpts, cfOpts, true) require.NoError(t, err) require.NoError(t, db.Close())