Add timeout to neededGenerate function (#324)

* Add timeout to neededGenerate function

* * verbose and cosmetic fixes
This commit is contained in:
bnkai
2020-01-22 05:54:38 +02:00
committed by Leopere
parent d2e67fdb31
commit fed7311d9c

View File

@@ -165,8 +165,12 @@ func (s *singleton) Generate(sprites bool, previews bool, markers bool, transcod
return return
} }
totalsNeeded := s.neededGenerate(scenes, sprites, previews, markers, transcodes) totalsNeeded := s.neededGenerate(scenes, sprites, previews, markers, transcodes)
if totalsNeeded == nil {
logger.Infof("Taking too long to count content. Skipping...")
logger.Infof("Generating content")
} else {
logger.Infof("Generating %d sprites %d previews %d markers %d transcodes", totalsNeeded.sprites, totalsNeeded.previews, totalsNeeded.markers, totalsNeeded.transcodes) logger.Infof("Generating %d sprites %d previews %d markers %d transcodes", totalsNeeded.sprites, totalsNeeded.previews, totalsNeeded.markers, totalsNeeded.transcodes)
}
for i, scene := range scenes { for i, scene := range scenes {
s.Status.setProgress(i, total) s.Status.setProgress(i, total)
if s.Status.stopping { if s.Status.stopping {
@@ -208,6 +212,7 @@ func (s *singleton) Generate(sprites bool, previews bool, markers bool, transcod
wg.Wait() wg.Wait()
} }
logger.Infof("Generate finished")
}() }()
} }
@@ -461,6 +466,18 @@ type totalsGenerate struct {
func (s *singleton) neededGenerate(scenes []*models.Scene, sprites, previews, markers, transcodes bool) *totalsGenerate { func (s *singleton) neededGenerate(scenes []*models.Scene, sprites, previews, markers, transcodes bool) *totalsGenerate {
var totals totalsGenerate var totals totalsGenerate
const timeoutSecs = 90 * time.Second
// create a control channel through which to signal the counting loop when the timeout is reached
chTimeout := make(chan struct{})
//run the timeout function in a separate thread
go func() {
time.Sleep(timeoutSecs)
chTimeout <- struct{}{}
}()
logger.Infof("Counting content to generate...")
for _, scene := range scenes { for _, scene := range scenes {
if scene != nil { if scene != nil {
if sprites { if sprites {
@@ -489,6 +506,13 @@ func (s *singleton) neededGenerate(scenes []*models.Scene, sprites, previews, ma
} }
} }
} }
//check for timeout
select {
case <-chTimeout:
return nil
default:
}
} }
return &totals return &totals
} }