perf: Faster state export (#14332)
This commit is contained in:
+16
-9
@@ -383,14 +383,9 @@ func (m *Manager) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) map[string
|
||||
// ExportGenesisForModules performs export genesis functionality for modules
|
||||
func (m *Manager) ExportGenesisForModules(ctx sdk.Context, cdc codec.JSONCodec, modulesToExport []string) map[string]json.RawMessage {
|
||||
genesisData := make(map[string]json.RawMessage)
|
||||
if len(modulesToExport) == 0 {
|
||||
for _, moduleName := range m.OrderExportGenesis {
|
||||
if module, ok := m.Modules[moduleName].(HasGenesis); ok {
|
||||
genesisData[moduleName] = module.ExportGenesis(ctx, cdc)
|
||||
}
|
||||
}
|
||||
|
||||
return genesisData
|
||||
if len(modulesToExport) == 0 {
|
||||
modulesToExport = m.OrderExportGenesis
|
||||
}
|
||||
|
||||
// verify modules exists in app, so that we don't panic in the middle of an export
|
||||
@@ -398,12 +393,24 @@ func (m *Manager) ExportGenesisForModules(ctx sdk.Context, cdc codec.JSONCodec,
|
||||
panic(err)
|
||||
}
|
||||
|
||||
for _, moduleName := range modulesToExport {
|
||||
channels := make([]chan json.RawMessage, len(modulesToExport))
|
||||
modulesWithGenesis := make([]string, 0, len(modulesToExport))
|
||||
|
||||
for i, moduleName := range modulesToExport {
|
||||
if module, ok := m.Modules[moduleName].(HasGenesis); ok {
|
||||
genesisData[moduleName] = module.ExportGenesis(ctx, cdc)
|
||||
channels[i] = make(chan json.RawMessage)
|
||||
modulesWithGenesis = append(modulesWithGenesis, moduleName)
|
||||
|
||||
go func(module HasGenesis, ch chan json.RawMessage) {
|
||||
ch <- module.ExportGenesis(ctx, cdc)
|
||||
}(module, channels[i])
|
||||
}
|
||||
}
|
||||
|
||||
for i, moduleName := range modulesWithGenesis {
|
||||
genesisData[moduleName] = <-channels[i]
|
||||
}
|
||||
|
||||
return genesisData
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user