Auto: Em um repo que não é publicado há um tempo, os limites da API de pesquisa são excedidos

Criado em 26 abr. 2019  ·  17Comentários  ·  Fonte: intuit/auto

Descreva o bug

Se um projeto tiver muitos PRs com rótulos de liberação de pular, automaticamente começa a acionar o limite de taxa da API de pesquisa do GitHub. Mesmo com a proteção de limitação de taxa do Octokit habilitada, ainda estamos vendo casos em que os limites de taxa estão sendo excedidos.

Veja este registro como exemplo: https://circleci.com/gh/artsy/renovate-config/2739

Reproduzir

Um repo deve ter mais de 20 PRs não publicados para acionar esse efeito.

Comportamento esperado

O processo deve se recuperar normalmente se os limites de taxa forem excedidos. Idealmente, o ponto de extremidade de pesquisa é chamado de menos tempos individuais.

Contexto Adicional

O endpoint específico que está sendo atingido é

GET https://api.github.com/search/issues?q=repo:artsy/renovate-config 2868a054c07dc4fd36d53a3df1bcc11cbf45e9f4

Onde a coisa no final é algum hash de commit.

Acredito que é aqui que a chamada de pesquisa está acontecendo:

https://github.com/intuit/auto/blob/221b2931c93859711f8bed5a20f9b572a9ae3054/src/release.ts#L200

bug released

Todos 17 comentários

Fiz um teste e parece que você pode agrupar todos esses hashes em uma única (ou pelo menos menos) chamadas de pesquisa.

Experimente isto:

https://api.github.com/search/issues?q=repo%3Aartsy%2Frenovate-config%209b43a6dc2d27967c72914247994afbf7d56167f6%20a76005e3705a4e46d7b7ea6abe544937f5e4e9e4%205b63a5bb1294c15dd2423fce74c119638b0c2716%204dc11106f467c2631374a384db4ef46b4867251e

Editar : parece que a própria pesquisa tem um limite de comprimento de 256 caracteres, de modo que é mais provável que determine o limite.

Eu brinquei com isso por algumas horas agora e ainda não encontrei nenhuma boa resposta. O batch parece ser de alguma forma viável, mas não sei se podemos garantir quais resultados vão com qual hash, então isso pode estar fora de questão.

A limitação de taxa ajuda, mas geralmente falha porque outras coisas podem estar chamando a API de pesquisa novamente (outros repos executando automaticamente, por exemplo), o que poderia empurrá-la involuntariamente.

Poderíamos adicionar um bloco try-catch manual em torno da chamada de pesquisa e fazer um setTimeout de 60 segundos entre as tentativas. Assim, se falhar, tentamos novamente depois de esperar um pouco.

Quer dizer, isso é um pouco redundante em cima do plug-in de limitação, mas se impede que as coisas falhem 🤷‍♂️.

Nota lateral: Eu estava _finally_ capaz de obter um dos nossos repos deixando de liberar . Quando nenhum outro tráfego de lançamento está acontecendo, parece que o plug-in de limitação funciona. Estou um pouco mais convencido de que alguma intervenção manual ajudaria a garantir que o processo realmente fosse concluído ... mesmo que demore _muito_ mais.

Esta pesquisa só deve ser acionada se não conseguirmos obter um PR da mensagem de confirmação. Normalmente, na mesclagem, ele é adicionado. Talvez os PRs estejam sendo realocados e não tenham nenhuma mensagem de commit para analisar.

Se não conseguirmos encontrar uma solução, podemos apenas adicionar uma opção de configuração para pular este código.

O código está tentando encontrar um PR para qualquer commit que não esteja incluído em outro PR. Ele obterá os rótulos do PR associado ou adicionará o rótulo 'push-to-master'.

Espero que, em geral, apenas adicionar alguma lógica de tratamento de erros / nova tentativa melhor em torno dessa área seja suficiente. É uma pena que haja um limite de taxa pequeno.

sim, espero. a opção de configuração seria meio ruim, já que faltaria um pouco de informação no lançamento. Esse problema realmente só surge se os commits forem realocados de uma determinada maneira.

Aos deuses, podemos aumentar o limite da taxa por meio de https://twitter.com/HipsterSmoothie/status/1121912432480227328

Gostaria de saber se poderíamos entrar em contato com o suporte do GitHub para levá-los a aumentar o limite de taxa na integração de pesquisa de auto . Tenho certeza de que já existe um cabeçalho definido via Octokit. Eles podem não fazer isso de uma forma única 🤷‍♂.

Enquanto isso, vou trabalhar em alguma lógica de nova tentativa extra.

O que seria realmente incrível é um novo endpoint de API para corresponder a um commit arbitrário a um PR. Então não teríamos que pesquisar

Certamente seria. Temo que seja improvável que vejamos algo assim tão cedo.

Talvez pudéssemos disputar a API graphql para pesquisar todos os hashes de commit em uma solicitação. Eu não brinquei com isso embora. Ou já usou o Graphql

atualização: eu realmente não sei o graphql lol

Acho que pode funcionar

{
  first: search(query: "repo:artsy/renovate-config 9b43a6dc2d27967c72914247994afbf7d56167f6", type: ISSUE, first: 1) {
    edges {
      node {
        ... on PullRequest {
          number
          state
          labels(first: 10) {
            edges {
              node {
                name
              }
            }
          }
        }
      }
    }
  }
  second: search(query: "repo:artsy/renovate-config 87451a9d010500823df3c59f77e559c28c01ab9f", type: ISSUE, first: 1) {
    edges {
      node {
        ... on PullRequest {
          number
          state
          labels(first: 10) {
            edges {
              node {
                name
              }
            }
          }
        }
      }
    }
  }
}

https://developer.github.com/v4/explorer/

Ohhh, isso é promissor.

Oh sim! Acho que vai funcionar totalmente.

Use para ver o status do limite de taxa atual da consulta:

{
rateLimit {
    limit
    cost
    remaining
    resetAt
  }
}

Você quer fazer RP ou quer que eu faça?


: rocket: O problema foi lançado na v4.9.2: rocket:

Esta página foi útil?
0 / 5 - 0 avaliações