Strange 405 responses depending on `first` argument value & fields requested


#1

Hi there,

I was playing around with the first argument values of my queries to try to reverse engineer the max number of nodes per request (already contacted support by email about this – essentially I don’t understand why for the complex query the number of PR comments isn’t 50 * 20 * 10).

In any case, I discovered that in some cases the v4 API returns 405 responses depending on the first argument values and/or the number of fields requested. Is that how the API indicates that the max number of nodes has been exceeded? I’ve seen other responses saying that I exceeded the maximum complexity of 215, so I assumed that’s corresponded to the max number of node limit.

Here’s my query:

const query = `query {
  repository(owner: "some owner", name: "some repo") {
    pullRequests(first: 20) {
      edges {
        node {
          comments(first: 10) {
            edges {
              node {
                author {
                  avatarUrl
                  login
                  url
                }
                body
                bodyHTML
                createdAt
              }
            }
            pageInfo {
              endCursor
              hasNextPage
            }
            totalCount
          }
          commits(first: 10) {
            edges {
              node {
                commit {
                  author {
                    avatarUrl
                    date
                    email
                    name
                    user {
                      avatarUrl
                      login
                      name
                      url
                    }
                  }
                  authoredByCommitter
                  commitUrl
                  committedDate
                  committer {
                    avatarUrl
                    date
                    email
                    name
                    user {
                      avatarUrl
                      login
                      name
                      url
                    }
                  }
                  message
                  messageBody
                  messageBodyHTML
                  messageHeadline
                  messageHeadlineHTML
                  oid
                  status {
                    contexts {
                      context
                      createdAt
                      creator {
                        avatarUrl
                        login
                        url
                      }
                      description
                      state
                      targetUrl
                    }
                    state
                  }
                  tree {
                    entries {
                      mode
                      name
                      object {
                        oid
                      }
                      type
                    }
                    oid
                  }
                  url
                }
                url
              }
            }
            pageInfo {
              endCursor
              hasNextPage
            }
            totalCount
          }
        }
      }
      pageInfo {
        endCursor
        hasNextPage
      }
      totalCount
    }
  }
}`;

I’m using the API authenticated as an integration installation.

The query above currently gets a 405 response. Drop the number of PRs to 15 and it gets a 200. Keep the number of PRs at 20 but drop either PR comments or commits and it also gets a 200.

From what I can tell this request doesn’t exceed the max number of nodes. What’s going on?

Thanks!
Nick


Sporadic 502s fetching PR data
#2

Hey again Nick!

I tried running this query against the github/linguist repository earlier and wasn’t able to reproduce the 405.

Similar to my follow-up question in "Resource not accessible by integration" inconsistently, should be accessible, could you share a curl -v request illustrating the 405 you experienced so I can take a look (headers, response, everything)? That would help us investigate on our side. :thumbsup:


#3

Nick - I also wanted to touch on this. Our team is still looking into this and we’ll be sure to write back to you once I get an update! :bow:


#4

Cheers @francisfuzz! Here’s the curl -v output for the variations mentioned in my original post. All requests were made with the same integration installation OAuth token.

1) Get 20 PRs for a repo with 10 comments & 10 commits – Unsuccessful (405)

