mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-10-29 07:22:24 -05:00
[bugfix] Return useful err on server start failure (#3879)
* [bugfix] Return useful err on `server start` failure * remove scheduler started func * remove tryUntil
This commit is contained in:
parent
829143d263
commit
69461c461b
9 changed files with 86 additions and 81 deletions
21
internal/cache/cache.go
vendored
21
internal/cache/cache.go
vendored
|
|
@ -23,6 +23,7 @@ import (
|
|||
"codeberg.org/gruf/go-cache/v3/ttl"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/cache/headerfilter"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/config"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/gtserror"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/log"
|
||||
)
|
||||
|
||||
|
|
@ -124,16 +125,18 @@ func (c *Caches) Init() {
|
|||
|
||||
// Start will start any caches that require a background
|
||||
// routine, which usually means any kind of TTL caches.
|
||||
func (c *Caches) Start() {
|
||||
func (c *Caches) Start() error {
|
||||
log.Infof(nil, "start: %p", c)
|
||||
|
||||
tryUntil("starting webfinger cache", 5, func() bool {
|
||||
return c.Webfinger.Start(5 * time.Minute)
|
||||
})
|
||||
if !c.Webfinger.Start(5 * time.Minute) {
|
||||
return gtserror.New("could not start webfinger cache")
|
||||
}
|
||||
|
||||
tryUntil("starting statusesFilterableFields cache", 5, func() bool {
|
||||
return c.StatusesFilterableFields.Start(5 * time.Minute)
|
||||
})
|
||||
if !c.StatusesFilterableFields.Start(5 * time.Minute) {
|
||||
return gtserror.New("could not start statusesFilterableFields cache")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// Stop will stop any caches that require a background
|
||||
|
|
@ -141,8 +144,8 @@ func (c *Caches) Start() {
|
|||
func (c *Caches) Stop() {
|
||||
log.Infof(nil, "stop: %p", c)
|
||||
|
||||
tryUntil("stopping webfinger cache", 5, c.Webfinger.Stop)
|
||||
tryUntil("stopping statusesFilterableFields cache", 5, c.StatusesFilterableFields.Stop)
|
||||
_ = c.Webfinger.Stop()
|
||||
_ = c.StatusesFilterableFields.Stop()
|
||||
}
|
||||
|
||||
// Sweep will sweep all the available caches to ensure none
|
||||
|
|
|
|||
18
internal/cache/util.go
vendored
18
internal/cache/util.go
vendored
|
|
@ -19,11 +19,9 @@ package cache
|
|||
|
||||
import (
|
||||
"errors"
|
||||
"time"
|
||||
|
||||
errorsv2 "codeberg.org/gruf/go-errors/v2"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/db"
|
||||
"github.com/superseriousbusiness/gotosocial/internal/log"
|
||||
)
|
||||
|
||||
// SentinelError is an error that can be returned and checked against to indicate a non-permanent
|
||||
|
|
@ -51,19 +49,3 @@ type nocopy struct{}
|
|||
func (*nocopy) Lock() {}
|
||||
|
||||
func (*nocopy) Unlock() {}
|
||||
|
||||
// tryUntil will attempt to call 'do' for 'count' attempts, before panicking with 'msg'.
|
||||
func tryUntil(msg string, count int, do func() bool) {
|
||||
for i := 0; i < count; i++ {
|
||||
if do() {
|
||||
// success.
|
||||
return
|
||||
}
|
||||
|
||||
// Sleep for a little before retry (a bcakoff).
|
||||
time.Sleep(time.Millisecond * 1 << (i + 1))
|
||||
}
|
||||
|
||||
// panic on total failure as this shouldn't happen.
|
||||
log.Panicf(nil, "failed %s after %d tries", msg, count)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue