Megosztás a következőn keresztül:


Azure Cosmos DB a Gremlin-kiszolgáló válaszfejléceihez

A KÖVETKEZŐKRE VONATKOZIK: Gremlin

Ez a cikk azokat a fejléceket ismerteti, amelyeket az Azure Cosmos DB for Gremlin-kiszolgáló kérés végrehajtásakor visszatér a hívóhoz. Ezek a fejlécek hasznosak a kérések teljesítményének hibaelhárításához, az Azure Cosmos DB szolgáltatással natív módon integrálható alkalmazás létrehozásához és az ügyfelek támogatásának egyszerűsítéséhez.

Ne feledje, hogy a fejlécek függőségének figyelembe vételével az alkalmazás hordozhatóságát más Gremlin-implementációkra korlátozza. Cserébe szorosabb integrációt fog elérni a Gremlinhez készült Azure Cosmos DB-vel. Ezek a fejlécek nem TinkerPop szabványnak számítanak.

Fejlécek

Fejléc Típus Mintaérték Ha szerepel a csomagban Magyarázat
x-ms-request-charge double 11.3243 Sikeres és sikertelen A kérelemegységekben (RU/s vagy kérelemegységekben ) felhasznált gyűjtemény- vagy adatbázis-átviteli sebesség mennyisége részleges válaszüzenetekhez. Ez a fejléc minden folytatásban megtalálható a több adattömbből áll. Egy adott választömb terhelését tükrözi. Ez a fejléc csak egyetlen választömbből álló kérések esetén felel meg a bejárás teljes költségének. Az összetett bejárások többségénél azonban ez az érték részleges költséget jelent.
x-ms-total-request-charge double 423.987 Sikeres és sikertelen A kérelemegységekben (RU/s vagy KÉRELEM) felhasznált gyűjtemény- vagy adatbázis-átviteli sebesség mennyisége a teljes kérelemhez. Ez a fejléc minden folytatásban megtalálható a több adattömbből áll. A kérelem kezdete óta halmozott díjat jelez. Az utolsó adattömb fejlécének értéke a kérelem teljes díját jelzi.
x-ms-server-time-ms double 13.75 Sikeres és sikertelen Ez a fejléc késési hibaelhárítási célokra is elérhető. Ez azt jelzi, hogy ezredmásodpercben mennyi ideig tartott az Azure Cosmos DB for Gremlin-kiszolgáló végrehajtása és részleges válaszüzenet létrehozása. Ha ennek a fejlécnek az értékét használja, és összehasonlítja az általános kéréskésés alkalmazásokkal, kiszámíthatja a hálózati késés többletterhelését.
x-ms-total-server-time-ms double 130.512 Sikeres és sikertelen A Gremlin-kiszolgálóhoz készült Azure Cosmos DB teljes időtartama ezredmásodpercben a teljes bejárás végrehajtásához szükséges. Ez a fejléc minden részleges válaszban szerepel. Ez a kérelem kezdete óta eltelt halmozott végrehajtási időt jelöli. Az utolsó válasz a teljes végrehajtási időt jelzi. Ez a fejléc hasznos az ügyfél és a kiszolgáló közötti különbségtételhez a késés forrásaként. Összehasonlíthatja az ügyfél bejárási végrehajtási idejét a fejléc értékével.
x-ms-status-code hosszú 200 Sikeres és sikertelen A fejléc a kérés teljesítésének vagy befejezésének belső okát jelzi. Az alkalmazásnak javasoljuk, hogy vizsgálja meg ennek a fejlécnek az értékét, és tegyen korrekciós műveletet.
x-ms-substatus-code hosszú 1003 Csak hiba Az Azure Cosmos DB egy többmodelles adatbázis, amely az egyesített tárolási rétegre épül. Ez a fejléc további elemzéseket tartalmaz a hiba okáról, ha a hiba a magas rendelkezésre állású verem alsó rétegében fordul elő. Az alkalmazásnak ajánlott ezt a fejlécet tárolnia, és használnia, amikor kapcsolatba lép az Azure Cosmos DB ügyfélszolgálatával. Ennek a fejlécnek az értéke hasznos az Azure Cosmos DB mérnöke számára a gyors hibaelhárításhoz.
x-ms-retry-after-ms sztring (TimeSpan) "00:00:03.9500000" Csak hiba Ez az élőfej egy .NET TimeSpan típusú sztring-ábrázolás. Ez az érték csak a kiosztott átviteli sebesség kimerülése miatt meghiúsult kérelmekben lesz feltüntetve. Az alkalmazásnak újra be kell küldenie a bejárást a megfelelő idő elteltével.
x-ms-activity-id sztring (Guid) "A9218E01-3A3A-4716-9636-5BD86B056613" Sikeres és sikertelen A fejléc egy kérés egyedi kiszolgálóoldali azonosítóját tartalmazza. A kiszolgáló minden kéréshez egyedi azonosítót rendel nyomon követés céljából. Az alkalmazásoknak naplózniuk kell a kiszolgáló által visszaadott tevékenységazonosítókat olyan kérések esetén, amelyekről az ügyfelek kapcsolatba szeretnének lépni az ügyfélszolgálattal. Az Azure Cosmos DB támogatási személyzete az Azure Cosmos DB szolgáltatás telemetriai adataiban megtalálja az azonosítók által adott kéréseket.

Állapotkódok

