@@ -22,6 +22,7 @@ import (
2222 "reflect"
2323 "sort"
2424 "strings"
25+ "sync"
2526 "time"
2627
2728 "github.com/apache/incubator-devlake/core/dal"
@@ -52,8 +53,7 @@ type GraphqlQueryIssueWrapper struct {
5253}
5354
5455type GraphqlQueryIssueDetailWrapper struct {
55- requestedIssues map [int ]missingGithubIssueRef
56- RateLimit struct {
56+ RateLimit struct {
5757 Cost int
5858 }
5959 Repository struct {
@@ -182,6 +182,7 @@ func CollectIssues(taskCtx plugin.SubTaskContext) errors.Error {
182182 return err
183183 }
184184 issueUpdatedAt := make (map [int ]time.Time )
185+ requestedIssuesByQuery := sync.Map {}
185186 err = apiCollector .InitGraphQLCollector (api.GraphqlCollectorArgs {
186187 GraphqlClient : data .GraphqlClient ,
187188 Input : iterator ,
@@ -195,21 +196,22 @@ func CollectIssues(taskCtx plugin.SubTaskContext) errors.Error {
195196 ownerName := strings .Split (data .Options .Name , "/" )
196197 inputIssues := reqData .Input .([]interface {})
197198 outputIssues := []map [string ]interface {}{}
198- query . requestedIssues = make (map [int ]missingGithubIssueRef , len (inputIssues ))
199+ requestedIssues : = make (map [int ]missingGithubIssueRef , len (inputIssues ))
199200 for _ , i := range inputIssues {
200201 inputIssue := i .(* models.GithubIssue )
201202 outputIssues = append (outputIssues , map [string ]interface {}{
202203 `number` : graphql .Int (inputIssue .Number ),
203204 })
204205 issueUpdatedAt [inputIssue .Number ] = inputIssue .GithubUpdatedAt
205- query . requestedIssues [inputIssue .Number ] = missingGithubIssueRef {
206+ requestedIssues [inputIssue .Number ] = missingGithubIssueRef {
206207 ConnectionId : inputIssue .ConnectionId ,
207208 RepoId : inputIssue .RepoId ,
208209 GithubId : inputIssue .GithubId ,
209210 Number : inputIssue .Number ,
210211 RawDataOrigin : inputIssue .RawDataOrigin ,
211212 }
212213 }
214+ requestedIssuesByQuery .Store (query , requestedIssues )
213215 variables := map [string ]interface {}{
214216 "issue" : outputIssues ,
215217 "owner" : graphql .String (ownerName [0 ]),
@@ -219,6 +221,11 @@ func CollectIssues(taskCtx plugin.SubTaskContext) errors.Error {
219221 },
220222 ResponseParser : func (queryWrapper any ) (messages []json.RawMessage , err errors.Error ) {
221223 query := queryWrapper .(* GraphqlQueryIssueDetailWrapper )
224+ v , ok := requestedIssuesByQuery .LoadAndDelete (query )
225+ var requestedIssues map [int ]missingGithubIssueRef
226+ if ok {
227+ requestedIssues = v .(map [int ]missingGithubIssueRef )
228+ }
222229 issues := query .Repository .Issues
223230 for _ , rawL := range issues {
224231 if rawL .DatabaseId == 0 || rawL .Number == 0 {
@@ -228,7 +235,7 @@ func CollectIssues(taskCtx plugin.SubTaskContext) errors.Error {
228235 messages = append (messages , errors .Must1 (json .Marshal (rawL )))
229236 }
230237 }
231- missingIssues := findMissingGithubIssues (query . requestedIssues , issues )
238+ missingIssues := findMissingGithubIssues (requestedIssues , issues )
232239 if len (missingIssues ) > 0 {
233240 err = cleanupMissingGithubIssues (db , taskCtx .GetLogger (), missingIssues )
234241 }
0 commit comments