diff --git a/CHANGELOG.md b/CHANGELOG.md index 640668047c..cac7deb733 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ - [#1292](https://github.com/crypto-org-chain/cronos/pull/1292) memiavl cancel background snapshot rewriting when graceful shutdown. - [#1294](https://github.com/crypto-org-chain/cronos/pull/1294) Update ethermint to fix and improve of debug_traceCall and eth_feeHistory. - [#1302](https://github.com/crypto-org-chain/cronos/pull/1302) Fix concurrent map access in rootmulti store. +- [#1304](https://github.com/crypto-org-chain/cronos/pull/1304) Write versiondb with fsync, and relax the version requirement on startup. *January 5, 2024* diff --git a/app/app.go b/app/app.go index 18d7f49672..f89989d42b 100644 --- a/app/app.go +++ b/app/app.go @@ -900,8 +900,9 @@ func New( if qms != nil { v1 := qms.LatestVersion() v2 := app.LastBlockHeight() - if v1 > 0 && v1 != v2 { - tmos.Exit(fmt.Sprintf("versiondb lastest version %d don't match iavl latest version %d", v1, v2)) + if v1 > 0 && v1 < v2 { + // try to prevent gap being created in versiondb + tmos.Exit(fmt.Sprintf("versiondb version %d lag behind iavl version %d", v1, v2)) } } } diff --git a/versiondb/tsrocksdb/store.go b/versiondb/tsrocksdb/store.go index ebecd19717..b927ea36b9 100644 --- a/versiondb/tsrocksdb/store.go +++ b/versiondb/tsrocksdb/store.go @@ -26,10 +26,15 @@ var ( _ versiondb.VersionStore = Store{} - defaultWriteOpts = grocksdb.NewDefaultWriteOptions() - defaultReadOpts = grocksdb.NewDefaultReadOptions() + defaultWriteOpts = grocksdb.NewDefaultWriteOptions() + defaultSyncWriteOpts = grocksdb.NewDefaultWriteOptions() + defaultReadOpts = grocksdb.NewDefaultReadOptions() ) +func init() { + defaultSyncWriteOpts.SetSync(true) +} + type Store struct { db *grocksdb.DB cfHandle *grocksdb.ColumnFamilyHandle @@ -77,7 +82,7 @@ func (s Store) PutAtVersion(version int64, changeSet []types.StoreKVPair) error } } - return s.db.Write(defaultWriteOpts, batch) + return s.db.Write(defaultSyncWriteOpts, batch) } func (s Store) GetAtVersionSlice(storeKey string, key []byte, version *int64) (*grocksdb.Slice, error) {