func()

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:
		}
	}
}