Delen via


Antwoordheaders van Azure Cosmos DB voor Gremlin-server

VAN TOEPASSING OP: Gremlin

In dit artikel worden headers behandeld die azure Cosmos DB voor Gremlin-server retourneert naar de aanroeper bij het uitvoeren van de aanvraag. Deze headers zijn handig voor het oplossen van problemen met de prestaties van aanvragen, het bouwen van een toepassing die systeemeigen is geïntegreerd met de Azure Cosmos DB-service en het vereenvoudigen van de klantondersteuning.

Houd er rekening mee dat u de afhankelijkheid van deze headers beperkt tot andere Gremlin-implementaties. Als resultaat krijgt u een strakkere integratie met Azure Cosmos DB voor Gremlin. Deze headers zijn geen TinkerPop-standaard.

Kopteksten

Koptekst Type Voorbeeldwaarde Indien opgenomen Uitleg
x-ms-request-charge dubbel 11.3243 Geslaagd en mislukt De hoeveelheid verzameling of databasedoorvoer die wordt verbruikt in aanvraageenheden (RU/s of RU's) voor een gedeeltelijk antwoordbericht. Deze header is aanwezig in elke voortzetting voor aanvragen met meerdere segmenten. Het weerspiegelt de kosten van een bepaald antwoordsegment. Alleen voor aanvragen die bestaan uit één antwoordsegment, komt deze header overeen met de totale kosten van doorkruising. Voor het merendeel van complexe doorkruisingen vertegenwoordigt deze waarde echter een gedeeltelijke kosten.
x-ms-total-request-charge dubbel 423.987 Geslaagd en mislukt De hoeveelheid verzameling of databasedoorvoer die wordt verbruikt in aanvraageenheden (RU/s of RU's) voor volledige aanvraag. Deze header is aanwezig in elke voortzetting voor aanvragen met meerdere segmenten. Dit duidt op cumulatieve kosten sinds het begin van de aanvraag. De waarde van deze header in het laatste segment geeft volledige aanvraagkosten aan.
x-ms-server-time-ms dubbel 13.75 Geslaagd en mislukt Deze header is opgenomen voor het oplossen van latentieproblemen. Het geeft aan hoe lang het duurt, in milliseconden, dat de Azure Cosmos DB voor Gremlin-server heeft geduurd om een gedeeltelijk antwoordbericht uit te voeren en te produceren. Door de waarde van deze header te gebruiken en deze te vergelijken met de totale aanvraaglatentietoepassingen, kan de overhead voor netwerklatentie worden berekend.
x-ms-total-server-time-ms dubbel 130.512 Geslaagd en mislukt Totale tijd, in milliseconden, die azure Cosmos DB voor Gremlin-server nodig heeft om volledige doorkruising uit te voeren. Deze header wordt opgenomen in elk gedeeltelijk antwoord. Het vertegenwoordigt de cumulatieve uitvoeringstijd sinds het begin van de aanvraag. Het laatste antwoord geeft de totale uitvoeringstijd aan. Deze header is handig om onderscheid te maken tussen client en server als een bron van latentie. U kunt de uitvoeringstijd van doorkruising op de client vergelijken met de waarde van deze header.
x-ms-status-code long 200 Geslaagd en mislukt Header geeft interne reden aan voor het voltooien of beëindigen van de aanvraag. De toepassing wordt aangeraden om de waarde van deze header te bekijken en corrigerende maatregelen te nemen.
x-ms-substatus-code long 1003 Alleen mislukt Azure Cosmos DB is een database met meerdere modellen die is gebouwd op basis van geïntegreerde opslaglaag. Deze header bevat aanvullende inzichten over de reden van de fout wanneer er een fout optreedt in lagere lagen van een stack met hoge beschikbaarheid. De toepassing wordt aangeraden deze header op te slaan en te gebruiken wanneer u contact op neemt met de klantondersteuning van Azure Cosmos DB. De waarde van deze header is handig voor azure Cosmos DB-engineer voor snelle probleemoplossing.
x-ms-retry-after-ms tekenreeks (Tijdspan) "00:00:03.9500000" Alleen mislukt Deze header is een tekenreeksweergave van een .NET TimeSpan-type . Deze waarde wordt alleen opgenomen in aanvragen die zijn mislukt vanwege ingerichte doorvoeruitputting. De toepassing moet traversal opnieuw indienen na de instructies.
x-ms-activity-id tekenreeks (Guid) "A9218E01-3A3A-4716-9636-5BD86B056613" Geslaagd en mislukt De header bevat een unieke id aan de serverzijde van een aanvraag. Aan elke aanvraag wordt een unieke id door de server toegewezen voor traceringsdoeleinden. Toepassingen moeten activiteiten-id's registreren die door de server worden geretourneerd voor aanvragen waarvoor klanten mogelijk contact willen opnemen met de klantondersteuning. Het ondersteuningspersoneel van Azure Cosmos DB kan specifieke aanvragen vinden door deze id's in de telemetrie van de Azure Cosmos DB-service.

Statuscodes

De meest voorkomende codes die door de server worden geretourneerd voor x-ms-status-code het statuskenmerk, worden hieronder vermeld.

Status Uitleg
401 "Unauthorized: Invalid credentials provided" Foutbericht wordt geretourneerd wanneer het verificatiewachtwoord niet overeenkomt met de accountsleutel van Azure Cosmos DB. Navigeer naar uw Azure Cosmos DB voor Gremlin-account in Azure Portal en controleer of de sleutel juist is.
404 Gelijktijdige bewerkingen die proberen dezelfde rand of hetzelfde hoekpunt tegelijkertijd te verwijderen en bij te werken. Foutbericht "Owner resource does not exist" geeft aan dat de opgegeven database of verzameling in de verbindingsparameters in de /dbs/<database name>/colls/<collection or graph name>-indeling onjuist is.
409 "Conflicting request to resource has been attempted. Retry to avoid conflicts." Dit gebeurt meestal wanneer een hoekpunt of rand met een id al in de graaf bestaat.
412 Statuscode wordt aangevuld met een foutbericht "PreconditionFailedException": One of the specified pre-condition is not met. Deze fout wijst op een optimistische schending van gelijktijdigheidsbeheer tussen het lezen van een rand of hoekpunt en het terugschrijven naar het archief na wijziging. De meest voorkomende situaties waarin deze fout optreedt, is bijvoorbeeld wijziging g.V('identifier').property('name','value')van eigenschappen. De Gremlin-engine zou het hoekpunt lezen, wijzigen en terugschrijven. Als er een andere doorkruising parallel wordt uitgevoerd om hetzelfde hoekpunt of een rand te schrijven, wordt deze fout weergegeven. De toepassing moet traversal opnieuw verzenden naar de server.
429 Aanvraag is vertraagd en moet na de waarde in x-ms-retry-after-ms opnieuw worden geprobeerd
500 Een foutbericht dat "NotFoundException: Entity with the specified id does not exist in the system." bevat, geeft aan dat een database en/of collectie opnieuw is gemaakt met dezelfde naam. Deze fout verdwijnt binnen 5 minuten, omdat wijzigingen caches in verschillende Azure Cosmos DB-onderdelen doorgeven en ongeldig maken. Als u dit probleem wilt voorkomen, gebruikt u telkens een unieke database en collectie.
1000 Deze statuscode wordt geretourneerd wanneer de server een bericht heeft geparseerd, maar niet kon worden uitgevoerd. Dit duidt meestal op een probleem met de query.
1001 Deze code wordt geretourneerd wanneer de server de uitvoering van doorkruising voltooit, maar de reactie op de client niet kan worden geserialiseerd. Deze fout kan optreden wanneer traversal een complex resultaat genereert, dat te groot is of niet voldoet aan de tinkerPop-protocolspecificatie. De toepassing moet de doorkruising vereenvoudigen wanneer deze fout optreedt.
1003 "Query exceeded memory limit. Bytes Consumed: XXX, Max: YYY" wordt geretourneerd wanneer doorkruising de toegestane geheugenlimiet overschrijdt. De geheugenlimiet is 2 GB per doorkruising.
1004 Deze statuscode geeft een onjuiste grafiekaanvraag aan. De aanvraag kan ongeldig zijn wanneer deserialisatie mislukt, wordt het niet-waardetype gedeserialiseerd als waardetype of niet-ondersteunde gremlin-bewerking aangevraagd. De toepassing mag de aanvraag niet opnieuw proberen omdat deze niet lukt.
1007 Meestal wordt deze statuscode geretourneerd met een foutbericht "Could not process request. Underlying connection has been closed.". Deze situatie kan zich voordoen als het clientstuurprogramma probeert een verbinding te gebruiken die door de server wordt gesloten. De toepassing moet de doorkruising opnieuw uitvoeren op een andere verbinding.
1008 Azure Cosmos DB voor Gremlin-server kan verbindingen beëindigen om verkeer in het cluster opnieuw te verdelen. Clientstuurprogramma's moeten deze situatie afhandelen en alleen liveverbindingen gebruiken om aanvragen naar de server te verzenden. Soms kunnen clientstuurprogramma's niet detecteren dat de verbinding is gesloten. Wanneer er een fout optreedt in de toepassing, "Connection is too busy. Please retry after sometime or open more connections." moet er opnieuw worden geprobeerd doorkruising op een andere verbinding uit te voeren.
1009 De bewerking is niet voltooid in de toegewezen tijd en is geannuleerd door de server. Optimaliseer uw doorkruisingen om snel te worden uitgevoerd door hoekpunten of randen te filteren op elke hop van doorkruising om het zoekbereik te beperken. De standaardinstelling voor time-outs voor aanvragen is 60 seconden.

Voorbeelden

Een voorbeeldclienttoepassing op basis van Gremlin.Net die één statuskenmerk leest:

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

Een voorbeeld dat laat zien hoe u het statuskenmerk leest van de Gremlin Java-client:

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

Volgende stappen