Skip to content

Commit

Permalink
fix: Possible gitlab client blocking when fetching many resources
Browse files Browse the repository at this point in the history
  • Loading branch information
cluttrdev committed Jan 31, 2025
1 parent 99a9333 commit 9ff135b
Showing 1 changed file with 50 additions and 42 deletions.
92 changes: 50 additions & 42 deletions internal/tasks/pipelines.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,21 +87,25 @@ func FetchProjectsJobsLogData(ctx context.Context, glab *gitlab.Client, jobs []t
wg sync.WaitGroup
results = make(chan result, len(jobs))
)
for _, job := range jobs {
if err := glab.Acquire(ctx, 1); err != nil {
slog.Error("failed to acquire gitlab client", "error", err)
break
wg.Add(1)
go func() {
defer wg.Done()
for _, job := range jobs {
if err := glab.Acquire(ctx, 1); err != nil {
slog.Error("failed to acquire gitlab client", "error", err)
break
}
wg.Add(1)
go func() {
defer glab.Release(1)
defer wg.Done()

var r result
r.sections, r.metrics, r.err = FetchProjectJobLogData(ctx, glab, job)
results <- r
}()
}
wg.Add(1)
go func() {
defer glab.Release(1)
defer wg.Done()

var r result
r.sections, r.metrics, r.err = FetchProjectJobLogData(ctx, glab, job)
results <- r
}()
}
}()

done := make(chan struct{})
go func() {
Expand Down Expand Up @@ -200,35 +204,39 @@ func FetchProjectsPipelinesTestReports(ctx context.Context, glab *gitlab.Client,
wg sync.WaitGroup
results = make(chan result, len(pipelines))
)
for _, p := range pipelines {
if err := glab.Acquire(ctx, 1); err != nil {
slog.Error("failed to acquire gitlab client", "error", err)
break
}
wg.Add(1)
go func(pipeline types.Pipeline) {
defer glab.Release(1)
defer wg.Done()

var (
r result
err error
)

report, summary, err := glab.Rest.GetPipelineTestReport(ctx, pipeline.Project.Id, pipeline.Id)
if err != nil {
r.err = fmt.Errorf("get project pipeline test report: %w", err)
results <- r
return
}

r.testReport, r.testSuites, r.testCases, err = rest.ConvertTestReport(report, summary, pipeline)
if err != nil {
r.err = fmt.Errorf("convert project pipeline test report: %w", err)
wg.Add(1)
go func() {
defer wg.Done()
for _, p := range pipelines {
if err := glab.Acquire(ctx, 1); err != nil {
slog.Error("failed to acquire gitlab client", "error", err)
break
}
results <- r
}(p)
}
wg.Add(1)
go func(pipeline types.Pipeline) {
defer glab.Release(1)
defer wg.Done()

var (
r result
err error
)

report, summary, err := glab.Rest.GetPipelineTestReport(ctx, pipeline.Project.Id, pipeline.Id)
if err != nil {
r.err = fmt.Errorf("get project pipeline test report: %w", err)
results <- r
return
}

r.testReport, r.testSuites, r.testCases, err = rest.ConvertTestReport(report, summary, pipeline)
if err != nil {
r.err = fmt.Errorf("convert project pipeline test report: %w", err)
}
results <- r
}(p)
}
}()

done := make(chan struct{})
go func() {
Expand Down

0 comments on commit 9ff135b

Please sign in to comment.