mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
ImageRendering: fix leakage of the rendering inflight counter (#34607)
This commit is contained in:
parent
06c9f7e13b
commit
3df001db93
@ -10,6 +10,7 @@ import (
|
||||
"path"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"github.com/grafana/grafana/pkg/infra/metrics"
|
||||
@ -41,7 +42,7 @@ type RenderingService struct {
|
||||
renderAction renderFunc
|
||||
renderCSVAction renderCSVFunc
|
||||
domain string
|
||||
inProgressCount int
|
||||
inProgressCount int32
|
||||
version string
|
||||
|
||||
Cfg *setting.Cfg
|
||||
@ -183,7 +184,7 @@ func (rs *RenderingService) Render(ctx context.Context, opts Opts) (*RenderResul
|
||||
}
|
||||
|
||||
func (rs *RenderingService) render(ctx context.Context, opts Opts) (*RenderResult, error) {
|
||||
if rs.inProgressCount > opts.ConcurrentLimit {
|
||||
if int(atomic.LoadInt32(&rs.inProgressCount)) > opts.ConcurrentLimit {
|
||||
return &RenderResult{
|
||||
FilePath: filepath.Join(setting.HomePath, "public/img/rendering_limit.png"),
|
||||
}, nil
|
||||
@ -208,12 +209,10 @@ func (rs *RenderingService) render(ctx context.Context, opts Opts) (*RenderResul
|
||||
defer rs.deleteRenderKey(renderKey)
|
||||
|
||||
defer func() {
|
||||
rs.inProgressCount--
|
||||
metrics.MRenderingQueue.Set(float64(rs.inProgressCount))
|
||||
metrics.MRenderingQueue.Set(float64(atomic.AddInt32(&rs.inProgressCount, -1)))
|
||||
}()
|
||||
|
||||
rs.inProgressCount++
|
||||
metrics.MRenderingQueue.Set(float64(rs.inProgressCount))
|
||||
metrics.MRenderingQueue.Set(float64(atomic.AddInt32(&rs.inProgressCount, 1)))
|
||||
return rs.renderAction(ctx, renderKey, opts)
|
||||
}
|
||||
|
||||
@ -228,7 +227,7 @@ func (rs *RenderingService) RenderCSV(ctx context.Context, opts CSVOpts) (*Rende
|
||||
}
|
||||
|
||||
func (rs *RenderingService) renderCSV(ctx context.Context, opts CSVOpts) (*RenderCSVResult, error) {
|
||||
if rs.inProgressCount > opts.ConcurrentLimit {
|
||||
if int(atomic.LoadInt32(&rs.inProgressCount)) > opts.ConcurrentLimit {
|
||||
return nil, ErrConcurrentLimitReached
|
||||
}
|
||||
|
||||
@ -245,12 +244,10 @@ func (rs *RenderingService) renderCSV(ctx context.Context, opts CSVOpts) (*Rende
|
||||
defer rs.deleteRenderKey(renderKey)
|
||||
|
||||
defer func() {
|
||||
rs.inProgressCount--
|
||||
metrics.MRenderingQueue.Set(float64(rs.inProgressCount))
|
||||
metrics.MRenderingQueue.Set(float64(atomic.AddInt32(&rs.inProgressCount, -1)))
|
||||
}()
|
||||
|
||||
rs.inProgressCount++
|
||||
metrics.MRenderingQueue.Set(float64(rs.inProgressCount))
|
||||
metrics.MRenderingQueue.Set(float64(atomic.AddInt32(&rs.inProgressCount, 1)))
|
||||
return rs.renderCSVAction(ctx, renderKey, opts)
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user