From 528bc9aaf8f248e2e32303c8cd1961d8f5c0e26e Mon Sep 17 00:00:00 2001 From: marbar3778 Date: Wed, 11 Sep 2024 11:27:05 +0200 Subject: [PATCH 1/4] support rocksdb --- store/v2/root/factory.go | 8 ++- store/v2/storage/rocksdb/db_noflag.go | 73 +++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 store/v2/storage/rocksdb/db_noflag.go diff --git a/store/v2/root/factory.go b/store/v2/root/factory.go index b10c87770aee..e533e49af75d 100644 --- a/store/v2/root/factory.go +++ b/store/v2/root/factory.go @@ -16,6 +16,7 @@ import ( "cosmossdk.io/store/v2/pruning" "cosmossdk.io/store/v2/storage" "cosmossdk.io/store/v2/storage/pebbledb" + "cosmossdk.io/store/v2/storage/rocksdb" "cosmossdk.io/store/v2/storage/sqlite" ) @@ -101,8 +102,11 @@ func CreateRootStore(opts *FactoryOptions) (store.RootStore, error) { } ssDb, err = pebbledb.New(dir) case SSTypeRocks: - // TODO: rocksdb requires build tags so is not supported here by default - return nil, errors.New("rocksdb not supported") + dir := fmt.Sprintf("%s/data/ss/rocksdb", opts.RootDir) + if err = ensureDir(dir); err != nil { + return nil, err + } + ssDb, err = rocksdb.New(dir) } if err != nil { return nil, err diff --git a/store/v2/storage/rocksdb/db_noflag.go b/store/v2/storage/rocksdb/db_noflag.go new file mode 100644 index 000000000000..f6002cde336f --- /dev/null +++ b/store/v2/storage/rocksdb/db_noflag.go @@ -0,0 +1,73 @@ +//go:build !rocksdb +// +build !rocksdb + +package rocksdb + +import ( + corestore "cosmossdk.io/core/store" + "cosmossdk.io/store/v2" + "cosmossdk.io/store/v2/storage" +) + +const ( + TimestampSize = 8 + + StorePrefixTpl = "s/k:%s/" + latestVersionKey = "s/latest" +) + +var ( + _ storage.Database = (*Database)(nil) + _ store.UpgradableDatabase = (*Database)(nil) +) + +type Database struct{} + +func New(dataDir string) (*Database, error) { + return &Database{}, nil +} + +func (db *Database) Close() error { + return nil +} + +func (db *Database) NewBatch(version uint64) (store.Batch, error) { + panic("rocksdb requires a build flag") +} + +func (db *Database) SetLatestVersion(version uint64) error { + panic("rocksdb requires a build flag") +} + +func (db *Database) GetLatestVersion() (uint64, error) { + panic("rocksdb requires a build flag") +} + +func (db *Database) Has(storeKey []byte, version uint64, key []byte) (bool, error) { + panic("rocksdb requires a build flag") +} + +func (db *Database) Get(storeKey []byte, version uint64, key []byte) ([]byte, error) { + panic("rocksdb requires a build flag") +} + +// Prune prunes all versions up to and including the provided version argument. +// Internally, this performs a manual compaction, the data with older timestamp +// will be GCed by compaction. +func (db *Database) Prune(version uint64) error { + panic("rocksdb requires a build flag") +} + +func (db *Database) Iterator(storeKey []byte, version uint64, start, end []byte) (corestore.Iterator, error) { + panic("rocksdb requires a build flag") +} + +func (db *Database) ReverseIterator(storeKey []byte, version uint64, start, end []byte) (corestore.Iterator, error) { + panic("rocksdb requires a build flag") +} + +// PruneStoreKeys will do nothing for RocksDB, it will be pruned by compaction +// when the version is pruned +func (db *Database) PruneStoreKeys(_ []string, _ uint64) error { + return nil +} From 5d648d6589feeb9d2488ec5ba7953d251e1513ec Mon Sep 17 00:00:00 2001 From: marbar3778 Date: Wed, 11 Sep 2024 11:28:43 +0200 Subject: [PATCH 2/4] remove extra consts --- store/v2/storage/rocksdb/db_noflag.go | 7 ------- 1 file changed, 7 deletions(-) diff --git a/store/v2/storage/rocksdb/db_noflag.go b/store/v2/storage/rocksdb/db_noflag.go index f6002cde336f..def31e437a44 100644 --- a/store/v2/storage/rocksdb/db_noflag.go +++ b/store/v2/storage/rocksdb/db_noflag.go @@ -9,13 +9,6 @@ import ( "cosmossdk.io/store/v2/storage" ) -const ( - TimestampSize = 8 - - StorePrefixTpl = "s/k:%s/" - latestVersionKey = "s/latest" -) - var ( _ storage.Database = (*Database)(nil) _ store.UpgradableDatabase = (*Database)(nil) From 13dd16f393840522b3251f20501f238cb72a0611 Mon Sep 17 00:00:00 2001 From: marbar3778 Date: Wed, 11 Sep 2024 12:44:24 +0200 Subject: [PATCH 3/4] add comment --- store/v2/root/factory.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/store/v2/root/factory.go b/store/v2/root/factory.go index 90498a5d2f0b..4dfa01966314 100644 --- a/store/v2/root/factory.go +++ b/store/v2/root/factory.go @@ -35,7 +35,7 @@ const ( // app.toml config options type Options struct { - SSType SSType `mapstructure:"ss-type" toml:"ss-type" comment:"SState storage database type. Currently we support: \"sqlite\" and \"pebble\""` + SSType SSType `mapstructure:"ss-type" toml:"ss-type" comment:"SState storage database type. Currently we support: \"sqlite\", \"pebble\" and \"rocksdb\""` SCType SCType `mapstructure:"sc-type" toml:"sc-type" comment:"State commitment database type. Currently we support: \"iavl\" and \"iavl-v2\""` SSPruningOption *store.PruningOption `mapstructure:"ss-pruning-option" toml:"ss-pruning-option" comment:"Pruning options for state storage"` SCPruningOption *store.PruningOption `mapstructure:"sc-pruning-option" toml:"sc-pruning-option" comment:"Pruning options for state commitment"` From a6ef793e6ce63cf908f14e2fade35acb220c6be1 Mon Sep 17 00:00:00 2001 From: marbar3778 Date: Wed, 11 Sep 2024 12:54:34 +0200 Subject: [PATCH 4/4] update --- server/v2/testdata/app.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/v2/testdata/app.toml b/server/v2/testdata/app.toml index 3581b2ae7e63..094ac068d94a 100644 --- a/server/v2/testdata/app.toml +++ b/server/v2/testdata/app.toml @@ -25,7 +25,7 @@ minimum-gas-prices = '0stake' app-db-backend = 'goleveldb' [store.options] -# SState storage database type. Currently we support: "sqlite" and "pebble" +# SState storage database type. Currently we support: "sqlite", "pebble" and "rocksdb" ss-type = 'sqlite' # State commitment database type. Currently we support: "iavl" and "iavl-v2" sc-type = 'iavl'