-
Notifications
You must be signed in to change notification settings - Fork 3.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: state migration from IAVL to SMT (ADR-040) #10962
Merged
+182
−6
Merged
Changes from 8 commits
Commits
Show all changes
41 commits
Select commit
Hold shift + click to select a range
4cc992f
feat: add migration for adr40
df0dc4f
chore: removed sort from migration func
fca170d
Merge branch 'master' into sai/migration_for_adr40
gsk967 79583ec
chore: address the pr comments
bcfeff1
Merge branch 'sai/migration_for_adr40' of github.com:vulcanize/cosmos…
d511fa3
Merge branch 'master' into sai/migration_for_adr40
gsk967 00b99a7
Merge branch 'master' into sai/migration_for_adr40
gsk967 0eaec31
Merge branch 'master' into sai/migration_for_adr40
gsk967 9f496e9
test: add test for migrationv2
39b303b
Merge branch 'master' into sai/migration_for_adr40
gsk967 8b16dad
Merge branch 'master' into sai/migration_for_adr40
gsk967 b305280
chore: change the `MigrationV2`
ebc1d3b
Merge branch 'master' into sai/migration_for_adr40
gsk967 64e1cb4
Merge branch 'master' into sai/migration_for_adr40
gsk967 39d51cf
chore: refactored the migrationV2
242939e
Merge branch 'master' into sai/migration_for_adr40
gsk967 a9fa647
Merge branch 'master' into sai/migration_for_adr40
gsk967 ada2859
Merge branch 'master' into sai/migration_for_adr40
gsk967 38527f7
chore: address the pr review comments
1e884cf
Merge branch 'master' into sai/migration_for_adr40
gsk967 1b79269
Merge branch 'master' into sai/migration_for_adr40
gsk967 00b6360
Merge branch 'master' into sai/migration_for_adr40
gsk967 dc57212
Merge branch 'master' into sai/migration_for_adr40
gsk967 4695365
fix: fix the build issue
3a5bdf0
Merge branch 'master' into sai/migration_for_adr40
gsk967 c103f16
Merge branch 'master' into sai/migration_for_adr40
gsk967 4a9feb5
Merge branch 'master' into sai/migration_for_adr40
gsk967 677639e
chore: address the pr comments
074da95
Merge branch 'master' into sai/migration_for_adr40
gsk967 a05f72e
Merge branch 'master' into sai/migration_for_adr40
gsk967 6eb51d1
Merge branch 'master' into sai/migration_for_adr40
gsk967 c16dc89
Merge branch 'master' into sai/migration_for_adr40
gsk967 119b77a
Merge branch 'master' into sai/migration_for_adr40
gsk967 a97ed5a
address the pr comments
179743c
Merge branch 'master' into sai/migration_for_adr40
gsk967 bb61b5d
address the pr comments
f381e09
Merge branch 'master' into sai/migration_for_adr40
gsk967 7eec931
Merge branch 'master' into sai/migration_for_adr40
gsk967 1af9b3b
chore: update changelog
ec331a0
Merge branch 'master' into sai/migration_for_adr40
gsk967 e21a6f8
Merge branch 'master' into sai/migration_for_adr40
gsk967 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,55 @@ | ||
package root | ||
gsk967 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
|
||
import ( | ||
prefixdb "github.com/cosmos/cosmos-sdk/db/prefix" | ||
gsk967 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
"github.com/cosmos/cosmos-sdk/store/iavl" | ||
"github.com/cosmos/cosmos-sdk/store/mem" | ||
v1Store "github.com/cosmos/cosmos-sdk/store/rootmulti" | ||
"github.com/cosmos/cosmos-sdk/store/transient" | ||
"github.com/cosmos/cosmos-sdk/store/types" | ||
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" | ||
) | ||
|
||
// MigrateV2 will migrate the state from iavl to smt | ||
func MigrateV2(rs *v1Store.Store, rootStore *Store) error { | ||
// make new smt store schema | ||
gsk967 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
if len(rootStore.schema) != 0 { | ||
roysc marked this conversation as resolved.
Show resolved
Hide resolved
|
||
// schema already exists | ||
return sdkerrors.Wrapf(sdkerrors.ErrLogic, "smt store already have schema") | ||
} | ||
|
||
// set the schema to smt store | ||
schemaWriter := prefixdb.NewPrefixWriter(rootStore.stateTxn, schemaPrefix) | ||
|
||
for key := range rs.GetStores() { | ||
switch store := rs.GetCommitKVStore(key).(type) { | ||
case *iavl.Store: | ||
rootStore.schema[key.Name()] = types.StoreTypePersistent | ||
err := schemaWriter.Set([]byte(key.Name()), []byte{byte(types.StoreTypePersistent)}) | ||
if err != nil { | ||
return sdkerrors.Wrap(err, "error at set the store schema key values") | ||
} | ||
|
||
subStore, err := rootStore.getSubstore(key.Name()) | ||
if err != nil { | ||
return err | ||
} | ||
// iterate all iavl tree node key/values | ||
iterator := store.Iterator(nil, nil) | ||
for ; iterator.Valid(); iterator.Next() { | ||
// set the iavl key,values into smt node | ||
subStore.Set(iterator.Key(), iterator.Value()) | ||
} | ||
|
||
case *transient.Store, *mem.Store: | ||
continue | ||
default: | ||
continue | ||
} | ||
} | ||
|
||
// commit the all key/values from iavl to smt tree (SMT Store) | ||
rootStore.Commit() | ||
|
||
return nil | ||
} |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It seams we only need store keys. Let's change this function to:
This way we won't expose the internal map.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@robert-zaremba is there any concern with exposing the
StoreKey
here? or as long as it's not exposed to modules fromContext
, is it fine?