diff --git a/CHANGELOG_PENDING.md b/CHANGELOG_PENDING.md index dd6469862..bedd771ef 100644 --- a/CHANGELOG_PENDING.md +++ b/CHANGELOG_PENDING.md @@ -26,6 +26,7 @@ FEATURES: * \#2310 Mempool is now aware of the MaxGas requirement IMPROVEMENTS: +- [libs/db] \#2371 Output error instead of panic when the given db_backend is not initialised (@bradyjoestar) - [mempool] [\#2399](https://github.com/tendermint/tendermint/issues/2399) Make mempool cache a proper LRU (@bradyjoestar) - [types] add Address to GenesisValidator [\#1714](https://github.com/tendermint/tendermint/issues/1714) - [metrics] `consensus.block_interval_metrics` is now gauge, not histogram (you will be able to see spikes, if any) diff --git a/libs/db/db.go b/libs/db/db.go index 789bbfbff..8a3975a84 100644 --- a/libs/db/db.go +++ b/libs/db/db.go @@ -30,19 +30,23 @@ func registerDBCreator(backend DBBackendType, creator dbCreator, force bool) { backends[backend] = creator } +// NewDB creates a new database of type backend with the given name. +// NOTE: function panics if: +// - backend is unknown (not registered) +// - creator function, provided during registration, returns error func NewDB(name string, backend DBBackendType, dir string) DB { dbCreator, ok := backends[backend] - if !ok { - var keys []string - for k, _ := range backends { - keys = append(keys, string(k)) + keys := make([]string, len(backends)) + i := 0 + for k := range backends { + keys[i] = string(k) + i++ } panic(fmt.Sprintf("Unknown db_backend %s, expected either %s", backend, strings.Join(keys, " or "))) } db, err := dbCreator(name, dir) - if err != nil { panic(fmt.Sprintf("Error initializing DB: %v", err)) }