diff --git a/store/go.mod b/store/go.mod index 1a8231be52..5e6c2839a0 100644 --- a/store/go.mod +++ b/store/go.mod @@ -20,6 +20,7 @@ require ( github.com/stretchr/testify v1.8.4 github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d golang.org/x/exp v0.0.0-20231226003508-02704c960a9b + golang.org/x/sync v0.5.0 ) require ( diff --git a/store/root/store.go b/store/root/store.go index 370ba5db51..aead02712e 100644 --- a/store/root/store.go +++ b/store/root/store.go @@ -7,6 +7,7 @@ import ( "time" "github.com/cockroachdb/errors" + "golang.org/x/sync/errgroup" coreheader "cosmossdk.io/core/header" "cosmossdk.io/log" @@ -298,14 +299,28 @@ func (s *Store) Commit(cs *store.Changeset) ([]byte, error) { s.logger.Debug("commit header and version mismatch", "header_height", s.commitHeader.Height, "version", version) } - // commit SS - if err := s.stateStore.ApplyChangeset(version, cs); err != nil { - return nil, fmt.Errorf("failed to commit SS: %w", err) - } + eg := new(errgroup.Group) - // commit SC - if err := s.commitSC(cs); err != nil { - return nil, fmt.Errorf("failed to commit SC stores: %w", err) + // commit SS async + eg.Go(func() error { + if err := s.stateStore.ApplyChangeset(version, cs); err != nil { + return fmt.Errorf("failed to commit SS: %w", err) + } + + return nil + }) + + // commit SC async + eg.Go(func() error { + if err := s.commitSC(cs); err != nil { + return fmt.Errorf("failed to commit SC: %w", err) + } + + return nil + }) + + if err := eg.Wait(); err != nil { + return nil, err } if s.commitHeader != nil {