Просмотр исходного кода

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
Daniel Lee 7 лет назад
Родитель
Сommit
5f511deefc
1 измененных файлов с 12 добавлено и 0 удалено
  1. 12 0
      pkg/services/session/session.go

+ 12 - 0
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