A kiszolgáló által az állapotattribútumhoz x-ms-status-code visszaadott leggyakoribb kódok az alábbiakban találhatók.

Állapot Magyarázat
401 A rendszer hibaüzenetet "Unauthorized: Invalid credentials provided" ad vissza, ha a hitelesítési jelszó nem egyezik az Azure Cosmos DB-fiókkulcsokkal. Lépjen az Azure Cosmos DB for Gremlin-fiókjához az Azure Portalon, és győződjön meg arról, hogy a kulcs helyes.
404 Egyidejű műveletek, amelyek ugyanazon él vagy csúcs egyidejű törlését és frissítését kísérlik meg. Az "Owner resource does not exist" (Tulajdonos-erőforrás nem létezik) hibaüzenet azt jelzi, hogy a kapcsolati paraméterekben /dbs/<database name>/colls/<collection or graph name> formátumban megadott adatbázis vagy gyűjtemény helytelen.
409 "Conflicting request to resource has been attempted. Retry to avoid conflicts." Ez általában akkor fordul elő, ha a gráfban már létezik egy adott azonosítójú csúcspont vagy él.
412 Az állapotkód hibaüzenettel "PreconditionFailedException": One of the specified pre-condition is not metegészül ki. Ez a hiba azt jelzi, hogy optimista egyidejűség-vezérlési szabálysértés történt egy él vagy csúcs olvasása és a módosítás utáni visszaírása között. Ez a hiba leggyakrabban a tulajdonság módosítása, például g.V('identifier').property('name','value'). A Gremlin motor felolvassa a csúcsot, módosítja és visszaírja. Ha egy másik bejárás fut párhuzamosan, és ugyanazt a csúcsot vagy élt próbál meg írni, az egyiknél ez a hiba jelenik meg. Az alkalmazásnak újra be kell küldenie a bejárást a kiszolgálónak.
429 A kérelem le lett szabályozva, és az x-ms-retry-after-ms értékkel megadott idő elteltével érdemes megismételni
500 Ha egy hibaüzenetben megtalálható a(z) "NotFoundException: Entity with the specified id does not exist in the system.", az azt jelzi, hogy egy adatbázis és/vagy gyűjtemény újra létre lett hozva ugyanazzal a névvel. Ez a hiba 5 percen belül eltűnik, amint a módosítás propagálja és érvényteleníti a gyorsítótárakat a különböző Azure Cosmos DB-összetevőkben. A hiba elkerüléséhez minden alkalommal egyedi adatbázis- és gyűjteményneveket használjon.
1000 Ez az állapotkód akkor jelenik meg, ha a kiszolgáló sikeresen elemezte az üzenetet, de nem tudta végrehajtani. Ez általában a lekérdezéssel kapcsolatos problémát jelez.
1001 Ezt a kódot akkor adja vissza a rendszer, ha a kiszolgáló befejezi a bejárási végrehajtást, de nem sikerül szerializálni a választ az ügyfélnek. Ez a hiba akkor fordulhat elő, ha a bejárás összetett eredményt hoz létre, amely túl nagy, vagy nem felel meg a TinkerPop protokoll specifikációinak. Az alkalmazásnak egyszerűsítenie kell a bejárást, amikor ez a hiba jelentkezik.
1003 "Query exceeded memory limit. Bytes Consumed: XXX, Max: YYY" akkor lesz visszaadva, ha a bejárás túllépi az engedélyezett memóriakorlátot. A memóriakorlát bejárásonként 2 GB .
1004 Ez az állapotkód hibás gráfkérelmet jelez. A kérelem hibásan formázható, ha nem sikerül a deszerializálás, a nem érték típusú deszerializálása értéktípusként vagy nem támogatott gremlin műveletként történik. Az alkalmazás nem próbálkozzon újra a kéréssel, mert az nem lesz sikeres.
1007 Ez az állapotkód általában hibaüzenettel "Could not process request. Underlying connection has been closed."jelenik meg. Ez a helyzet akkor fordulhat elő, ha az ügyfélillesztő olyan kapcsolatot próbál használni, amelyet a kiszolgáló bezár. Az alkalmazásnak újra meg kell próbálkoznia a bejárással egy másik kapcsolaton.
1008 Az Azure Cosmos DB for Gremlin-kiszolgáló megszakíthatja a kapcsolatokat a fürt forgalmának újraegyensúlyozásához. Az ügyfélillesztőknek kezelnie kell ezt a helyzetet, és csak élő kapcsolatokat kell használniuk a kérések kiszolgálóra való küldéséhez. Előfordulhat, hogy az ügyfélillesztők nem észlelik a kapcsolat lezárását. Ha az alkalmazás hibát tapasztal, "Connection is too busy. Please retry after sometime or open more connections." újra meg kell próbálkoznia egy másik kapcsolaton való bejárással.
1009 A művelet nem fejeződött be a megadott időpontban, és a kiszolgáló megszakította. A bejárások gyors futtatásához optimalizálja a bejárásokat úgy, hogy a bejárás minden ugrásán szűri a csúcsokat vagy éleket a szűk keresési hatókörre. A kérelem időtúllépése alapértelmezés szerint 60 másodperc.

Példák

Egy Gremlin.Net alapuló mintaügyfél-alkalmazás, amely egy állapotattribútumot olvas be:

// 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.
}

Példa a Gremlin Java-ügyfél állapotattribútumának olvasására:

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
    }
  }
}

Következő lépések