BlobStorage – The file exists

Manchmal lässt man sich schnell auf die falsche Fährte führen. Es hat aber auch so gut gepasst. Neues aus Azure …

Da hat meine eine schöne kleine Funktion, die Daten in den Azure Blob Storage schiebt. Die funktioniert immer tadellos. Und an dem Tag, an dem man die neue Version online stellt, die das Ganze in einem Thread erledigt, hat man plötzlich das ganze Log voll mit dem Fehler:

Upload: Fehler beim Upload der Daten in den Blobstorage! Meldung: The file exists.

Doch was will uns dieser Fehler sagen? Die Datei laden wir gerade erst neu hoch, wie kann die denn schon existieren? Na, dann fragen wir mal Google: „Azure Blobstorage the file exists“. Und siehe da: Es gibt sogar ein paar Treffer. Man klickt sich durch die Treffer und findet folgende Aussage:

„This is a known issue with development storage. This happens when there are multiple threads launched to upload the blocks (which constitute the blob)“ (Quelle: StackOverflow)

Okay. Wir befinden uns zwar nicht im DevStorage doch: OMG. Threads nutzen wir ja auch. Problem gefunden. Oder? Nein, leider nicht. Denn die alte Version ohne Threads war zügig online, doch einen Tag später wieder: „The file exists“. Hmm. Meldung der Exception gibt nicht wirklich viel her und immer wenn wir den Service neu bereit stellen geht’s wieder. Also habe ich mal den StackTrace mit dazu gepackt.

Ich hatte den Fehler schon fast vergessen, als wir Anfang der Woche plötzlich wieder damit konfrontiert wurden. Hmm. Der StackTrace. Das sieht nicht so aus, als hätte das was mit Azure zu tun.

at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.Path.GetTempFileName()

Schnell mal in dem Projekt zu der angegebenen Stelle navigiert. Schau an. Hier tritt der Fehler auf: Path.GetTempFileName(). Klarer Fall von Epic Fail. Für eine Konvertierung wurde jedes Mal eine neue Temp Datei angelegt – doch leider nicht mehr gelöscht. Und das verursacht den Fehler? Ja, leider. GetTempFileName bei MSDN

Die GetTempFileName-Methode löst eine IOException aus, wenn sie für die Erstellung von über 65535 Dateien verwendet wurde, ohne dass die vorherigen temporären Dateien gelöscht wurden.

Na, dann wäre das ja auch geklärt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.