Bagikan melalui


Header respons server Azure Cosmos DB untuk Gremlin

BERLAKU UNTUK: Gremlin

Artikel ini membahas header yang dikembalikan azure Cosmos DB untuk server Gremlin ke pemanggil setelah eksekusi permintaan. Header ini berguna untuk memecahkan masalah performa permintaan, membangun aplikasi yang terintegrasi secara asli dengan layanan Azure Cosmos DB dan menyederhanakan dukungan pelanggan.

Perlu diingat bahwa mengambil ketergantungan pada header ini Anda membatasi portabilitas aplikasi Anda ke implementasi Gremlin lainnya. Sebagai gantinya, Anda mendapatkan integrasi yang lebih ketat dengan Azure Cosmos DB untuk Gremlin. Header ini bukan standar TinkerPop.

Header

Header Jenis Nilai Sampel Bila Disertakan Penjelasan
x-ms-request-charge ganda 11.3243 Keberhasilan dan Kegagalan Jumlah throughput pengumpulan atau basis data yang digunakan dalam unit permintaan (RU/s atau RUs) untuk pesan respons parsial. Header ini hadir dalam setiap kelanjutan untuk permintaan yang memiliki beberapa gugus. Ini mencerminkan muatan dari gugus respon tertentu. Hanya untuk permintaan yang terdiri dari satu gugus respon header ini yang cocok dengan total biaya traversal. Namun, untuk sebagian besar traversal kompleks nilai ini mewakili biaya parsial.
x-ms-total-request-charge ganda 423.987 Keberhasilan dan Kegagalan Jumlah throughput pengumpulan atau basis data yang digunakan dalam unit permintaan (RU/s atau RUs) untuk seluruh permintaan. Header ini hadir dalam setiap kelanjutan untuk permintaan yang memiliki beberapa gugus. Header ini menunjukkan biaya kumulatif sejak awal permintaan. Nilai header ini di bagian terakhir menunjukkan biaya permintaan lengkap.
x-ms-server-time-ms ganda 13.75 Keberhasilan dan Kegagalan Header ini disertakan untuk tujuan pemecahan masalah latensi. Ini menunjukkan jumlah waktu, dalam milidetik, bahwa Azure Cosmos DB untuk server Gremlin mengambil untuk mengeksekusi dan menghasilkan pesan respons parsial. Menggunakan nilai header ini dan membandingkannya dengan aplikasi latensi permintaan secara keseluruhan dapat menghitung latensi jaringan di atas kepala.
x-ms-total-server-time-ms ganda 130.512 Keberhasilan dan Kegagalan Total waktu, dalam milidetik, yang diambil Azure Cosmos DB untuk server Gremlin untuk mengeksekusi seluruh traversal. Header ini disertakan dalam setiap respons parsial. Ini mewakili waktu eksekusi kumulatif sejak awal permintaan. Respons terakhir menunjukkan total waktu eksekusi. Header ini berguna untuk membedakan antara klien dan server sebagai sumber latensi. Anda dapat membandingkan waktu eksekusi traversal pada klien dengan nilai header ini.
x-ms-status-code long 200 Keberhasilan dan Kegagalan Header menunjukkan alasan internal untuk penyelesaian atau penghentian permintaan. Aplikasi disarankan untuk melihat nilai header ini dan mengambil tindakan korektif.
x-ms-substatus-code long 1003 Kegagalan Saja Azure Cosmos DB adalah database multi-model yang dibangun di atas lapisan penyimpanan terpadu. Header ini berisi wawasan tambahan tentang alasan kegagalan ketika kegagalan terjadi dalam lapisan bawah tumpukan ketersediaan tinggi. Aplikasi disarankan untuk menyimpan header ini dan menggunakannya saat menghubungi dukungan pelanggan Azure Cosmos DB. Nilai header ini berguna untuk teknisi Azure Cosmos DB untuk pemecahan masalah cepat.
x-ms-retry-after-ms karakter (TimeSpan) "00:00:03.9500000" Kegagalan Saja Header ini adalah representasi karakter dari tipe TimeSpan .NET. Nilai ini hanya akan disertakan dalam permintaan gagal karena kelelahan throughput yang disediakan. Aplikasi harus mengirim kembali traversal lagi setelah periode waktu yang diinstruksikan.
x-ms-activity-id karakter (Guid) "A9218E01-3A3A-4716-9636-5BD86B056613" Keberhasilan dan Kegagalan Header berisi pengidentifikasi sisi server yang unik dari sebuah permintaan. Setiap permintaan diberi pengidentifikasi unik oleh server untuk tujuan pelacakan. Aplikasi harus mencatat pengidentifikasi aktivitas yang dikembalikan oleh server untuk permintaan yang mungkin ingin dihubungi oleh pelanggan. Personel dukungan Azure Cosmos DB dapat menemukan permintaan tertentu oleh pengidentifikasi ini di telemetri layanan Azure Cosmos DB.

Kode status

Sebagian besar kode umum yang dikembalikan untuk x-ms-status-code atribut status oleh server tercantum di bawah ini.

