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 met egé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
}
}
}