Auto: Dalam repo yang belum dipublikasikan sedikit pun, batas kecepatan api pencarian terlampaui

Dibuat pada 26 Apr 2019  ·  17Komentar  ·  Sumber: intuit/auto

Jelaskan bugnya

Jika sebuah proyek memiliki banyak PR dengan label rilis lewati, maka otomatis dengan cepat mulai memicu batas tingkat API pencarian GitHub. Bahkan dengan perlindungan pembatasan tarif Octokit yang diaktifkan, kami masih melihat kasus di mana batas tarif terlampaui.

Lihat log ini sebagai contoh: https://circleci.com/gh/artsy/renovate-config/2739

Untuk Mereproduksi

Sebuah repo harus memiliki banyak >20ish PR yang tidak dipublikasikan untuk memicu efek ini.

Perilaku yang diharapkan

Proses harus pulih dengan baik jika batas kecepatan terlampaui. Idealnya titik akhir pencarian disebut less individual times.

Konteks Tambahan

Titik akhir tertentu yang terkena adalah

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

Di mana hal pada akhirnya adalah beberapa hash komit.

Saya percaya di sinilah panggilan pencarian terjadi:

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

bug released

Semua 17 komentar

Saya melakukan tes dan sepertinya Anda dapat mengelompokkan semua hash ini menjadi satu (atau setidaknya lebih sedikit) panggilan pencarian.

Coba ini:

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

Sunting : Sepertinya pencarian itu sendiri memiliki batas panjang 256 karakter sehingga akan lebih mungkin menentukan batasnya.

Saya telah bermain dengan ini selama beberapa jam sekarang dan saya belum benar-benar menemukan jawaban yang bagus. Batching sepertinya agak layak, tetapi saya tidak tahu apakah kami dapat menjamin hasil apa yang sesuai dengan hash apa sehingga mungkin tidak masuk akal.

Pembatasan tingkat membantu, tetapi umumnya gagal karena hal-hal lain dapat memanggil api pencarian lagi (misalnya repo lain yang menjalankan otomatis) yang dapat mendorongnya secara tidak sengaja.

Kita bisa menambahkan blok try-catch manual di sekitar panggilan pencarian dan melakukan setTimeout 60 detik di antara percobaan ulang. Dengan begitu jika jatuh kita coba lagi setelah menunggu sebentar.

Maksud saya, itu agak berlebihan di atas plugin pelambatan, tetapi jika itu mencegah kegagalan 🤷‍♂️ .

Catatan tambahan: Saya _finally_ bisa mendapatkan salah satu repo kami yang gagal untuk dirilis . Ketika tidak ada lalu lintas rilis lain yang terjadi, tampaknya plugin pelambatan berfungsi. Saya sedikit lebih yakin bahwa beberapa intervensi manual akan membantu memastikan proses benar-benar selesai... bahkan jika dibutuhkan _jauh_ lebih lama.

Pencarian ini seharusnya hanya dipicu jika kita tidak bisa mendapatkan PR dari pesan komit. Biasanya pada penggabungan itu ditambahkan. Mungkin PR sedang di-rebase dan tidak memiliki pesan komit untuk diuraikan.

Jika kami tidak dapat menemukan solusi, kami dapat menambahkan opsi konfigurasi untuk melewati kode ini.

Kode mencoba mencari PR untuk komit apa pun yang tidak disertakan dalam PR lain. Itu akan mendapatkan label dari PR terkait atau menambahkan label 'push-to-master'.

Saya berharap bahwa secara umum hanya menambahkan beberapa logika penanganan/coba lagi kesalahan yang lebih baik di sekitar area yang satu ini kemungkinan sudah cukup. Sangat disayangkan bahwa ada batas tarif yang kecil.

ya semoga. opsi konfigurasi agak payah karena rilis akan kehilangan sedikit informasi. Masalah ini benar-benar hanya muncul jika komit dibuat ulang dengan cara tertentu.

🙏 insyaallah kami bisa menaikkan rate limit https://twitter.com/HipsterSmoothie/status/1121912432480227328

Saya ingin tahu apakah kami dapat menghubungi dukungan GitHub untuk meningkatkan batas tarif pada integrasi pencarian auto . Cukup yakin sudah ada set header melalui Octokit. Mereka mungkin tidak melakukannya dengan cara sekali saja .

Sementara itu saya akan mengerjakan beberapa logika coba lagi.

Apa yang akan benar-benar luar biasa adalah titik akhir API baru untuk mencocokkan komit sewenang-wenang dengan PR. Maka kita tidak perlu mencari sama sekali

Itu memang. Saya khawatir tidak mungkin kita akan melihat sesuatu seperti itu dalam waktu dekat.

Mungkin kita bisa berdebat dengan api graphql untuk mencari semua hash komit dalam satu permintaan. Padahal aku belum bermain-main dengannya. Atau pernah menggunakan graphql

pembaruan: Saya benar-benar tidak tahu graphql lol

Saya pikir itu mungkin berhasil

{
  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, itu menjanjikan.

Oh ya! Saya pikir ini benar-benar akan berhasil.

Gunakan ini untuk melihat status batas kecepatan kueri saat ini:

{
rateLimit {
    limit
    cost
    remaining
    resetAt
  }
}

Anda ingin PR atau Anda ingin saya?


:rocket: Masalah dirilis di v4.9.2 :rocket:

Apakah halaman ini membantu?
0 / 5 - 0 peringkat