handle possible panic (#88)

Reviewed-on: https://gitea.com/gitea/act_runner/pulls/88
Reviewed-by: Jason Song <i@wolfogre.com>
pull/23/head
Lunny Xiao 2023-03-28 23:51:38 +08:00 committed by Earl Warren
parent 63c1734bb5
commit 0d33f8f520
No known key found for this signature in database
GPG Key ID: 0579CB2928A78A00
1 changed files with 35 additions and 26 deletions

View File

@ -54,6 +54,40 @@ func (p *Poller) Wait() {
p.routineGroup.Wait() p.routineGroup.Wait()
} }
func (p *Poller) handle(ctx context.Context, l *log.Entry) {
defer func() {
if r := recover(); r != nil {
l.Errorf("handle task panic: %+v", r)
}
}()
for {
select {
case <-ctx.Done():
return
default:
task, err := p.pollTask(ctx)
if task == nil || err != nil {
if err != nil {
l.Errorf("can't find the task: %v", err.Error())
}
time.Sleep(5 * time.Second)
break
}
p.metric.IncBusyWorker()
p.routineGroup.Run(func() {
defer p.schedule()
defer p.metric.DecBusyWorker()
if err := p.dispatchTask(ctx, task); err != nil {
l.Errorf("execute task: %v", err.Error())
}
})
return
}
}
}
func (p *Poller) Poll(ctx context.Context) error { func (p *Poller) Poll(ctx context.Context) error {
l := log.WithField("func", "Poll") l := log.WithField("func", "Poll")
@ -67,32 +101,7 @@ func (p *Poller) Poll(ctx context.Context) error {
case <-ctx.Done(): case <-ctx.Done():
return nil return nil
} }
LOOP: p.handle(ctx, l)
for {
select {
case <-ctx.Done():
break LOOP
default:
task, err := p.pollTask(ctx)
if task == nil || err != nil {
if err != nil {
l.Errorf("can't find the task: %v", err.Error())
}
time.Sleep(5 * time.Second)
break
}
p.metric.IncBusyWorker()
p.routineGroup.Run(func() {
defer p.schedule()
defer p.metric.DecBusyWorker()
if err := p.dispatchTask(ctx, task); err != nil {
l.Errorf("execute task: %v", err.Error())
}
})
break LOOP
}
}
} }
} }