Skip to content

Commit 49959f6

Browse files
authored
fix(github_graphql): keep requestedIssues out of GraphQL query in Collect Issues (#8855)
Signed-off-by: yamoyamoto <yamo7yamoto@gmail.com>
1 parent 19ee801 commit 49959f6

1 file changed

Lines changed: 12 additions & 5 deletions

File tree

backend/plugins/github_graphql/tasks/issue_collector.go

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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

5455
type 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

Comments
 (0)