func main()

in cmd/pinpi/main.go [130:169]


func main() {
	l, _ := zap.NewDevelopment()
	defer l.Sync()
	zap.ReplaceGlobals(l)
	logger = l.Sugar()

	start := flag.Int64("s", 0, "Start offset")
	flag.Parse()

	ctx, cancel := context.WithCancel(context.Background())
	client, err := gcs.NewClient(ctx)
	if err != nil {
		logger.Errorf("couldn't create a GCS client: %v", err)
		os.Exit(1)
	}
	defer client.Close()

	taskChan := make(chan task, 256)

	for i := 0; i < WORKERS; i++ {
		wg.Add(1)
		ctx = context.WithValue(ctx, workerContextKey("workerId"), i)
		go worker(ctx, taskChan, client)
	}

	for i := *start; i < index.Decimal.TotalDigits(); i += CHUNK_SIZE {
		task := task{
			start:  i,
			n:      CHUNK_SIZE,
			cancel: cancel,
		}
		taskChan <- task
		if ctx.Err() != nil {
			logger.Errorf("context error: %v", ctx.Err())
			break
		}
	}
	close(taskChan)
	wg.Wait()
}