@@ -44,20 +44,25 @@ const (
4444 BucketURL = "BLOB_URL"
4545)
4646
47+ var counter int64
48+
4749// RateLimitRoundTripper is a rate-limit aware http.Transport for Github.
4850type RateLimitRoundTripper struct {
4951 Logger * zap.SugaredLogger
5052 InnerTransport http.RoundTripper
5153}
5254
5355type RoundRobinTokenSource struct {
54- counter int64
5556 AccessTokens []string
57+ log * zap.SugaredLogger
5658}
5759
5860func (r * RoundRobinTokenSource ) Token () (* oauth2.Token , error ) {
59- c := atomic .AddInt64 (& r .counter , 1 )
60- index := c % int64 (len (r .AccessTokens ))
61+ c := atomic .AddInt64 (& counter , 1 )
62+ // not locking it because it is never modified
63+ l := len (r .AccessTokens )
64+ index := c % int64 (l )
65+ r .log .Infof ("using token %d of total %d." , index , l )
6166 return & oauth2.Token {
6267 AccessToken : r .AccessTokens [index ],
6368 }, nil
@@ -70,6 +75,7 @@ func NewTransport(ctx context.Context, logger *zap.SugaredLogger) http.RoundTrip
7075 if token := os .Getenv (GithubAuthToken ); token != "" {
7176 ts := & RoundRobinTokenSource {
7277 AccessTokens : strings .Split (token , "," ),
78+ log : logger ,
7379 }
7480 transport = oauth2 .NewClient (ctx , ts ).Transport
7581 } else if keyPath := os .Getenv (GithubAppKeyPath ); keyPath != "" { // Also try a GITHUB_APP
@@ -171,5 +177,6 @@ func (gh *RateLimitRoundTripper) RoundTrip(r *http.Request) (*http.Response, err
171177 gh .Logger .Warnf ("Rate limit exceeded. Retrying..." )
172178 return gh .RoundTrip (r )
173179 }
180+
174181 return resp , nil
175182}
0 commit comments