Do not load scalesets and runners in parallel
Both functions read and write to the same map. We should switch to sync.Map Signed-off-by: Gabriel Adrian Samfira <gsamfira@cloudbasesolutions.com>
This commit is contained in:
parent
8538a4ae8a
commit
56be5eb698
3 changed files with 8 additions and 45 deletions
|
|
@ -171,7 +171,7 @@ type Repository struct {
|
|||
EndpointName *string `gorm:"index:idx_owner_nocase,unique,collate:nocase"`
|
||||
Endpoint GithubEndpoint `gorm:"foreignKey:EndpointName;constraint:OnDelete:SET NULL"`
|
||||
|
||||
Events []RepositoryEvent `gorm:"foreignKey:RepoID;constraint:OnDelete:CASCADE,OnUpdate:CASCADE;"`
|
||||
Events []*RepositoryEvent `gorm:"foreignKey:RepoID;constraint:OnDelete:CASCADE,OnUpdate:CASCADE;"`
|
||||
}
|
||||
|
||||
type OrganizationEvent struct {
|
||||
|
|
@ -203,7 +203,7 @@ type Organization struct {
|
|||
EndpointName *string `gorm:"index:idx_org_name_nocase,collate:nocase"`
|
||||
Endpoint GithubEndpoint `gorm:"foreignKey:EndpointName;constraint:OnDelete:SET NULL"`
|
||||
|
||||
Events []OrganizationEvent `gorm:"foreignKey:OrgID;constraint:OnDelete:CASCADE,OnUpdate:CASCADE;"`
|
||||
Events []*OrganizationEvent `gorm:"foreignKey:OrgID;constraint:OnDelete:CASCADE,OnUpdate:CASCADE;"`
|
||||
}
|
||||
|
||||
type EnterpriseEvent struct {
|
||||
|
|
@ -233,7 +233,7 @@ type Enterprise struct {
|
|||
EndpointName *string `gorm:"index:idx_ent_name_nocase,collate:nocase"`
|
||||
Endpoint GithubEndpoint `gorm:"foreignKey:EndpointName;constraint:OnDelete:SET NULL"`
|
||||
|
||||
Events []EnterpriseEvent `gorm:"foreignKey:EnterpriseID;constraint:OnDelete:CASCADE,OnUpdate:CASCADE;"`
|
||||
Events []*EnterpriseEvent `gorm:"foreignKey:EnterpriseID;constraint:OnDelete:CASCADE,OnUpdate:CASCADE;"`
|
||||
}
|
||||
|
||||
type Address struct {
|
||||
|
|
|
|||
|
|
@ -6,8 +6,6 @@ import (
|
|||
"log/slog"
|
||||
"sync"
|
||||
|
||||
"golang.org/x/sync/errgroup"
|
||||
|
||||
commonParams "github.com/cloudbase/garm-provider-common/params"
|
||||
"github.com/cloudbase/garm/auth"
|
||||
dbCommon "github.com/cloudbase/garm/database/common"
|
||||
|
|
@ -133,24 +131,12 @@ func (p *Provider) Start() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
g, _ := errgroup.WithContext(p.ctx)
|
||||
if err := p.loadAllScaleSets(); err != nil {
|
||||
return fmt.Errorf("loading all scale sets: %w", err)
|
||||
}
|
||||
|
||||
g.Go(func() error {
|
||||
if err := p.loadAllScaleSets(); err != nil {
|
||||
return fmt.Errorf("loading all scale sets: %w", err)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
|
||||
g.Go(func() error {
|
||||
if err := p.loadAllRunners(); err != nil {
|
||||
return fmt.Errorf("loading all runners: %w", err)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
|
||||
if err := p.waitForErrorGroupOrContextCancelled(g); err != nil {
|
||||
return fmt.Errorf("waiting for error group: %w", err)
|
||||
if err := p.loadAllRunners(); err != nil {
|
||||
return fmt.Errorf("loading all runners: %w", err)
|
||||
}
|
||||
|
||||
consumer, err := watcher.RegisterConsumer(
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
package provider
|
||||
|
||||
import (
|
||||
"golang.org/x/sync/errgroup"
|
||||
|
||||
dbCommon "github.com/cloudbase/garm/database/common"
|
||||
"github.com/cloudbase/garm/database/watcher"
|
||||
)
|
||||
|
|
@ -13,24 +11,3 @@ func composeProviderWatcher() dbCommon.PayloadFilterFunc {
|
|||
watcher.WithEntityTypeFilter(dbCommon.ScaleSetEntityType),
|
||||
)
|
||||
}
|
||||
|
||||
func (p *Provider) waitForErrorGroupOrContextCancelled(g *errgroup.Group) error {
|
||||
if g == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
done := make(chan error, 1)
|
||||
go func() {
|
||||
waitErr := g.Wait()
|
||||
done <- waitErr
|
||||
}()
|
||||
|
||||
select {
|
||||
case err := <-done:
|
||||
return err
|
||||
case <-p.ctx.Done():
|
||||
return p.ctx.Err()
|
||||
case <-p.quit:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue