Memecahkan masalah kegagalan API middleware

Sebagian besar API middleware menampilkan objek SdvResult. Jika berhasil, objek ini akan berisi objek hasil yang diharapkan. Jika gagal, objek ini akan berisi objek SdvStatus, yang menunjukkan perilaku atau kondisi error yang tidak terduga, yang sering kali diidentifikasi oleh kode error, seperti Internal, Unavailable, atau DataLoss.

Halaman ini membantu Anda memecahkan masalah kode error ini.

Memecahkan masalah kegagalan pendaftaran dan pembuatan

Kegagalan pendaftaran dan pembuatan biasanya terjadi saat Anda mencoba membuat atau mendaftarkan layanan yang tidak valid.

Tidak dapat membuat layanan kedua

Error:

Error Internal.

Penyebab:

Anda mencoba mendaftarkan instance paket layanan yang sama persis (nama dan ID instance) dua kali.

Perbaikan:

Jangan mencoba mendaftarkan instance paket layanan yang sama persis (nama dan ID instance) dua kali.

Tidak dapat menghapus paket layanan duplikat

Error:

Status(-3, EX_ILLEGAL_ARGUMENT)

Penyebab:

Anda mencoba menghapus paket layanan duplikat yang tidak ada.

Perbaikan:

Jangan mencoba menghapus paket layanan duplikat yang tidak ada.

Tidak dapat mengambil instance penayang untuk mengirim pesan

Error:

Panggilan ke take_publisher() menampilkan none.

Penyebab:

Anda memanggil take_publisher() dua kali untuk varian yang sama dari instance paket layanan yang sama.

Perbaikan:

Jangan memanggil take_publisher() dua kali untuk varian yang sama dari instance paket layanan yang sama.

Tidak dapat membuat Pelanggan, Pengamat, Histori, atau InstantReader

Error:

Error Unavailable.

Penyebab:

Anda mencoba membuat Subscriber, Observer, History, atau InstantReader untuk penayang yang tidak ada atau yang telah dibatalkan pendaftarannya.

Perbaikan:

Pastikan penayang ada atau terdaftar sebelum mencoba membuat Subscriber, Observer, History, atau InstantReader untuk penayang.

Tidak dapat membuat klien RPC

Error:

Error Unavailable

Penyebab:

Anda mencoba membuat klien RPC untuk nama unit server yang tidak ada atau tidak terdaftar.

Perbaikan:

Pastikan server ada dan terdaftar sebelum membuat klien RPC.

Memecahkan masalah kegagalan komunikasi

Kegagalan komunikasi dapat terjadi setelah layanan dieksekusi dan mulai berkomunikasi dengan layanan lain.

Memecahkan masalah pembatalan pendaftaran penayang

Error dapat terjadi saat penayang membatalkan pendaftaran saat pembacanya masih aktif.

read_next_messages() Pelanggan menampilkan daftar kosong

Error:

read_next_messages() berhasil, tetapi menampilkan daftar kosong.

Penyebab:

Penayang dibatalkan pendaftarannya saat pembacanya aktif.

Perbaikan:

Gunakan pelanggan atau histori dengan aliran ketersediaan. Jika pesan terakhir aliran ketersediaan tidak tersedia, penayang akan dibatalkan pendaftarannya dan tidak ada pesan baru.

next() Pengamat menampilkan error internal

Error:

next() menampilkan error Internal.

Penyebab:

Penayang dibatalkan pendaftarannya saat pembacanya aktif.

Perbaikan:

Gunakan pelanggan atau histori dengan aliran ketersediaan. Jika pesan terakhir aliran ketersediaan tidak tersedia, penayang akan dihapus dan tidak ada pesan baru.

read_from_history() Histori tidak menampilkan pesan baru

Error:

read_from_history() tidak menampilkan pesan baru; hanya menampilkan pesan lama.

Penyebab:

Penayang dibatalkan pendaftarannya saat pembacanya aktif.

Perbaikan:

Gunakan pelanggan atau histori dengan aliran ketersediaan. Jika pesan terakhir aliran ketersediaan tidak tersedia, penayang akan dihapus dan tidak ada pesan baru.

read_latest_message() InstantReader menampilkan error internal

Error:

read_latest_message() menampilkan error Internal.

Penyebab:

Penayang dibatalkan pendaftarannya saat pembacanya aktif.

Perbaikan:

Gunakan pelanggan atau histori dengan aliran ketersediaan. Jika pesan terakhir aliran ketersediaan tidak tersedia, penayang akan dihapus dan tidak ada pesan baru.

Memecahkan masalah antrean pesan kosong

Error dapat terjadi saat mencoba membaca dari antrean pesan kosong.

read_next_messages() Pelanggan menampilkan daftar kosong

Error:

read_next_messages() berhasil menampilkan daftar kosong.

Penyebab:

Penayang aktif, tetapi belum mengirim pesan.

Perbaikan:

Gunakan pelanggan atau histori dengan aliran ketersediaan. Jika pesan terakhir aliran ketersediaan tersedia, penayang akan aktif dan tidak ada pesan baru.

next() Pengamat menampilkan error internal

Error:

next() menampilkan error Internal.

Penyebab:

Penayang aktif, tetapi belum mengirim pesan.

Perbaikan:

