mirror of
https://github.com/mxpv/podsync.git
synced 2024-05-11 05:55:04 +00:00
Cache error feed responses
This commit is contained in:
@ -159,8 +159,14 @@ func (s *Service) BuildFeed(hashID string) ([]byte, error) {
|
|||||||
var (
|
var (
|
||||||
logger = log.WithField("hash_id", hashID)
|
logger = log.WithField("hash_id", hashID)
|
||||||
now = time.Now().UTC()
|
now = time.Now().UTC()
|
||||||
|
errKey = "err/" + hashID
|
||||||
)
|
)
|
||||||
|
|
||||||
|
cached, err := s.cache.Get(errKey)
|
||||||
|
if err == nil {
|
||||||
|
return []byte(cached), nil
|
||||||
|
}
|
||||||
|
|
||||||
feed, err := s.QueryFeed(hashID)
|
feed, err := s.QueryFeed(hashID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.WithError(err).Error("failed to query feed from dynamodb")
|
logger.WithError(err).Error("failed to query feed from dynamodb")
|
||||||
@ -171,7 +177,10 @@ func (s *Service) BuildFeed(hashID string) ([]byte, error) {
|
|||||||
|
|
||||||
oldLastID := feed.LastID
|
oldLastID := feed.LastID
|
||||||
|
|
||||||
const updateTTL = 15 * time.Minute
|
const (
|
||||||
|
updateTTL = 15 * time.Minute
|
||||||
|
)
|
||||||
|
|
||||||
if now.Sub(feed.UpdatedAt) < updateTTL {
|
if now.Sub(feed.UpdatedAt) < updateTTL {
|
||||||
if podcast, err := s.buildPodcast(feed); err != nil {
|
if podcast, err := s.buildPodcast(feed); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -196,6 +205,9 @@ func (s *Service) BuildFeed(hashID string) ([]byte, error) {
|
|||||||
if err := builder.Build(feed); err != nil {
|
if err := builder.Build(feed); err != nil {
|
||||||
logger.WithError(err).Error("failed to build feed")
|
logger.WithError(err).Error("failed to build feed")
|
||||||
|
|
||||||
|
// Save error to cache to avoid requests spamming
|
||||||
|
_ = s.cache.Set(errKey, err.Error(), updateTTL)
|
||||||
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user