[#1138] adm: Parallelize generate-alphabet command

This is the longest test in our suite, try to help CI a bit.

Before:
```
$ go test -run=TestGenerateAlphabet -count=10 .
ok      git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/modules/morph/generate      45.400s
```

After:
```
$ go test -run=TestGenerateAlphabet -count=10 .
ok      git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/modules/morph/generate      33.267s
```

Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
This commit is contained in:
Evgenii Stratonikov 2024-05-15 16:04:01 +03:00 committed by Evgenii Stratonikov
parent b078fe5ba1
commit 2f04ce2f79

View file

@ -65,34 +65,42 @@ func initializeWallets(v *viper.Viper, walletDir string, size int) ([]string, er
pubs := make(keys.PublicKeys, size) pubs := make(keys.PublicKeys, size)
passwords := make([]string, size) passwords := make([]string, size)
var errG errgroup.Group
for i := range wallets { for i := range wallets {
password, err := config.GetPassword(v, innerring.GlagoliticLetter(i).String()) password, err := config.GetPassword(v, innerring.GlagoliticLetter(i).String())
if err != nil { if err != nil {
return nil, fmt.Errorf("can't fetch password: %w", err) return nil, fmt.Errorf("can't fetch password: %w", err)
} }
p := filepath.Join(walletDir, innerring.GlagoliticLetter(i).String()+".json") i := i
f, err := os.OpenFile(p, os.O_CREATE, 0o644) errG.Go(func() error {
if err != nil { p := filepath.Join(walletDir, innerring.GlagoliticLetter(i).String()+".json")
return nil, fmt.Errorf("can't create wallet file: %w", err) f, err := os.OpenFile(p, os.O_CREATE, 0o644)
} if err != nil {
if err := f.Close(); err != nil { return fmt.Errorf("can't create wallet file: %w", err)
return nil, fmt.Errorf("can't close wallet file: %w", err) }
} if err := f.Close(); err != nil {
w, err := wallet.NewWallet(p) return fmt.Errorf("can't close wallet file: %w", err)
if err != nil { }
return nil, fmt.Errorf("can't create wallet: %w", err) w, err := wallet.NewWallet(p)
} if err != nil {
if err := w.CreateAccount(constants.SingleAccountName, password); err != nil { return fmt.Errorf("can't create wallet: %w", err)
return nil, fmt.Errorf("can't create account: %w", err) }
} if err := w.CreateAccount(constants.SingleAccountName, password); err != nil {
return fmt.Errorf("can't create account: %w", err)
}
passwords[i] = password passwords[i] = password
wallets[i] = w wallets[i] = w
pubs[i] = w.Accounts[0].PrivateKey().PublicKey() pubs[i] = w.Accounts[0].PrivateKey().PublicKey()
return nil
})
} }
var errG errgroup.Group if err := errG.Wait(); err != nil {
return nil, err
}
// Create committee account with N/2+1 multi-signature. // Create committee account with N/2+1 multi-signature.
majCount := smartcontract.GetMajorityHonestNodeCount(size) majCount := smartcontract.GetMajorityHonestNodeCount(size)