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:
co-authored by
Agnès Toulet
parent
a365dcca5b
commit
be578e5700
@@ -28,6 +28,11 @@ var netClient = &http.Client{
|
||||
Transport: netTransport,
|
||||
}
|
||||
|
||||
var (
|
||||
remoteVersionFetchInterval time.Duration = time.Second * 15
|
||||
remoteVersionFetchRetries uint = 4
|
||||
)
|
||||
|
||||
func (rs *RenderingService) renderViaHTTP(ctx context.Context, renderKey string, opts Opts) (*RenderResult, error) {
|
||||
filePath, err := rs.getNewFilePath(RenderPNG)
|
||||
if err != nil {
|
||||
@@ -194,6 +199,24 @@ func (rs *RenderingService) readFileResponse(ctx context.Context, resp *http.Res
|
||||
return nil
|
||||
}
|
||||
|
||||
func (rs *RenderingService) getRemotePluginVersionWithRetry(callback func(string, error)) {
|
||||
go func() {
|
||||
var err error
|
||||
for try := uint(0); try < remoteVersionFetchRetries; try++ {
|
||||
version, err := rs.getRemotePluginVersion()
|
||||
if err == nil {
|
||||
callback(version, err)
|
||||
return
|
||||
}
|
||||
rs.log.Info("Couldn't get remote renderer version, retrying", "err", err, "try", try)
|
||||
|
||||
time.Sleep(remoteVersionFetchInterval)
|
||||
}
|
||||
|
||||
callback("", err)
|
||||
}()
|
||||
}
|
||||
|
||||
func (rs *RenderingService) getRemotePluginVersion() (string, error) {
|
||||
rendererURL, err := url.Parse(rs.Cfg.RendererUrl + "/version")
|
||||
if err != nil {
|
||||
@@ -212,7 +235,10 @@ func (rs *RenderingService) getRemotePluginVersion() (string, error) {
|
||||
}
|
||||
}()
|
||||
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
if resp.StatusCode == http.StatusNotFound {
|
||||
// Old versions of the renderer lacked the version endpoint
|
||||
return "1.0.0", nil
|
||||
} else if resp.StatusCode != http.StatusOK {
|
||||
return "", fmt.Errorf("remote rendering request to get version failed, status code: %d, status: %s", resp.StatusCode,
|
||||
resp.Status)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user