Gunakan pelanggan atau histori dengan aliran ketersediaan. Jika pesan terakhir aliran ketersediaan tersedia, penayang akan aktif dan tidak ada pesan baru.

read_from_history() Histori tidak menampilkan pesan baru

Error:

read_from_history() berhasil menampilkan daftar kosong.

Penyebab:

Penayang aktif, tetapi belum mengirim pesan.

Perbaikan:

Gunakan pelanggan atau histori dengan aliran ketersediaan. Jika pesan terakhir aliran ketersediaan tersedia, penayang akan aktif dan tidak ada pesan baru.

read_latest_message() InstantReader menampilkan error internal

Error:

read_latest_message() menampilkan error Internal.

Penyebab:

Penayang aktif, tetapi belum mengirim pesan.

Perbaikan:

Gunakan pelanggan atau histori dengan aliran ketersediaan. Jika pesan terakhir aliran ketersediaan tersedia, penayang akan aktif dan tidak ada pesan baru.

Memecahkan masalah overflow buffer atau kehilangan data

Error dapat terjadi saat penayang mengirim pesan dengan kecepatan lebih tinggi daripada yang dapat digunakan pembaca.

Pembacaan pertama Pelanggan setelah overflow menampilkan error DataLoss

Error:

read_next_message() menampilkan error DataLoss.

Penyebab:

Penayang mengirim pesan dengan kecepatan lebih tinggi daripada yang dapat digunakan pembaca.

Perbaikan:

next() pertama Pengamat setelah overflow menampilkan error DataLoss

Error:

next() menampilkan error DataLoss.

Penyebab:

Penayang mengirim pesan dengan kecepatan lebih tinggi daripada yang dapat digunakan pembaca.

Perbaikan: Kemungkinan perbaikan adalah:

  • Penayang memublikasikan dengan kecepatan yang lebih lambat. Misalnya, Anda mungkin memiliki variabel dengan stempel waktu pesan terbaru. Jika waktu saat ini kurang dari waktu publikasi terbaru ditambah delta, Anda tidak akan memublikasikan pesan. Dengan mekanisme ini, paling banyak satu pesan per delta yang dipublikasikan.

  • Konsumen menggunakan objek InstantRead, bukan pengamat. Objek InstantRead tidak menampilkan error overflow dan selalu menampilkan pesan terakhir. Jika pesan terakhir adalah satu-satunya pesan yang penting bagi Anda, Anda dapat menggunakan objek InstantRead, bukan pengamat.

  • Konsumen menerapkan pengambilan sampel. Jika solusi Anda memiliki penayang (P1) yang memublikasikan pesan lebih cepat daripada yang dapat dibaca oleh pengamat (01), Anda dapat membuat penayang (P2) dan pengamat (02) baru untuk mengakomodasi perbedaan kecepatan publikasi dan pembacaan.

    Misalnya, P1 memublikasikan pesan setiap 10 md, tetapi O1 hanya dapat membaca satu pesan setiap 100 md dan menghapus sembilan pesan yang tersisa. Untuk mengatasi perbedaan ini, buat solusi yang mengikuti langkah-langkah berikut:

    1. P1 memublikasikan pesan ke O2.
    2. O2 membaca satu pesan dan menghapus sembilan pesan.
    3. O2 mengirim satu pesan yang telah dibaca ke P2.
    4. P2 mengirim satu pesan yang telah dibaca ke O1.
    5. O1 membaca satu pesan setiap sepuluh detik.

    Contoh kode berikut menunjukkan cara menerapkan skenario pengambilan sampel ini:

    int discarded_message = 10;
    
    while (true) {
    message m = O2.read_message();
    if discarded_message == 10 {
      discarded_message = 0;
      P2.publish(m);
    } else {
     discarded_message ++;
    }
    }
    

Pembacaan histori tidak lengkap

Error:

Pesan hilang sebelum salinan histori. Tidak ada notifikasi error langsung saat membaca.

Penyebab:

Penayang mengirim pesan dengan kecepatan lebih tinggi daripada yang dapat digunakan pembaca.

Perbaikan:

InstantReader hanya membaca pesan terakhir

Error:

Pesan hilang sebelum salinan histori. Tidak ada notifikasi error langsung saat membaca.

Penyebab:

Penayang mengirim pesan dengan kecepatan lebih tinggi daripada yang dapat digunakan pembaca.

Perbaikan:

T/A

Klien RPC memanggil metode dan metode tidak tersedia

Error:

Panggilan metode gagal dengan error Unavailable.

Penyebab:

SDV tidak mengetahui nama server dan menampilkan Unavailable. Error ini ditampilkan oleh middleware jika penemuan layanan tidak menampilkan nama server yang valid.

Perbaikan:

Mulai paket layanan yang menentukan server untuk antarmuka tertentu yang ingin digunakan klien.

Implementasi sisi server menampilkan error SdvStatus

Error:

Implementasi sisi server menampilkan SdvResult yang berisi SdvStatus error, seperti SdvStatusCode::NotFound. Error tersebut dipropagasi kembali ke klien panggilan.

Penyebab:

SDV dan sistem komunikasi antara klien dan server berfungsi seperti yang diharapkan, tetapi klien membuat permintaan yang memicu error di server.

Perbaikan:

Buat permintaan yang valid dengan klien atau perbaiki server agar berhasil merespons permintaan tersebut.