in go/cmd/ct-fetch/ct-fetch.go [297:337]
func (ld *LogSyncEngine) SyncLog(ctx context.Context, enrolledLogs *EnrolledLogs, logMeta types.CTLogMetadata) error {
ld.DownloaderWaitGroup.Add(1)
defer ld.DownloaderWaitGroup.Done()
if err := ld.database.Migrate(&logMeta); err != nil {
return err
}
for {
if !enrolledLogs.IsEnrolled(logMeta.LogID) {
return nil
}
worker, err := ld.NewLogWorker(ctx, &logMeta)
if err != nil {
metrics.IncrCounter([]string{"sync", "error"}, 1)
return err
}
err = worker.Run(ctx, ld.entryChan)
if err != nil {
glog.Errorf("[%s] Could not sync log: %s", logMeta.URL, err)
metrics.IncrCounter([]string{"sync", "error"}, 1)
return err
}
// We did useful work. Register an update for the health service.
ld.RegisterUpdate()
if !*ctconfig.RunForever {
return nil
}
select {
case <-ctx.Done():
glog.Infof("[%s] Downloader exiting.", logMeta.URL)
return nil
default:
}
}
}