2017-06-05 2 views
0

In den letzten 4 Stunden habe ich über 200 Anfragen fehlgeschlagen auf azurblauen Tabelle Berichterstattung 409. Ich habe mich umgesehen und das bedeutet PK-Duplizierung. Da dies eine Tabelle für die Protokollierung spezifisch ist, ist mir egal wirklich nicht über die Schlüssel so meine RowKeyGuid.NewGuid() ist ...Azure Table Service - 409 Fehler überall

Gibt es einen anderen Grund für die azur Tisch ein 409 oder ich kollidiert bin tatsächlich nicht zu sehen UUIDs zurück?

PS: Ich hoffe wirklich, dass ein weiterer Grund gibt es, weil auf den letzten 4 Stunden, die ich nur 50k Anfragen behandelt habe ...

+0

Nach (dies) [https://docs.microsoft.com/en-us/rest/api/storageservices/Table-Service-Error-Codes?redirectedfrom=MSDN] kann es 2 andere Dinge sein: TableBeingDeleted oder TableAlreadyExists –

Antwort

1

Wahrscheinlich Ihr Kunde nicht sehen, die HTTP-200-Antwort eine erfolgreiche Einfügung anzeigt (Client Timeout, Netzwerkfehler, usw.), aber die Einfügung ist erfolgreich auf der Serverseite geschehen. Wenn der Client die Operation erneut ausgeführt hat, erhielt er eine 409, da die Entität bereits auf dem Server vorhanden war.

Sie können dies in den Storage Analytics-Protokollen sehen, wenn Sie diese aktivieren.

Sie können versuchen, den anfänglichen Clientfehler zu beheben, aber das löst letztendlich nicht das Problem, da Sie diese Art von Fehler ohnehin behandeln müssen. Da Sie nur Protokolldaten schreiben, ist Ihnen der 409 beim erneuten Versuch wahrscheinlich egal, also ist es die beste Lösung, ihn einfach zu ignorieren. Andere mögliche Lösungen sind die Verwendung der Operationen 'Einfügen oder Ersetzen' oder 'Einfügen oder Zusammenführen' anstatt nur eines Einfügens.

Für weitere Informationen siehe https://github.com/Azure/azure-storage-java/issues/35 oder https://social.msdn.microsoft.com/Forums/azure/en-US/9ab80192-6450-41c2-a964-4ea092c1f6ef/table-storage-handling-retry-error-where-item-already-exists?forum=windowsazuredata.

0

Wenn Sie schneller als die Uhr Guid.NewGuid() anrufen, kann es die gleiche Guid generieren. Versuchen Sie, ein paar Millisekunden zwischen Guid.NewGuid() Anrufe zu setzen.