curl -v -H "Authorization: Bearer token" -X POST -d '{ "query": "query { repository(owner: \"some owner\", name: \"some repo\") { pullRequests(first: 20) { edges { node { comments(first: 10) { edges { node { author { avatarUrl login url } body bodyHTML createdAt } } } commits(first: 10) { edges { node { commit { author { avatarUrl date email name user { avatarUrl login name url } } authoredByCommitter commitUrl committedDate committer { avatarUrl date email name user { avatarUrl login name url } } message messageBody messageBodyHTML messageHeadline messageHeadlineHTML oid status { contexts { context createdAt creator { avatarUrl login url } description state targetUrl } state } tree { entries { mode name object { oid } type } oid } url } url } } } } } } } }" }' https://api.github.com/graphql
Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 192.30.253.117...
* TCP_NODELAY set
* Connected to api.github.com (192.30.253.117) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate: *.github.com
* Server certificate: DigiCert SHA2 High Assurance Server CA
* Server certificate: DigiCert High Assurance EV Root CA
> POST /graphql HTTP/1.1
> Host: api.github.com
> User-Agent: curl/7.51.0
> Accept: */*
> Authorization: Bearer token
> Content-Length: 719
> Content-Type: application/x-www-form-urlencoded
> 
* upload completely sent off: 719 out of 719 bytes
< HTTP/1.1 405 Not Allowed
< Server: GitHub.com
< Date: Fri, 26 May 2017 08:33:39 GMT
< Content-Type: text/html
< Content-Length: 166
< X-GitHub-Request-Id: CB6C:29AC:773E35:8CF457:5927E858
< 
<html>
<head><title>405 Not Allowed</title></head>
<body bgcolor="white">
<center><h1>405 Not Allowed</h1></center>
<hr><center>nginx</center>
</body>
</html>
* Curl_http_done: called premature == 0
* Connection #0 to host api.github.com left intact

2a) Get 15 PRs for a repo with 10 comments & 10 commits – Successful (200)

curl -v -H "Authorization: Bearer token" -X POST -d '{ "query": "query { repository(owner: \"some owner\", name: \"some repo\") { pullRequests(first: 15) { edges { node { comments(first: 10) { edges { node { author { avatarUrl login url } body bodyHTML createdAt } } } commits(first: 10) { edges { node { commit { author { avatarUrl date email name user { avatarUrl login name url } } authoredByCommitter commitUrl committedDate committer { avatarUrl date email name user { avatarUrl login name url } } message messageBody messageBodyHTML messageHeadline messageHeadlineHTML oid status { contexts { context createdAt creator { avatarUrl login url } description state targetUrl } state } tree { entries { mode name object { oid } type } oid } url } url } } } } } } } }" }' https://api.github.com/graphql
Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 192.30.253.117...
* TCP_NODELAY set
* Connected to api.github.com (192.30.253.117) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate: *.github.com
* Server certificate: DigiCert SHA2 High Assurance Server CA
* Server certificate: DigiCert High Assurance EV Root CA
> POST /graphql HTTP/1.1
> Host: api.github.com
> User-Agent: curl/7.51.0
> Accept: */*
> Authorization: Bearer token
> Content-Length: 719
> Content-Type: application/x-www-form-urlencoded
> 
* upload completely sent off: 719 out of 719 bytes
< HTTP/1.1 200 OK
< Server: GitHub.com
< Date: Fri, 26 May 2017 08:37:38 GMT
< Content-Type: application/json; charset=utf-8
< Content-Length: 547482
< Status: 200 OK
< X-RateLimit-Limit: 5000
< X-RateLimit-Remaining: 4995
< X-RateLimit-Reset: 1495791165
< Cache-Control: private, max-age=60, s-maxage=60
< Vary: Accept, Authorization, Cookie, X-GitHub-OTP
< ETag: "66b98764a9c66cf6e02f1d330e36030d"
< X-GitHub-Media-Type: github.v3; format=json
< Access-Control-Expose-Headers: ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval
< Access-Control-Allow-Origin: *
< Content-Security-Policy: default-src 'none'
< Strict-Transport-Security: max-age=31536000; includeSubdomains; preload
< X-Content-Type-Options: nosniff
< X-Frame-Options: deny
< X-XSS-Protection: 1; mode=block
< Vary: Accept-Encoding
< X-Served-By: e14705a23c085afeff5e104b1fc3922a
< X-GitHub-Request-Id: CB97:29AF:781953:8DD40F:5927E94A
< 
{"data":{"repository":{ ... } } }
* Curl_http_done: called premature == 0
* Connection #0 to host api.github.com left intact

2b) Get 15 PRs for a repo with 10 comments & 10 commits – Unsuccessful (405)

I discovered that (very) roughly 10% of the time this same request (see 2a) returns a 405.

