Svarshuvuden för Azure Cosmos DB for Gremlin-server
GÄLLER FÖR: Gremlin
Den här artikeln beskriver rubriker som Azure Cosmos DB for Gremlin-servern returnerar till anroparen vid körning av begäran. De här rubrikerna är användbara för att felsöka prestanda för begäranden, skapa program som integreras internt med Azure Cosmos DB-tjänsten och förenkla kundsupporten.
Tänk på att om du är beroende av dessa huvuden begränsar du programmets portabilitet till andra Gremlin-implementeringar. I gengäld får du en bättre integrering med Azure Cosmos DB för Gremlin. Dessa rubriker är inte en TinkerPop-standard.
Header | Typ | Exempelvärde | När den inkluderas | Förklaring |
---|---|---|---|---|
x-ms-request-charge | dubbel | 11.3243 | Lyckade och misslyckade | Mängden samlings- eller databasdataflöde som förbrukas i enheter för begäran (RU/s eller RU:er) för ett partiellt svarsmeddelande. Den här rubriken finns i varje fortsättning för begäranden som har flera segment. Den återspeglar kostnaden för ett visst svarssegment. Endast för begäranden som består av ett enda svarssegment matchar den här rubriken den totala kostnaden för bläddering. Men för de flesta komplexa blädderingar representerar det här värdet en partiell kostnad. |
x-ms-total-request-charge | dubbel | 423.987 | Lyckade och misslyckade | Mängd samlings- eller databasdataflöde som förbrukas i enheter för begäran (RU/s eller RU:er) för hela begäran. Den här rubriken finns i varje fortsättning för begäranden som har flera segment. Det anger kumulativ avgift sedan begäran påbörjades. Värdet för det här huvudet i det sista segmentet anger en fullständig avgift för begäran. |
x-ms-server-time-ms | dubbel | 13.75 | Lyckade och misslyckade | Det här huvudet ingår i felsökningssyfte för svarstid. Det anger hur lång tid i millisekunder som Azure Cosmos DB for Gremlin-servern tog att köra och skapa ett partiellt svarsmeddelande. Om du använder värdet för det här huvudet och jämför det med övergripande program för svarstid för begäran kan du beräkna omkostnader för nätverksfördröjning. |
x-ms-total-server-time-ms | dubbel | 130.512 | Lyckade och misslyckade | Total tid, i millisekunder, som Azure Cosmos DB för Gremlin-servern tog för att köra hela bläddering. Den här rubriken ingår i varje partiellt svar. Den representerar kumulativ körningstid sedan begäran startades. Det senaste svaret anger total körningstid. Det här huvudet är användbart för att skilja mellan klient och server som en källa till svarstid. Du kan jämföra bläddreringstid på klienten med värdet för det här huvudet. |
x-ms-status-code | lång | 200 | Lyckade och misslyckade | Rubriken anger den interna orsaken till att begäran har slutförts eller avslutats. Programmet rekommenderas att titta på värdet för det här huvudet och vidta korrigerande åtgärder. |
x-ms-substatus-code | lång | 1003 | Endast fel | Azure Cosmos DB är en databas med flera modeller som bygger på enhetligt lagringslager. Det här huvudet innehåller ytterligare insikter om felorsaken när felet inträffar i lägre lager av hög tillgänglighetsstack. Programmet rekommenderas att lagra det här huvudet och använda det när du kontaktar Azure Cosmos DB-kundsupporten. Värdet för det här huvudet är användbart för Azure Cosmos DB-tekniker för snabb felsökning. |
x-ms-retry-after-ms | string (TimeSpan) | "00:00:03.9500000" | Endast fel | Det här huvudet är en strängrepresentation av en .NET TimeSpan-typ . Det här värdet inkluderas endast i begäranden som inte har etablerats på grund av dataflödesöverbelastning. Programmet bör skicka bläddrering igen efter instruerad tidsperiod. |
x-ms-activity-id | sträng (Guid) | "A9218E01-3A3A-4716-9636-5BD86B056613" | Lyckade och misslyckade | Huvudet innehåller en unik identifierare på serversidan för en begäran. Varje begäran tilldelas en unik identifierare av servern i spårningssyfte. Program bör logga aktivitetsidentifierare som returneras av servern för förfrågningar som kunder kanske vill kontakta kundsupport om. Azure Cosmos DB-supportpersonal kan hitta specifika begäranden från dessa identifierare i Azure Cosmos DB-tjänstens telemetri. |
De vanligaste koderna som returneras för x-ms-status-code
statusattribut av servern visas nedan.
Status | Förklaring |
---|---|
401 | Felmeddelandet "Unauthorized: Invalid credentials provided" returneras när autentiseringslösenordet inte matchar Azure Cosmos DB-kontonyckeln. Gå till ditt Azure Cosmos DB för Gremlin-konto i Azure-portalen och bekräfta att nyckeln är korrekt. |
404 | Samtidiga åtgärder som försöker ta bort och uppdatera samma kant eller hörn samtidigt. Felmeddelandet "Owner resource does not exist" anger att den angivna databasen eller samlingen har det felaktiga formatet /dbs/<database name>/colls/<collection or graph name> för anslutningsparametrarna. |
409 | "Conflicting request to resource has been attempted. Retry to avoid conflicts." Detta inträffar vanligtvis när ett hörn eller en kant med en identifierare redan finns i grafen. |
412 | Statuskoden kompletteras med felmeddelandet "PreconditionFailedException": One of the specified pre-condition is not met . Det här felet tyder på en optimistisk samtidighetskontrollsöverträdelse mellan att läsa en kant eller ett hörn och skriva tillbaka det till arkivet efter ändringen. De vanligaste situationerna när det här felet inträffar är egenskapsändring, till exempel g.V('identifier').property('name','value') . Gremlin-motorn skulle läsa hörnen, ändra det och skriva tillbaka det. Om det finns en annan bläddering som körs parallellt och försöker skriva samma hörn eller en kant får en av dem det här felet. Programmet bör skicka bläddering till servern igen. |
429 | Begäran begränsades och kan utföras på nytt efter värdet i x-ms-retry-after-ms |
500 | Ett felmeddelande som innehåller "NotFoundException: Entity with the specified id does not exist in the system." anger att en databas och/eller samling har återskapats med samma namn. Det här felet försvinner inom 5 minuter när ändringen sprids och ogiltigförklarar cacheminnen i olika Azure Cosmos DB-komponenter. Undvik det här problemet genom att använda unika databas- och samlingsnamn varje gång. |
1000 | Den här statuskoden returneras när servern parsade ett meddelande men inte kunde köras. Det indikerar vanligtvis ett problem med frågan. |
1001 | Den här koden returneras när servern slutför blädderingskörningen, men det går inte att serialisera svaret tillbaka till klienten. Det här felet kan inträffa när bläddering genererar komplexa resultat, som är för stora eller inte överensstämmer med TinkerPop-protokollspecifikationen. Programmet bör förenkla bläddering när det uppstår det här felet. |
1003 | "Query exceeded memory limit. Bytes Consumed: XXX, Max: YYY" returneras när bläddering överskrider tillåten minnesgräns. Minnesgränsen är 2 GB per bläddering. |
1004 | Den här statuskoden anger felaktig grafbegäran. Begäran kan missbildas när den misslyckas med deserialiseringen, icke-värdetypen deserialiseras som värdetyp eller om gremlinåtgärden inte stöds begärd. Programmet bör inte försöka begäran igen eftersom den inte lyckas. |
1007 | Vanligtvis returneras den här statuskoden med felmeddelandet "Could not process request. Underlying connection has been closed." . Den här situationen kan inträffa om klientdrivrutinen försöker använda en anslutning som stängs av servern. Programmet bör försöka bläddra igen på en annan anslutning. |
1008 | Azure Cosmos DB för Gremlin-servern kan avsluta anslutningar för att balansera om trafiken i klustret. Klientdrivrutiner bör hantera den här situationen och endast använda live-anslutningar för att skicka begäranden till servern. Ibland kan det hända att klientdrivrutiner inte upptäcker att anslutningen stängdes. När ett fel "Connection is too busy. Please retry after sometime or open more connections." uppstår i programmet bör det försöka bläddra igen på en annan anslutning. |
1009 | Åtgärden slutfördes inte under den tilldelade tiden och avbröts av servern. Optimera dina bläddringsflöden så att de körs snabbt genom att filtrera hörn eller kanter på varje hopp av bläddring för att begränsa sökomfånget. Standardvärdet för tidsgränsen för begäran är 60 sekunder. |
Ett exempelklientprogram baserat på Gremlin.Net som läser ett statusattribut:
// 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.
}
Ett exempel som visar hur du läser statusattribut från Gremlin Java-klienten:
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
}
}
}