Status Penjelasan
401 Pesan "Unauthorized: Invalid credentials provided" kesalahan dikembalikan saat kata sandi autentikasi tidak cocok dengan kunci akun Azure Cosmos DB. Navigasikan ke akun Azure Cosmos DB for Gremlin Anda di portal Azure dan konfirmasikan bahwa kunci sudah benar.
404 Operasi bersamaan yang mencoba menghapus dan memperbarui tepi atau vertex yang sama secara bersamaan. Pesan kesalahan "Owner resource does not exist" menunjukkan bahwa database atau koleksi yang ditentukan salah dalam parameter koneksi dalam /dbs/<database name>/colls/<collection or graph name> format.
409 "Conflicting request to resource has been attempted. Retry to avoid conflicts." Ini biasanya terjadi ketika vertex atau tepi dengan pengidentifikasi sudah ada di grafik.
412 Kode status dilengkapi dengan pesan kesalahan "PreconditionFailedException": One of the specified pre-condition is not met . Kesalahan ini menunjukkan pelanggaran kontrol konkurensi optimis antara membaca tepi atau vertex dan menulisnya kembali ke toko setelah modifikasi. Situasi paling umum ketika kesalahan ini terjadi adalah modifikasi properti, misalnya g.V('identifier').property('name','value') . Mesin Gremlin akan membaca vertex, memodifikasinya, dan menulisnya kembali. Jika ada traversal lain yang berjalan secara paralel mencoba menulis vertex atau tepi yang sama, salah satu dari mereka akan menerima kesalahan ini. Aplikasi harus mengirimkan traversal ke server lagi.
429 Permintaan dicekik dan harus dicoba setelah nilai dalam x-ms-retry-after-ms
500 Pesan kesalahan yang "NotFoundException: Entity with the specified id does not exist in the system." berisi menunjukkan bahwa database dan/atau koleksi dibuat ulang dengan nama yang sama. Kesalahan ini akan hilang dalam waktu 5 menit saat perubahan menyebar dan membatalkan cache di komponen Azure Cosmos DB yang berbeda. Untuk menghindari masalah ini, gunakan database unik dan nama koleksi setiap saat.
1000 Kode status ini dikembalikan ketika server berhasil mengurai pesan tetapi tidak dapat dieksekusi. Biasanya menunjukkan masalah dengan kueri.
1001 Kode ini dikembalikan ketika server menyelesaikan eksekusi traversal tetapi gagal untuk menserialisasikan respons kembali ke klien. Kesalahan ini dapat terjadi ketika traversal menghasilkan hasil yang kompleks, yang terlalu besar atau tidak sesuai dengan spesifikasi protokol TinkerPop. Aplikasi harus menyederhanakan traversal ketika mengalami kesalahan ini.
1003 "Query exceeded memory limit. Bytes Consumed: XXX, Max: YYY" dikembalikan ketika traversal melebihi batas memori yang diperbolehkan. Batas memori adalah 2 GB per traversal.
1004 Kode status ini menunjukkan permintaan grafik cacat. Permintaan dapat salah bentuk ketika gagal deserialisasi, tipe non-nilai sedang dideserialisasi sebagai tipe nilai atau operasi gremlin tidak didukung yang diminta. Aplikasi tidak boleh mencoba kembali permintaan karena tidak akan berhasil.
1007 Biasanya kode status ini dikembalikan dengan pesan kesalahan "Could not process request. Underlying connection has been closed.". Situasi ini bisa terjadi jika pengandar klien coba menggunakan sambungan yang sedang ditutup oleh peladen. Aplikasi harus mencoba kembali traversal pada koneksi yang berbeda.
1008 Azure Cosmos DB untuk server Gremlin dapat mengakhiri koneksi untuk menyeimbangkan kembali lalu lintas di kluster. Driver klien harus menangani situasi ini dan hanya menggunakan koneksi langsung untuk mengirim permintaan ke server. Terkadang driver klien mungkin tidak mendeteksi bahwa sambungan telah ditutup. Ketika aplikasi mengalami kesalahan, aplikasi "Connection is too busy. Please retry after sometime or open more connections." harus mencoba kembali traversal pada koneksi yang berbeda.
1009 Operasi ini tidak selesai dalam waktu yang dialokasikan dan dibatalkan oleh server. Optimalkan traversal Anda agar berjalan dengan cepat dengan memfilter simpul atau tepi pada setiap hop traversal untuk mempersempit lingkup pencarian. Permintaan timeout default adalah 60 detik.

Sampel

Contoh aplikasi klien berdasarkan Gremlin.Net yang membaca satu atribut status:

// Following example reads a status code and total request charge from server response attributes.
// Variable "server" is assumed to be assigned to an instance of a GremlinServer that is connected to Azure Cosmos DB account.
using (GremlinClient client = new GremlinClient(server, new GraphSON2Reader(), new GraphSON2Writer(), GremlinClient.GraphSON2MimeType))
{
  ResultSet<dynamic> responseResultSet = await GremlinClientExtensions.SubmitAsync<dynamic>(client, requestScript: "g.V().count()");
  long statusCode = (long)responseResultSet.StatusAttributes["x-ms-status-code"];
  double totalRequestCharge = (double)responseResultSet.StatusAttributes["x-ms-total-request-charge"];

  // Status code and request charge are logged into application telemetry.
}

Contoh yang menunjukkan cara membaca atribut status dari klien Gremlin Java:

try {
  ResultSet resultSet = this.client.submit("g.addV().property('id', '13')");
  List<Result> results = resultSet.all().get();

  // Process and consume results

} catch (ResponseException re) {
  // Check for known errors that need to be retried or skipped
  if (re.getStatusAttributes().isPresent()) {
    Map<String, Object> attributes = re.getStatusAttributes().get();
    int statusCode = (int) attributes.getOrDefault("x-ms-status-code", -1);

    // Now we can check for specific conditions
    if (statusCode == 409) {
        // Handle conflicting writes
      }
    }

    // Check if we need to delay retry
    if (attributes.containsKey("x-ms-retry-after-ms")) {
      // Read the value of the attribute as is
      String retryAfterTimeSpan = (String) attributes.get("x-ms-retry-after-ms"));

      // Convert the value into actionable duration
			LocalTime locaTime = LocalTime.parse(retryAfterTimeSpan);
			Duration duration = Duration.between(LocalTime.MIN, locaTime);

      // Perform a retry after "duration" interval of time has elapsed
    }
  }
}

Langkah berikutnya