curl -v -H "Authorization: Bearer token" -X POST -d '{ "query": "query { repository(owner: \"some owner\", name: \"some repo\") { pullRequests(first: 15) { edges { node { comments(first: 10) { edges { node { author { avatarUrl login url } body bodyHTML createdAt } } } commits(first: 10) { edges { node { commit { author { avatarUrl date email name user { avatarUrl login name url } } authoredByCommitter commitUrl committedDate committer { avatarUrl date email name user { avatarUrl login name url } } message messageBody messageBodyHTML messageHeadline messageHeadlineHTML oid status { contexts { context createdAt creator { avatarUrl login url } description state targetUrl } state } tree { entries { mode name object { oid } type } oid } url } url } } } } } } } }" }' https://api.github.com/graphql
Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 192.30.253.117...
* TCP_NODELAY set
* Connected to api.github.com (192.30.253.117) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate: *.github.com
* Server certificate: DigiCert SHA2 High Assurance Server CA
* Server certificate: DigiCert High Assurance EV Root CA
> POST /graphql HTTP/1.1
> Host: api.github.com
> User-Agent: curl/7.51.0
> Accept: */*
> Authorization: Bearer token
> Content-Length: 719
> Content-Type: application/x-www-form-urlencoded
> 
* upload completely sent off: 719 out of 719 bytes
< HTTP/1.1 405 Not Allowed
< Server: GitHub.com
< Date: Fri, 26 May 2017 08:48:11 GMT
< Content-Type: text/html
< Content-Length: 166
< X-GitHub-Request-Id: CBE8:29AC:7A491B:90A60D:5927EBC1
< 
<html>
<head><title>405 Not Allowed</title></head>
<body bgcolor="white">
<center><h1>405 Not Allowed</h1></center>
<hr><center>nginx</center>
</body>
</html>
* Curl_http_done: called premature == 0
* Connection #0 to host api.github.com left intact

3) Get 20 PRs for a repo with 10 commits – Successful (200)

curl -v -H "Authorization: Bearer token" -X POST -d '{ "query": "query { repository(owner: \"some owner\", name: \"some repo\") { pullRequests(first: 20) { edges { node { commits(first: 10) { edges { node { commit { author { avatarUrl date email name user { avatarUrl login name url } } authoredByCommitter commitUrl committedDate committer { avatarUrl date email name user { avatarUrl login name url } } message messageBody messageBodyHTML messageHeadline messageHeadlineHTML oid status { contexts { context createdAt creator { avatarUrl login url } description state targetUrl } state } tree { entries { mode name object { oid } type } oid } url } url } } } } } } } }" }' https://api.github.com/graphql
Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 192.30.253.116...
* TCP_NODELAY set
* Connected to api.github.com (192.30.253.116) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate: *.github.com
* Server certificate: DigiCert SHA2 High Assurance Server CA
* Server certificate: DigiCert High Assurance EV Root CA
> POST /graphql HTTP/1.1
> Host: api.github.com
> User-Agent: curl/7.51.0
> Accept: */*
> Authorization: Bearer token
> Content-Length: 621
> Content-Type: application/x-www-form-urlencoded
> 
* upload completely sent off: 621 out of 621 bytes
< HTTP/1.1 200 OK
< Server: GitHub.com
< Date: Fri, 26 May 2017 08:40:15 GMT
< Content-Type: application/json; charset=utf-8
< Content-Length: 551913
< Status: 200 OK
< X-RateLimit-Limit: 5000
< X-RateLimit-Remaining: 4989
< X-RateLimit-Reset: 1495791165
< Cache-Control: private, max-age=60, s-maxage=60
< Vary: Accept, Authorization, Cookie, X-GitHub-OTP
< ETag: "90b77fe2508a95e042d345b4e3a374f3"
< X-GitHub-Media-Type: github.v3; format=json
< Access-Control-Expose-Headers: ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval
< Access-Control-Allow-Origin: *
< Content-Security-Policy: default-src 'none'
< Strict-Transport-Security: max-age=31536000; includeSubdomains; preload
< X-Content-Type-Options: nosniff
< X-Frame-Options: deny
< X-XSS-Protection: 1; mode=block
< X-GitHub-Request-Id: CBAE:29AF:78A7C2:8E81A6:5927E9E5
< 
{"data":{"repository":{ ... } } }
* Curl_http_done: called premature == 0
* Connection #0 to host api.github.com left intact

4) Get 20 PRs for a repo with 10 comments – Successful (200)

