Halaman ini menjelaskan kode error Spanner dan tindakan yang direkomendasikan untuk
menangani error ini. Google API, termasuk Spanner, menggunakan
kode error kanonis yang ditentukan oleh google.rpc.Code
.
Saat permintaan Spanner berhasil, API akan menampilkan kode status HTTP
200 OK
beserta data yang diminta dalam isi respons.
Jika permintaan gagal, Spanner API akan menampilkan kode status HTTP
4xx
atau 5xx
yang secara umum mengidentifikasi kegagalan serta
respons yang memberikan informasi lebih spesifik tentang error yang menyebabkan
kegagalan.
Objek respons berisi satu kolom error
yang nilainya berisi elemen berikut:
Elemen | Deskripsi |
---|---|
code |
Kode status HTTP yang secara umum mengidentifikasi kegagalan permintaan. |
message |
Informasi spesifik tentang kegagalan permintaan. |
status |
Kode error kanonis (google.rpc.Code ) untuk Google API. Kode yang mungkin ditampilkan oleh Spanner API tercantum di Kode Error. |
Jika permintaan yang dibuat dengan jenis konten application/x-protobuf
menghasilkan error, permintaan tersebut akan menampilkan pesan google.rpc.Status
serial sebagai payload.
Kode error
Cara yang direkomendasikan untuk mengklasifikasikan error adalah dengan memeriksa nilai
kode error kanonis (google.rpc.Code
). Dalam error JSON, kode ini muncul
di kolom status
. Pada error application/x-protobuf
, nilai ini ada di kolom
code
.
Kode error | Deskripsi | Tindakan yang disarankan |
---|---|---|
ABORTED |
Operasi dibatalkan, biasanya karena masalah konkurensi seperti kegagalan pemeriksaan sequencer atau pembatalan transaksi. Menunjukkan bahwa permintaan bertentangan dengan permintaan lain. | Untuk commit non-transaksional: Coba lagi permintaan atau susun ulang entitas Anda untuk mengurangi pertentangan. Untuk permintaan yang merupakan bagian dari commit transaksional: Coba lagi seluruh transaksi atau susun ulang entitas Anda untuk mengurangi pertentangan. |
ALREADY_EXISTS |
Entitas yang coba dibuat oleh klien sudah ada (misalnya, menyisipkan baris dengan kunci utama yang ada). | Jangan mencoba lagi tanpa memperbaiki masalah. |
CANCELLED |
Operasi dibatalkan, biasanya oleh pemanggil. | Coba lagi operasi tersebut. |
DEADLINE_EXCEEDED |
Batas waktu berakhir sebelum operasi selesai. | Selidiki apakah batas waktunya cukup. Gunakan batas waktu yang sesuai dengan waktu sebenarnya saat respons berguna. Perhatikan bahwa untuk operasi yang mengubah status sistem, error mungkin ditampilkan, meskipun operasi tersebut telah selesai. Untuk tips, lihat Memecahkan masalah error batas waktu terlampaui. |
FAILED_PRECONDITION |
Operasi ditolak karena prasyarat untuk permintaan tidak terpenuhi. Kolom pesan dalam respons error memberikan informasi tentang prasyarat yang gagal. Misalnya, membaca atau membuat kueri dari stempel waktu yang telah melampaui keusangan stempel waktu maksimum. | Jangan mencoba lagi tanpa memperbaiki masalah. |
INTERNAL |
Server menampilkan error. Beberapa invarian yang diperlukan oleh sistem pokok telah rusak. | Jangan mencoba lagi kecuali jika Anda memahami situasi dan penyebab error tertentu. |
INVALID_ARGUMENT |
Klien menentukan nilai yang tidak valid. Kolom pesan dalam respons error memberikan informasi tentang nilai yang tidak valid. | Jangan mencoba lagi tanpa memperbaiki masalah. |
NOT_FOUND |
Menunjukkan bahwa beberapa entity yang diminta, seperti memperbarui entity atau membuat kueri tabel atau kolom, tidak ada. | Jangan mencoba lagi tanpa memperbaiki masalah. |
OUT_OF_RANGE |
Upaya operasi dilakukan melampaui rentang yang valid. | Jangan mencoba lagi tanpa memperbaiki masalah. |
PERMISSION_DENIED |
Pengguna tidak diberi otorisasi untuk membuat permintaan. | Jangan mencoba lagi tanpa memperbaiki masalah. |
RESOURCE_EXHAUSTED |
Beberapa resource telah habis. Untuk platform administrator, project mungkin telah melampaui kuota atau seluruh sistem file kehabisan ruang. Untuk platform data, hal ini dapat terjadi jika node Spanner Anda kelebihan beban. |
Untuk platform administrator, pastikan Anda tidak melebihi kuota Spanner atau project. Jika Anda telah melampaui kuota, minta penambahan kuota atau tunggu hingga kuota direset sebelum mencoba lagi. Konfigurasikan percobaan ulang untuk menggunakan backoff eksponensial. Untuk bidang data, pastikan node Spanner Anda belum melebihi kapasitasnya. Spanner akan mencoba ulang error ini di library klien. Jika semua percobaan ulang gagal, lihat Error mekanisme kontrol alur. Secara umum, jika aplikasi Anda mengalami error RESOURCE_EXHAUSTED , perlakukan situasi tersebut seperti error UNAVAILABLE , dan coba lagi dengan backoff eksponensial. |
UNAUTHENTICATED |
Permintaan tidak memiliki kredensial autentikasi operasi yang valid. | Jangan mencoba lagi tanpa memperbaiki masalah. |
UNAVAILABLE |
Server tidak tersedia. | Coba lagi menggunakan backoff eksponensial. Perlu diketahui bahwa mencoba kembali operasi non-idempoten tidak selalu aman. |
UNIMPLEMENTED |
Operasi tidak diterapkan atau tidak didukung/diaktifkan dalam layanan ini. | Jangan mencoba lagi tanpa memperbaiki masalah. |
UNKNOWN |
Server menampilkan error yang tidak diketahui. Error yang dilaporkan oleh API yang tidak menampilkan informasi error yang mencukupi dapat dianggap sebagai error ini. | Pastikan permintaan Anda aman. Kemudian, coba lagi dengan backoff eksponensial. |
Error mekanisme kontrol alur
Spanner dapat mengaktifkan mekanisme kontrol alirannya untuk melindungi dirinya dari kelebihan beban dalam kondisi berikut:
- Ada penggunaan CPU yang tinggi di node Spanner. Jika Anda mencurigai bahwa permintaan Anda menyebabkan penggunaan CPU yang tinggi, Anda dapat menggunakan metrik penggunaan CPU untuk menyelidiki masalah tersebut.
- Mungkin ada hotspot, yang meningkatkan waktu pemrosesan permintaan. Jika Anda mencurigai bahwa permintaan Anda menyebabkan hotspot, lihat artikel Menemukan hotspot di database untuk menyelidiki masalahnya. Untuk informasi selengkapnya, lihat Visualisator Kunci.
Mekanisme kontrol alur didukung oleh library klien berikut:
Waktu keseluruhan untuk menyelesaikan permintaan tidak akan meningkat karena penggunaan
mekanisme kontrol alur. Tanpa mekanisme ini, Spanner akan menunggu
sebelum memproses permintaan dan pada akhirnya menampilkan error
DEADLINE_EXCEEDED
.
Saat mekanisme kontrol alur aktif, Spanner akan mendorong
permintaan kembali ke klien untuk dicoba lagi. Jika percobaan ulang menghabiskan seluruh batas waktu yang diberikan pengguna, klien akan menerima error RESOURCE_EXHAUSTED
.
Error ini ditampilkan jika Spanner memperkirakan bahwa waktu pemrosesan
permintaan terlalu lama. Error ini akan menyebarkan kontrol alur dan
Spanner akan mencoba lagi permintaan ke klien, bukan
mengumpulkan percobaan ulang secara internal. Hal ini memungkinkan Spanner menghindari
akumulasi konsumsi resource tambahan.