Hlavičky odpovědí serveru Gremlin ve službě Azure Cosmos DB
PLATÍ PRO: Skřítek
Tento článek popisuje hlavičky, které server Azure Cosmos DB pro Gremlin vrátí volajícímu po provedení požadavku. Tyto hlavičky jsou užitečné pro řešení potíží s výkonem požadavků, vytváření aplikace, která se nativně integruje se službou Azure Cosmos DB a zjednodušuje zákaznickou podporu.
Mějte na paměti, že závislost na těchto hlavičkách omezujete přenositelnost aplikace na jiné implementace Gremlin. Na základě toho získáváte užší integraci se službou Azure Cosmos DB pro Gremlin. Tyto hlavičky nejsou standardem TinkerPop.
Hlavičky
Hlavička | Typ | Ukázková hodnota | Při zahrnutí | Vysvětlení |
---|---|---|---|---|
x-ms-request-charge | double | 11.3243 | Úspěch a selhání | Množství kolekce nebo propustnosti databáze spotřebované v jednotkách žádostí (RU/s nebo RU) pro částečnou zprávu odpovědi Tato hlavička se nachází v každém pokračování pro požadavky, které mají více bloků dat. Odráží poplatek za konkrétní blok odpovědí. Pouze u požadavků, které se skládají z jediného bloku odpovědí, odpovídá této hlavičce celkové náklady na procházení. U většiny složitých procházení však tato hodnota představuje částečné náklady. |
x-ms-total-request-charge | double | 423.987 | Úspěch a selhání | Množství propustnosti kolekce nebo databáze spotřebované v jednotkách žádostí (RU/s nebo RU) pro celou žádost. Tato hlavička se nachází v každém pokračování pro požadavky, které mají více bloků dat. Označuje kumulativní poplatek od začátku požadavku. Hodnota této hlavičky v posledním bloku dat označuje úplné poplatky za požadavek. |
x-ms-server-time-ms | double | 13.75 | Úspěch a selhání | Tato hlavička je zahrnutá pro účely řešení potíží s latencí. Udává dobu v milisekundách, kterou trvalo spuštění serveru Azure Cosmos DB pro Gremlin a vytvoření částečné zprávy odpovědi. Pomocí hodnoty této hlavičky a porovnáním s celkovými aplikacemi latence požadavků můžou vypočítat režii na latenci sítě. |
x-ms-total-server-time-ms | double | 130.512 | Úspěch a selhání | Celková doba v milisekundách, kterou trvalo spuštění celého procházení serveru Azure Cosmos DB pro Gremlin. Tato hlavička je součástí každé částečné odpovědi. Představuje kumulativní čas spuštění od začátku požadavku. Poslední odpověď označuje celkovou dobu provádění. Tato hlavička je užitečná k rozlišení mezi klientem a serverem jako zdrojem latence. Čas procházení v klientovi můžete porovnat s hodnotou této hlavičky. |
x-ms-status-code | long | 200 | Úspěch a selhání | Hlavička označuje interní důvod dokončení nebo ukončení požadavku. Aplikace se doporučuje podívat se na hodnotu této hlavičky a provést nápravnou akci. |
x-ms-substatus-code | long | 1003 | Pouze selhání | Azure Cosmos DB je vícemodelová databáze, která je postavená na sjednocené vrstvě úložiště. Tato hlavička obsahuje další přehledy o příčině selhání, když dojde k selhání v nižších vrstvách zásobníku vysoké dostupnosti. Aplikaci doporučujeme uložit tuto hlavičku a použít ji při kontaktování zákaznické podpory služby Azure Cosmos DB. Hodnota této hlavičky je užitečná pro inženýra služby Azure Cosmos DB pro rychlé řešení potíží. |
x-ms-retry-after-ms | string (TimeSpan) | "00:00:03.9500000" | Pouze selhání | Toto záhlaví je řetězcová reprezentace typu TimeSpan .NET. Tato hodnota bude zahrnuta pouze v požadavcích, které selhaly kvůli vyčerpání zřízené propustnosti. Aplikace by měla po uplynutí poskytnuté lhůty znovu odeslat procházení. |
x-ms-activity-id | string (Guid) | "A9218E01-3A3A-4716-9636-5BD86B056613" | Úspěch a selhání | Hlavička obsahuje jedinečný identifikátor požadavku na straně serveru. Každému požadavku je serverem přiřazen jedinečný identifikátor pro účely sledování. Aplikace by měly protokolovat identifikátory aktivit vrácené serverem pro žádosti, o kterých by zákazníci mohli chtít kontaktovat zákaznickou podporu. Pracovníci podpory služby Azure Cosmos DB můžou vyhledat konkrétní požadavky podle těchto identifikátorů v telemetrii služby Azure Cosmos DB. |
Stavové kódy
Nejběžnější kódy vrácené pro x-ms-status-code
atribut stavu serverem jsou uvedeny níže.
Stav | Vysvětlení |
---|---|
401 | Chybová zpráva "Unauthorized: Invalid credentials provided" se vrátí, když heslo pro ověřování neodpovídá klíči účtu služby Azure Cosmos DB. Na webu Azure Portal přejděte ke svému účtu Azure Cosmos DB for Gremlin a ověřte, že je klíč správný. |
404 | Souběžné operace, které se pokusí odstranit a aktualizovat stejný okraj nebo vrchol současně. Chybová zpráva "Owner resource does not exist" značí, že v parametrech připojení je nesprávně zadaná databáze nebo kolekce ve formátu /dbs/<database name>/colls/<collection or graph name> . |
409 | "Conflicting request to resource has been attempted. Retry to avoid conflicts." K tomu obvykle dochází v případě, že v grafu již existuje vrchol nebo hrana s identifikátorem. |
412 | Stavový kód je doplněn chybovou zprávou "PreconditionFailedException": One of the specified pre-condition is not met . Tato chyba značí porušení kontroly optimistické souběžnosti mezi čtením okraje nebo vrcholu a zápisem zpět do úložiště po úpravě. Nejběžnějšími situacemi, kdy k této chybě dojde, je úprava vlastnosti, například g.V('identifier').property('name','value') . Modul Gremlin přečte vrchol, upraví ho a zapíše zpět. Pokud paralelně probíhá další procházení, které se pokouší napsat stejný vrchol nebo hranu, zobrazí se tato chyba. Aplikace by měla znovu odeslat procházení na server. |
429 | Došlo k omezení požadavku a po uplynutí doby uvedené v hlavičce x-ms-retry-after-ms by se měl zopakovat. |
500 | Chybová zpráva obsahující "NotFoundException: Entity with the specified id does not exist in the system." značí, že se znovu vytvořila databáze nebo kolekce se stejným názvem. Tato chyba zmizí během 5 minut, protože se změna rozšíří a zneplatní mezipaměti v různých komponentách služby Azure Cosmos DB. Pokud se chcete tomuto problému vyhnout, používejte vždy jedinečné názvy databází a kolekcí. |
1000 | Tento stavový kód se vrátí, když server úspěšně parsoval zprávu, ale nemohl se spustit. Obvykle značí problém s dotazem. |
1001 | Tento kód se vrátí, když server dokončí procházení, ale nepodaří se serializovat odpověď zpět klientovi. K této chybě může dojít, když procházení generuje složitý výsledek, který je příliš velký nebo neodpovídá specifikaci protokolu TinkerPop. Při výskytu této chyby by aplikace měla procházení zjednodušit. |
1003 | "Query exceeded memory limit. Bytes Consumed: XXX, Max: YYY" se vrátí, když procházení překročí povolený limit paměti. Limit paměti je 2 GB na procházení. |
1004 | Tento stavový kód označuje poškozený požadavek na graf. Požadavek může být poškozený, pokud selže deserializace, typ bez hodnoty je deserializován jako typ hodnoty nebo nepodporovaná operace gremlin požadována. Aplikace by neměla požadavek opakovat, protože nebude úspěšná. |
1007 | Obvykle se tento stavový kód vrátí s chybovou zprávou "Could not process request. Underlying connection has been closed." . K této situaci může dojít v případě, že se klientský ovladač pokusí použít připojení, které server zavře. Aplikace by měla procházení opakovat na jiném připojení. |
1008 | Azure Cosmos DB pro server Gremlin může ukončit připojení k obnovení rovnováhy provozu v clusteru. Klientské ovladače by měly tuto situaci zpracovat a používat pouze živá připojení k odesílání požadavků na server. Někdy klientské ovladače nemusí zjistit, že připojení bylo uzavřeno. Když aplikace narazí na chybu, "Connection is too busy. Please retry after sometime or open more connections." měla by se opakovat procházení na jiném připojení. |
1009 | Operace se nedokončila v přiděleném čase a server ji zrušil. Optimalizujte procházení tak, aby se rychle spouštěly filtrováním vrcholů nebo hran na každém segmentu procházení, abyste zúžili obor vyhledávání. Výchozí časový limit požadavku je 60 sekund. |
Ukázky
Ukázková klientská aplikace založená na Gremlin.Net, která čte jeden atribut stavu:
// 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říklad, který ukazuje, jak číst atribut stavu z klienta 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
}
}
}