curl -v -H "Authorization: Bearer token" -X POST -d '{ "query": "query { repository(owner: \"some owner\", name: \"some repo\") { pullRequests(first: 20) { edges { node { comments(first: 10) { edges { node { author { avatarUrl login url } body bodyHTML createdAt } } } } } } } }" }' https://api.github.com/graphql
Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 192.30.253.117...
* TCP_NODELAY set
* Connected to api.github.com (192.30.253.117) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate: *.github.com
* Server certificate: DigiCert SHA2 High Assurance Server CA
* Server certificate: DigiCert High Assurance EV Root CA
> POST /graphql HTTP/1.1
> Host: api.github.com
> User-Agent: curl/7.51.0
> Accept: */*
> Authorization: Bearer token
> Content-Length: 230
> Content-Type: application/x-www-form-urlencoded
> 
* upload completely sent off: 230 out of 230 bytes
< HTTP/1.1 200 OK
< Server: GitHub.com
< Date: Fri, 26 May 2017 08:41:51 GMT
< Content-Type: application/json; charset=utf-8
< Content-Length: 127567
< Status: 200 OK
< X-RateLimit-Limit: 5000
< X-RateLimit-Remaining: 4988
< X-RateLimit-Reset: 1495791165
< Cache-Control: private, max-age=60, s-maxage=60
< Vary: Accept, Authorization, Cookie, X-GitHub-OTP
< ETag: "f20c7518437c43ed55956923a7113516"
< X-GitHub-Media-Type: github.v3; format=json
< Access-Control-Expose-Headers: ETag, Link, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval
< Access-Control-Allow-Origin: *
< Content-Security-Policy: default-src 'none'
< Strict-Transport-Security: max-age=31536000; includeSubdomains; preload
< X-Content-Type-Options: nosniff
< X-Frame-Options: deny
< X-XSS-Protection: 1; mode=block
< Vary: Accept-Encoding
< X-Served-By: d0b3c2c33a23690498aa8e70a435a259
< X-GitHub-Request-Id: CBB2:29AF:79017A:8EEE6B:5927EA4D
< 
{"data":{"repository":{ ... } } }
* Curl_http_done: called premature == 0
* Connection #0 to host api.github.com left intact

Hope this helps! Thanks


#5

@francisfuzz any update on this (the max number of nodes)? I’m really confused by how this works. Currently trying to understand how one of my queries is “requesting up to 12,000 possible nodes”.

Requesting for 100 PRs for one repo. For each PR, getting 10 assignees, 100 comments, and 100 commits. Following the procedure described in the docs I land on 1 + 1 * 100 + 1 * 100 * 10 + 1 * 100 * 100 + 1 * 100 * 100 = 21101… No idea how to get to 12000.

Here’s my query:

query {
  repository(owner: "some owner" name: "some repo") {
    pullRequests(last: 100 ) {
      edges {
        node {
          author {
            avatarUrl
            login
            url
          }
          baseRefName
          body
          closed
          createdAt
          headRefName
          locked
          mergeCommit {
            author {
              avatarUrl
              date
              email
              name
              user {
                avatarUrl
                login
                name
                url
              }
            }
            authoredByCommitter
            committedDate
            committer {
              avatarUrl
              date
              email
              name
              user {
                avatarUrl
                login
                name
                url
              }
            }
            messageBody
            messageBodyHTML
            messageHeadline
            messageHeadlineHTML
            oid
            status {
              contexts {
                context
                createdAt
                creator {
                  avatarUrl
                  login
                  url
                }
                description
                state
                targetUrl
              }
              state
            }
            tree {
              entries {
                mode
                name
                object {
                  oid
                }
                type
              }
              oid
            }
            url
          }
          mergeable
          mergedAt
          number
          state
          suggestedReviewers {
            isAuthor
            isCommenter
            reviewer {
              avatarUrl
              login
              name
              url
            }
          }
          title
          url
          assignees(first: 10 ) {
            edges {
              node {
                avatarUrl
                login
                name
                url
              }
            }
            pageInfo { endCursor hasNextPage }
            totalCount
          }
          comments(first: 100 ) {
            edges {
              node {
                author {
                  avatarUrl
                  login
                  url
                }
                body
                bodyHTML
                createdAt
              }
            }
            pageInfo { endCursor hasNextPage }
            totalCount
          }
          commits(first: 100 ) {
            edges {
              node {
                commit {
                  author {
                    avatarUrl
                    date
                    email
                    name
                    user {
                      avatarUrl
                      login
                      name
                      url
                    }
                  }
                  authoredByCommitter
                  commitUrl
                  committedDate
                  committer {
                    avatarUrl
                    date
                    email
                    name
                    user {
                      avatarUrl
                      login
                      name
                      url
                    }
                  }
                  message
                  messageBody
                  messageBodyHTML
                  messageHeadline
                  messageHeadlineHTML
                  oid
                  status {
                    contexts {
                      context
                      createdAt
                      creator {
                        avatarUrl
                        login
                        url
                      }
                      description
                      state
                      targetUrl
                    }
                    state
                  }
                  tree {
                    entries {
                      mode
                      name
                      object {
                        oid
                      }
                      type
                    }
                    oid
                  }
                  url
                }
                url
              }
            }
            pageInfo { endCursor hasNextPage }
            totalCount
          }
        }
      }
    }
  }
}

Thanks


#6

Hey @nomeyer, thanks for the follow-up! I’m writing back here to say we haven’t forgotten about you! I’ve checked in with the team again internally and asked them for their advice on your question.


#7

FYI – After working (/ fighting) with the API some more, I thought it was worth letting GitHub staff & readers that the strange 405 responses are quite a bit more frequent than I initially thought.

It seems to be somewhat correlated to the amount of data I expect the API to return (more data, more likely 405s). Seems related to this thread.

Let me know if there’s anything I can do to help, quite keen to get these issues ironed out so I’d be happy to provide more diagnostic information.


Bug in rate limit calculation for issue labels – excessive points consumed
#8

If anyone is / was wondering about this – I’ve just noticed the docs have been updated.


#9

@nomeyer Do those original queries you posted still error out? If so, could you share the owner/repo name?


#10

Hi @gjtorikian, thanks for checking in. Yes I’m still observing the same behaviour. Repo owner is Stepsize and repo name is layer_desktop.

Let me know if I can run some other tests / provide more info to help you fix this.

Here’s a sample failure:
curl -v -H "Authorization: Bearer token" -X POST -d '{ "query": "query { repository(owner: \"Stepsize\", name: \"layer_desktop\") { pullRequests(first: 20) { edges { node { comments(first: 10) { edges { node { author { avatarUrl login url } body bodyHTML createdAt } } } commits(first: 10) { edges { node { commit { author { avatarUrl date email name user { avatarUrl login name url } } authoredByCommitter commitUrl committedDate committer { avatarUrl date email name user { avatarUrl login name url } } message messageBody messageBodyHTML messageHeadline messageHeadlineHTML oid status { contexts { context createdAt creator { avatarUrl login url } description state targetUrl } state } tree { entries { mode name object { oid } type } oid } url } url } } } } } } } }" }' https://api.github.com/graphql

Note: Unnecessary use of -X or --request, POST is already inferred.
*   Trying 192.30.253.116...
* TCP_NODELAY set
* Connected to api.github.com (192.30.253.116) port 443 (#0)
* TLS 1.2 connection using TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
* Server certificate: *.github.com
* Server certificate: DigiCert SHA2 High Assurance Server CA
* Server certificate: DigiCert High Assurance EV Root CA
> POST /graphql HTTP/1.1
> Host: api.github.com
> User-Agent: curl/7.51.0
> Accept: */*
> Authorization: Bearer token
> Content-Length: 719
> Content-Type: application/x-www-form-urlencoded
> 
* upload completely sent off: 719 out of 719 bytes
< HTTP/1.1 405 Not Allowed
< Server: GitHub.com
< Date: Fri, 14 Jul 2017 10:32:08 GMT
< Content-Type: text/html
< Content-Length: 166
< X-GitHub-Request-Id: D409:2129:BDAA90:1655430:59689D9E
< 
<html>
<head><title>405 Not Allowed</title></head>
<body bgcolor="white">
<center><h1>405 Not Allowed</h1></center>
<hr><center>nginx</center>
</body>
</html>
* Curl_http_done: called premature == 0
* Connection #0 to host api.github.com left intact

