-
Notifications
You must be signed in to change notification settings - Fork 372
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
* Make rocksdb configurable (#1658) * Make rocksdb configurable * Make sure rocksdb tests are running in CI * Updating ci-rocksdb-build workflow * Remove test.sh * Update tm-db dependency (cherry picked from commit 90fbe1a) * Rocksdb Metrics (#1692) * Rocksdb Metrics * Add rocksdb namespace for options * Adding help to the metrics * CR's fixes * CR's fixes * CR's fixes * Increase number of options to configure rocksdb (#1696) --------- Co-authored-by: Evgeniy Scherbina <[email protected]>
- Loading branch information
1 parent
e7e2cbf
commit 44f48f0
Showing
16 changed files
with
1,827 additions
and
16 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,166 @@ | ||
//go:build rocksdb | ||
// +build rocksdb | ||
|
||
package opendb | ||
|
||
import ( | ||
"github.com/go-kit/kit/metrics" | ||
"github.com/go-kit/kit/metrics/prometheus" | ||
stdprometheus "github.com/prometheus/client_golang/prometheus" | ||
) | ||
|
||
// rocksdbMetrics will be initialized in registerMetrics() if enableRocksdbMetrics flag set to true | ||
var rocksdbMetrics *Metrics | ||
|
||
// Metrics contains all rocksdb metrics which will be reported to prometheus | ||
type Metrics struct { | ||
// Keys | ||
NumberKeysWritten metrics.Gauge | ||
NumberKeysRead metrics.Gauge | ||
NumberKeysUpdated metrics.Gauge | ||
EstimateNumKeys metrics.Gauge | ||
|
||
// Files | ||
NumberFileOpens metrics.Gauge | ||
NumberFileErrors metrics.Gauge | ||
|
||
// Memory | ||
BlockCacheUsage metrics.Gauge | ||
EstimateTableReadersMem metrics.Gauge | ||
CurSizeAllMemTables metrics.Gauge | ||
BlockCachePinnedUsage metrics.Gauge | ||
|
||
// Cache | ||
BlockCacheMiss metrics.Gauge | ||
BlockCacheHit metrics.Gauge | ||
BlockCacheAdd metrics.Gauge | ||
BlockCacheAddFailures metrics.Gauge | ||
} | ||
|
||
// registerMetrics registers metrics in prometheus and initializes rocksdbMetrics variable | ||
func registerMetrics() { | ||
if rocksdbMetrics != nil { | ||
// metrics already registered | ||
return | ||
} | ||
|
||
labels := make([]string, 0) | ||
rocksdbMetrics = &Metrics{ | ||
// Keys | ||
NumberKeysWritten: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{ | ||
Namespace: "rocksdb", | ||
Subsystem: "key", | ||
Name: "number_keys_written", | ||
Help: "", | ||
}, labels), | ||
NumberKeysRead: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{ | ||
Namespace: "rocksdb", | ||
Subsystem: "key", | ||
Name: "number_keys_read", | ||
Help: "", | ||
}, labels), | ||
NumberKeysUpdated: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{ | ||
Namespace: "rocksdb", | ||
Subsystem: "key", | ||
Name: "number_keys_updated", | ||
Help: "", | ||
}, labels), | ||
EstimateNumKeys: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{ | ||
Namespace: "rocksdb", | ||
Subsystem: "key", | ||
Name: "estimate_num_keys", | ||
Help: "estimated number of total keys in the active and unflushed immutable memtables and storage", | ||
}, labels), | ||
|
||
// Files | ||
NumberFileOpens: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{ | ||
Namespace: "rocksdb", | ||
Subsystem: "file", | ||
Name: "number_file_opens", | ||
Help: "", | ||
}, labels), | ||
NumberFileErrors: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{ | ||
Namespace: "rocksdb", | ||
Subsystem: "file", | ||
Name: "number_file_errors", | ||
Help: "", | ||
}, labels), | ||
|
||
// Memory | ||
BlockCacheUsage: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{ | ||
Namespace: "rocksdb", | ||
Subsystem: "memory", | ||
Name: "block_cache_usage", | ||
Help: "memory size for the entries residing in block cache", | ||
}, labels), | ||
EstimateTableReadersMem: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{ | ||
Namespace: "rocksdb", | ||
Subsystem: "memory", | ||
Name: "estimate_table_readers_mem", | ||
Help: "estimated memory used for reading SST tables, excluding memory used in block cache (e.g., filter and index blocks)", | ||
}, labels), | ||
CurSizeAllMemTables: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{ | ||
Namespace: "rocksdb", | ||
Subsystem: "memory", | ||
Name: "cur_size_all_mem_tables", | ||
Help: "approximate size of active and unflushed immutable memtables (bytes)", | ||
}, labels), | ||
BlockCachePinnedUsage: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{ | ||
Namespace: "rocksdb", | ||
Subsystem: "memory", | ||
Name: "block_cache_pinned_usage", | ||
Help: "returns the memory size for the entries being pinned", | ||
}, labels), | ||
|
||
// Cache | ||
BlockCacheMiss: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{ | ||
Namespace: "rocksdb", | ||
Subsystem: "cache", | ||
Name: "block_cache_miss", | ||
Help: "block_cache_miss == block_cache_index_miss + block_cache_filter_miss + block_cache_data_miss", | ||
}, labels), | ||
BlockCacheHit: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{ | ||
Namespace: "rocksdb", | ||
Subsystem: "cache", | ||
Name: "block_cache_hit", | ||
Help: "block_cache_hit == block_cache_index_hit + block_cache_filter_hit + block_cache_data_hit", | ||
}, labels), | ||
BlockCacheAdd: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{ | ||
Namespace: "rocksdb", | ||
Subsystem: "cache", | ||
Name: "block_cache_add", | ||
Help: "number of blocks added to block cache", | ||
}, labels), | ||
BlockCacheAddFailures: prometheus.NewGaugeFrom(stdprometheus.GaugeOpts{ | ||
Namespace: "rocksdb", | ||
Subsystem: "cache", | ||
Name: "block_cache_add_failures", | ||
Help: "number of failures when adding blocks to block cache", | ||
}, labels), | ||
} | ||
} | ||
|
||
// report reports metrics to prometheus based on rocksdb props and stats | ||
func (m *Metrics) report(props *properties, stats *stats) { | ||
// Keys | ||
m.NumberKeysWritten.Set(float64(stats.NumberKeysWritten)) | ||
m.NumberKeysRead.Set(float64(stats.NumberKeysRead)) | ||
m.NumberKeysUpdated.Set(float64(stats.NumberKeysUpdated)) | ||
m.EstimateNumKeys.Set(float64(props.EstimateNumKeys)) | ||
|
||
// Files | ||
m.NumberFileOpens.Set(float64(stats.NumberFileOpens)) | ||
m.NumberFileErrors.Set(float64(stats.NumberFileErrors)) | ||
|
||
// Memory | ||
m.BlockCacheUsage.Set(float64(props.BlockCacheUsage)) | ||
m.EstimateTableReadersMem.Set(float64(props.EstimateTableReadersMem)) | ||
m.CurSizeAllMemTables.Set(float64(props.CurSizeAllMemTables)) | ||
m.BlockCachePinnedUsage.Set(float64(props.BlockCachePinnedUsage)) | ||
|
||
// Cache | ||
m.BlockCacheMiss.Set(float64(stats.BlockCacheMiss)) | ||
m.BlockCacheHit.Set(float64(stats.BlockCacheHit)) | ||
m.BlockCacheAdd.Set(float64(stats.BlockCacheAdd)) | ||
m.BlockCacheAddFailures.Set(float64(stats.BlockCacheAddFailures)) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
//go:build !rocksdb | ||
// +build !rocksdb | ||
|
||
package opendb | ||
|
||
import ( | ||
"path/filepath" | ||
|
||
"github.com/cosmos/cosmos-sdk/server/types" | ||
dbm "github.com/tendermint/tm-db" | ||
) | ||
|
||
// OpenDB is a copy of default DBOpener function used by ethermint, see for details: | ||
// https://github.com/evmos/ethermint/blob/07cf2bd2b1ce9bdb2e44ec42a39e7239292a14af/server/start.go#L647 | ||
func OpenDB(_ types.AppOptions, home string, backendType dbm.BackendType) (dbm.DB, error) { | ||
dataDir := filepath.Join(home, "data") | ||
return dbm.NewDB("application", backendType, dataDir) | ||
} |
Oops, something went wrong.