Skip to content

Commit d684247

Browse files
committed
refactor: optimize refresh skipping
1 parent ed01ff2 commit d684247

File tree

2 files changed

+23
-12
lines changed

2 files changed

+23
-12
lines changed

service/pull/handle.go

+17-1
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,30 @@ import (
66
"io"
77
"log"
88
"net/http"
9+
"time"
910

1011
"github.com/0x2e/fusion/model"
1112
"github.com/0x2e/fusion/pkg/httpx"
1213

1314
"github.com/mmcdole/gofeed"
1415
)
1516

16-
func (p *Puller) do(ctx context.Context, f *model.Feed) error {
17+
func (p *Puller) do(ctx context.Context, f *model.Feed, force bool) error {
18+
if f.IsSuspended() {
19+
log.Printf("skip feed %d: suspended\n", f.ID)
20+
return nil
21+
}
22+
if !force {
23+
if f.IsFailed() {
24+
log.Printf("skip feed %d: failure exists\n", f.ID)
25+
return nil
26+
}
27+
if time.Since(f.UpdatedAt) < interval {
28+
log.Printf("skip feed %d: new enough\n", f.ID)
29+
return nil
30+
}
31+
}
32+
1733
log.Printf("start pull %d", f.ID)
1834
failure := ""
1935
fetched, err := Fetch(ctx, *f.Link)

service/pull/pull.go

+6-11
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,12 @@ func NewPuller(feedRepo FeedRepo, itemRepo ItemRepo) *Puller {
3333
}
3434
}
3535

36-
const interval = 30
36+
var interval = 30 * time.Minute
3737

3838
func (p *Puller) Run() {
3939
ctx, cancel := context.WithCancel(context.Background())
4040
defer cancel()
41-
ticker := time.NewTicker(interval * time.Minute)
41+
ticker := time.NewTicker(interval)
4242
defer ticker.Stop()
4343

4444
for {
@@ -52,9 +52,9 @@ func (p *Puller) Run() {
5252
}
5353
}
5454

55-
func (p *Puller) PullAll(ctx context.Context, includeFailed bool) error {
55+
func (p *Puller) PullAll(ctx context.Context, force bool) error {
5656
log.Println("start pull-all")
57-
ctx, cancel := context.WithTimeout(ctx, (interval-3)*time.Minute)
57+
ctx, cancel := context.WithTimeout(ctx, interval/2)
5858
defer cancel()
5959
feeds, err := p.feedRepo.All()
6060
if err != nil {
@@ -71,11 +71,6 @@ func (p *Puller) PullAll(ctx context.Context, includeFailed bool) error {
7171
defer close(routinePool)
7272
wg := sync.WaitGroup{}
7373
for _, f := range feeds {
74-
if f.IsSuspended() || (f.IsFailed() && !includeFailed) {
75-
log.Printf("skip %d\n", f.ID)
76-
continue
77-
}
78-
7974
routinePool <- struct{}{}
8075
wg.Add(1)
8176
go func(f *model.Feed) {
@@ -84,7 +79,7 @@ func (p *Puller) PullAll(ctx context.Context, includeFailed bool) error {
8479
<-routinePool
8580
}()
8681

87-
if err := p.do(ctx, f); err != nil {
82+
if err := p.do(ctx, f, force); err != nil {
8883
log.Println(err)
8984
}
9085
}(f)
@@ -102,5 +97,5 @@ func (p *Puller) PullOne(id uint) error {
10297
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
10398
defer cancel()
10499

105-
return p.do(ctx, f)
100+
return p.do(ctx, f, true)
106101
}

0 commit comments

Comments
 (0)