#11

Hi, just wanted to add that this is still happening to me as well.

Here is a 405-ing curl for requesting 100 PRs from 100 repos. Simply reducing the number of objects and/or fields requested results in 200s.

I’m happy to help in any way possible!


#12

Edit: Someone pointed out to me that dpaste snippets expire in 1 week by default. Here’s a copy of each of those snippets: https://gist.github.com/KevOrr/37df4091e4e3dd4ee3a079dc5c11196c

I’ve already sent this message to github staff, but I figured I’ll post my research for all of you here as well:

The full list of queries I’ve had trouble with is this:

https://dpaste.de/GMCf {“owner”: “ProbablePrime”, “name”: “interactive-keyboard”} AE5B:1733:24193E:4FA98F:5988A5CC
https://dpaste.de/DD1v {“owner”: “coordt”, “name”: “ADCtheme”} DBB2:1ADA:22BC98:4B73AE:5988A290
https://dpaste.de/xNX7 {“owner”: “airencracken”, “name”: “thisisfreesoftware”} D1B7:2E35F:1EA064:3FC950:5988A2D6
https://dpaste.de/UL4y {“owner”: “LibreVR”, “name”: “Revive”} C839:0DBE:14804C:2CBDCF:5988A4B0
https://dpaste.de/7mNz {“owner”: “Machx”, “name”: “dtrace-textmate-bundle”} C839:0DBE:14804C:2CBDCF:5988A4B0
https://dpaste.de/jHkf {“owner”: “karamanolev”, “name”: “WhatManager2”} D582:2E35F:2167BE:4593B3:5988A785
https://dpaste.de/fCsO {“owner”: “foundationkit”, “name”: “FoundationKit”} E432:526F:2003E2:4A413C:5988A81A
https://dpaste.de/iKHg {“owner”: “pretix”, “name”: “pretix”} 850A:1ADC:35DA33:715D23:5988A879
https://dpaste.de/xVpw {“owner”: “malcommac”, “name”: “DMSlidingCell”} 878B:1736:371F99:797F8B:5988A903
https://dpaste.de/xVpw {“owner”: “jsierles”, “name”: “chef_cookbooks_deprecated”} C34C:526E:204241:43B21A:5988A936
https://dpaste.de/c7VM {“owner”: “prlng”, “name”: “github-for-developers”} 97CF:2E367:2278F7:51E3B9:5988AA0A
https://dpaste.de/yc6D {“owner”: “nrkbeta”, “name”: “nrkbetaquiz”} 8291:745D:2E6477:6059F0:5988AA67
https://dpaste.de/hXGn {“owner”: “stepmania”, “name”: “stepmania”} 8E4E:1ADC:37FB7F:75DA00:5988AAA3
https://dpaste.de/xVpw {“owner”: “filerock”, “name”: “FileRock-Client”} CC0A:0DC0:214D85:4B4AD6:5988A985
https://dpaste.de/xVpw {“owner”: “rollbar”, “name”: “rollbar-gem”} B1FC:0DBF:2086FF:44271B:5988AAC9

