Protect against NPEs in notifications list (#10879)
Unfortunately there appears to be potential race with notifications being set before the associated issue has been committed. This PR adds protection in to the notifications list to log any failures and remove these notifications from the display. References #10815 - and prevents the panic but does not completely fix this. Signed-off-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
parent
20d4f9206d
commit
d01763ee14
2 changed files with 75 additions and 22 deletions
|
@ -81,24 +81,39 @@ func Notifications(c *context.Context) {
|
|||
return
|
||||
}
|
||||
|
||||
repos, err := notifications.LoadRepos()
|
||||
failCount := 0
|
||||
|
||||
repos, failures, err := notifications.LoadRepos()
|
||||
if err != nil {
|
||||
c.ServerError("LoadRepos", err)
|
||||
return
|
||||
}
|
||||
notifications = notifications.Without(failures)
|
||||
if err := repos.LoadAttributes(); err != nil {
|
||||
c.ServerError("LoadAttributes", err)
|
||||
return
|
||||
}
|
||||
failCount += len(failures)
|
||||
|
||||
if err := notifications.LoadIssues(); err != nil {
|
||||
failures, err = notifications.LoadIssues()
|
||||
if err != nil {
|
||||
c.ServerError("LoadIssues", err)
|
||||
return
|
||||
}
|
||||
if err := notifications.LoadComments(); err != nil {
|
||||
notifications = notifications.Without(failures)
|
||||
failCount += len(failures)
|
||||
|
||||
failures, err = notifications.LoadComments()
|
||||
if err != nil {
|
||||
c.ServerError("LoadComments", err)
|
||||
return
|
||||
}
|
||||
notifications = notifications.Without(failures)
|
||||
failCount += len(failures)
|
||||
|
||||
if failCount > 0 {
|
||||
c.Flash.Error(fmt.Sprintf("ERROR: %d notifications were removed due to missing parts - check the logs", failCount))
|
||||
}
|
||||
|
||||
title := c.Tr("notifications")
|
||||
if status == models.NotificationStatusUnread && total > 0 {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue