From 5f511deefcc247677e963e37986b076646a2f080 Mon Sep 17 00:00:00 2001 From: Daniel Lee Date: Wed, 14 Mar 2018 12:26:59 +0100 Subject: [PATCH] middleware: recover and retry on session start Partial fix for #11155 - the Macaron session middleware panics if mysql returns an error. This fix recovers from the panic and retries once --- pkg/services/session/session.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/pkg/services/session/session.go b/pkg/services/session/session.go index 2ca9296b97f..bfdc58bc5cc 100644 --- a/pkg/services/session/session.go +++ b/pkg/services/session/session.go @@ -105,6 +105,18 @@ type SessionWrapper struct { } func (s *SessionWrapper) Start(c *macaron.Context) error { + // See https://github.com/grafana/grafana/issues/11155 for details on why + // a recover and retry is needed + defer func() error { + if err := recover(); err != nil { + var retryErr error + s.session, retryErr = s.manager.Start(c) + return retryErr + } + + return nil + }() + var err error s.session, err = s.manager.Start(c) return err