Skip to content

Commit

Permalink
Add comments
Browse files Browse the repository at this point in the history
  • Loading branch information
evgeniy-scherbina committed Sep 1, 2023
1 parent 71619b2 commit 0608d12
Showing 1 changed file with 18 additions and 7 deletions.
25 changes: 18 additions & 7 deletions cmd/kava/opendb/opendb_rocksdb.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,9 @@ const (

defaultColumnFamilyName = "default"

enableRocksdbMetricsOptName = "enable_rocksdb_metrics"
enableMetricsOptName = "enable_rocksdb_metrics"
reportMetricsIntervalSecsOptName = "report_rocksdb_metrics_interval_secs"
defaultReportMetricsIntervalSecs = 15

maxOpenFilesDBOptName = "max_open_files"
maxFileOpeningThreadsDBOptName = "max_file_opening_threads"
Expand Down Expand Up @@ -71,9 +73,8 @@ 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, enableMetrics)
return newRocksDBWithOptions("application", dir, dbOpts, cfOpts, appOpts)
}

// loadLatestOptions loads and returns database and column family options
Expand Down Expand Up @@ -132,14 +133,21 @@ 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, enableMetrics bool) (*dbm.RocksDB, error) {
func newRocksDBWithOptions(name string, dir string, dbOpts, cfOpts *grocksdb.Options, appOpts types.AppOptions) (*dbm.RocksDB, error) {
enableMetrics := cast.ToBool(appOpts.Get(enableMetricsOptName))
reportMetricsIntervalSecs := cast.ToInt64(appOpts.Get(reportMetricsIntervalSecsOptName))
if reportMetricsIntervalSecs == 0 {
reportMetricsIntervalSecs = defaultReportMetricsIntervalSecs
}

dbPath := filepath.Join(dir, name+".db")

// Ensure path exists
if err := os.MkdirAll(dbPath, 0755); err != nil {
return nil, fmt.Errorf("failed to create db path: %w", err)
}

// EnableStatistics adds overhead so shouldn't be enabled in production
if enableMetrics {
dbOpts.EnableStatistics()
}
Expand All @@ -151,7 +159,7 @@ func newRocksDBWithOptions(name string, dir string, dbOpts, cfOpts *grocksdb.Opt

if enableMetrics {
registerMetrics()
go reportMetrics(db)
go reportMetrics(db, time.Second*time.Duration(reportMetricsIntervalSecs))
}

ro := grocksdb.NewDefaultReadOptions()
Expand Down Expand Up @@ -183,8 +191,10 @@ func newDefaultOptions() *grocksdb.Options {
return opts
}

func reportMetrics(db *grocksdb.DB) {
ticker := time.NewTicker(time.Second * 15)
// reportMetrics periodically requests stats from rocksdb and reports to prometheus
// NOTE: should be launched as a goroutine
func reportMetrics(db *grocksdb.DB, interval time.Duration) {
ticker := time.NewTicker(interval)
for {
select {
case <-ticker.C:
Expand All @@ -198,6 +208,7 @@ func reportMetrics(db *grocksdb.DB) {
}
}

// getPropsAndStats gets statistics from rocksdb
func getPropsAndStats(db *grocksdb.DB) (*properties, *stats, error) {
propsLoader := newPropsLoader(db)
props, err := propsLoader.load()
Expand Down

0 comments on commit 0608d12

Please sign in to comment.