I’m not sure if the error IDs show what my query was, but I’ve included the corresponding query for each owner/name variables input. I believe the issue lies in going from users to pullRequests, issues, contributedRepositories, etc. To verify, I looked at the first query. It only failed with mentionableUsers(first: 2), but not 1. The second user here was “BooDoo”. Trying this query (https://dpaste.de/gj5D) was very surprising (E929:0DBE:18AE59:35D15F:5988B048). I’m sure the others have similar errors.

I checked this theory with the second query, user “angusshire” (https://dpaste.de/bDN0, CD45:2E367:26CB19:5C75A7:5988B192). I haven’t had time to check all the above queries.

To be clear, my actual queries were more complex (https://dpaste.de/W4ec), but I reduced each one down to an almost minimal example that would cause it to fail. And those last two examples were absolute minimal examples that caused it to fail.

Probably the reason why many of you have noticed that asking for more data results in a higher likelihood of errors is that by asking for more users, it makes it more likely to run across users in the database where asking for even 1 PR or issue or will error out the entire query.


#13

Thanks for the details @KevOrr! Are the errors consistent for you? Or do you eventually get the data for the error-prone queries after retrying a few times?


#14

We have a pretty good idea of what’s causing this, and a fix is pending review.


#15

I’ve just pushed up a fix for this, and things seem to be going well. Could someone give it a try?


#16

Hey @gjtorikian, I ran our data processing pipeline a few times and didn’t get any 405s! :100: