Skip to content

Commit

Permalink
Use errgroup.
Browse files Browse the repository at this point in the history
  • Loading branch information
Joerger committed Oct 16, 2024
1 parent 979a399 commit 3b60521
Showing 1 changed file with 13 additions and 23 deletions.
36 changes: 13 additions & 23 deletions lib/services/local/users.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import (
"github.com/jonboulle/clockwork"
"github.com/sirupsen/logrus"
"golang.org/x/crypto/bcrypt"
"golang.org/x/sync/errgroup"

"github.com/gravitational/teleport"
"github.com/gravitational/teleport/api/constants"
Expand Down Expand Up @@ -1380,38 +1381,27 @@ func (s *IdentityService) GetMFADevices(ctx context.Context, user string, withSe
}

// get normal MFA devices and SSO mfa device concurrently, returning the first error we get.
errC := make(chan error)
ctx, cancel := context.WithCancel(ctx)
defer cancel()
eg, egCtx := errgroup.WithContext(ctx)

var devices []*types.MFADevice
go func() {
eg.Go(func() error {
var err error
devices, err = s.getMFADevices(ctx, user, withSecrets)
errC <- trace.Wrap(err)
}()
devices, err = s.getMFADevices(egCtx, user, withSecrets)
return trace.Wrap(err)
})

var ssoDev *types.MFADevice
go func() {
eg.Go(func() error {
var err error
ssoDev, err = s.getSSOMFADevice(ctx, user)
ssoDev, err = s.getSSOMFADevice(egCtx, user)
if trace.IsNotFound(err) {
errC <- nil // OK, SSO device may not exist.
return
return nil // OK, SSO device may not exist.
}
errC <- trace.Wrap(err)
}()

var errs []error
for i := 0; i < 2; i++ {
if err := <-errC; err != nil {
errs = append(errs, err)
cancel()
}
}
return trace.Wrap(err)
})

if len(errs) != 0 {
return nil, trace.NewAggregate(errs...)
if err := eg.Wait(); err != nil {
return nil, trace.Wrap(err)
}

if ssoDev != nil {
Expand Down

0 comments on commit 3b60521

Please sign in to comment.