Improve handling of old/slow-to-start remote renderer (#40492)

* Assume the remote renderer is old if it returns 404 to the version endpoint

* Retry fetch of remote image renderer version on failure

Co-authored-by: Agnès Toulet <35176601+AgnesToulet@users.noreply.github.com>
This commit is contained in:
Jesse Weaver
2021-12-01 08:58:43 -07:00
committed by GitHub
co-authored by Agnès Toulet
parent a365dcca5b
commit be578e5700
3 changed files with 112 additions and 7 deletions
+16 -6
View File
@@ -10,6 +10,7 @@ import (
"path"
"path/filepath"
"strings"
"sync"
"sync/atomic"
"time"
@@ -43,6 +44,7 @@ type RenderingService struct {
domain string
inProgressCount int32
version string
versionMutex sync.RWMutex
Cfg *setting.Cfg
RemoteCacheService *remotecache.RemoteCache
@@ -93,13 +95,18 @@ func (rs *RenderingService) Run(ctx context.Context) error {
if rs.remoteAvailable() {
rs.log = rs.log.New("renderer", "http")
version, err := rs.getRemotePluginVersion()
if err != nil {
rs.log.Info("Couldn't get remote renderer version", "err", err)
}
rs.getRemotePluginVersionWithRetry(func(version string, err error) {
if err != nil {
rs.log.Info("Couldn't get remote renderer version", "err", err)
}
rs.log.Info("Backend rendering via external http server", "version", version)
rs.version = version
rs.log.Info("Backend rendering via external http server", "version", version)
rs.versionMutex.Lock()
defer rs.versionMutex.Unlock()
rs.version = version
})
rs.renderAction = rs.renderViaHTTP
rs.renderCSVAction = rs.renderCSVViaHTTP
<-ctx.Done()
@@ -153,6 +160,9 @@ func (rs *RenderingService) IsAvailable() bool {
}
func (rs *RenderingService) Version() string {
rs.versionMutex.RLock()
defer rs.versionMutex.RUnlock()
return rs.version
}