AWS-Fehlermeldung: Für diese Ressource wird derzeit eine widersprüchliche bedingte Operation ausgeführt

179

Ich erhalte diesen Fehler zeitweise.

Ich habe ein Programm, das Java Aws SDK verwendet und über Zehntausende kleiner Dateien in S3 lädt. Ich sehe diesen Fehler zeitweise.

Nach einer schnellen Suche im Internet konnte keine hilfreiche Antwort gefunden werden.

Beachten Sie, dass das aufrufende Programm Single-Threaded ist. Das zugrunde liegende aws java sdk scheint Worker-Threads zu verwenden.

Status Code: 409, AWS Service: Amazon S3, AWS Request ID: 75E16E8DE2193CA6, AWS Error Code: OperationAborted, AWS Error Message: A conflicting conditional operation is currently in progress against this resource. Please try again., S3 Extended Request ID: 0uquw2YEoFamLldm+c/p412Lzd8jHJGFBDz3h7wN+/4I0f6hnGLkPMe+5LZazKnZ
    at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:552)
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:289)
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:170)
    at com.amazonaws.services.s3.AmazonS3Client.invoke(AmazonS3Client.java:2648)
    at com.amazonaws.services.s3.AmazonS3Client.createBucket(AmazonS3Client.java:578)
    at com.amazonaws.services.s3.AmazonS3Client.createBucket(AmazonS3Client.java:503)
user1172468
quelle
1
Versuchen Sie, Objekte in S3 einzufügen und sie dann sofort zu lesen?
Jamieb
@ Jamieb, eigentlich nein, derzeit nicht.
user1172468
1
Ich wünschte ich hätte eine Antwort für dich. Versuchen Sie, dieselben Tasten schnell hintereinander neu zu schreiben? S3 basiert auf einem "schließlich konsistenten" Modell, bei dem PUTs Zeit benötigen, um sich niederzulassen.
Jamieb
@ Jamieb, danke, dass du Gehirnzyklen verbracht hast, aber die Antwort von Guy ist richtig, denke ich. Ich denke, in meinem Code versuche ich erneut, einen Bucket zu erstellen - in der Erwartung, dass er ordnungsgemäß fehlschlägt -, der 99,99% der Zeit gefällt und manchmal diesen Fehler auslöst. Nochmals sehr dankbar, dass Sie sich die Zeit genommen haben, mir zu helfen. Jubeln!
user1172468
Vielen Dank für das Follow-up. Viel Glück!
Jamieb

Antworten:

462

Ich habe die gleiche Fehlermeldung erhalten, als ich Folgendes getan habe:

  1. hat einen Bucket erstellt - er wurde standardmäßig in die US-Region verschoben (verwendete AWSCLI)

  2. realisiert, soll der Bucket in die EU-Region gehen und ihn löschen (gebrauchte AWS-Konsole)

  3. (wenige Minuten später) versuchte, den Eimer unter Angabe der EU-Region zu erstellen

In Schritt 3 hat mir die AWS-Konsole die Fehlermeldung vom Titel Ihrer Frage angezeigt.

Ich denke also, dass der Bucket in den USA gelöscht wurde, aber es gibt möglicherweise einige Synchronisationsprozesse, die Zeit in Anspruch nehmen. Und ich hoffe, dass ich nach ein paar Stunden wieder den Namen des Buckets zur Erstellung finden werde - diesmal in der richtigen Region (EU).

UPDATE: - Bearbeiten: Ungefähr eine Stunde später war mein Versuch, den Bucket (in der EU-Region) zu erstellen, erfolgreich.

Jan Vlcinsky
quelle
4
Ich bin gerade in die gleiche Situation geraten. Ich werde zurückschicken, wenn ich meinen Eimer innerhalb der nächsten Stunde oder so erstellen kann.
AJB
27
Ich kann das bestätigen. Es hat ungefähr 1,5 Stunden gedauert, und es gibt keine Garantie, dass jemand anderes den Namen des Eimers in der Zwischenzeit nicht schöpft, aber Sie können ihn innerhalb eines angemessenen Zeitraums und mit etwas Glück zurückbekommen.
AJB
1
Ich stimme @jan zu. Um dies zu lösen: Erstellen Sie einen neuen Bucket mit neuem Namen. Verwenden Sie beim Benennen Ihres neuen Buckets nicht den Namen des gelöschten Buckets.
Dinesh Sunny
5
Für mich dauerte es weniger als 70 Minuten.
offby1
4
Amazon sagt, dass es bis zu 10 Stunden
TomDotTom
37

Für alle anderen, die auf diesen Thread von Google stoßen, als erstes Ergebnis bei der Suche nach dieser Fehlermeldung:

Wenn Sie den Bucket gelöscht haben, um ihn in einer neuen Region neu zu erstellen, warten Sie nicht "manuell", bis diese Hintergrundsynchronisierung abgeschlossen ist. Fügen Sie stattdessen ein kleines Bash-Skript ein, um die erforderliche Bucket-Erstellung etwa alle 5 Sekunden auszuführen und erneut zu versuchen.

Beispiel:

#!/bin/bash 
RESULT=2 
until [  $RESULT -eq 0 ]; do
    aws s3 mb s3://your.bucket.name --region us-west-2
    RESULT=$?
    sleep 5 
done 
echo "Bucket created!"

Es wird alle paar Sekunden den Vorgang "Bucket erstellen" für Sie wiederholen (abhängig von "Schlaf") und sobald es möglich ist - wird es für Sie erstellen, damit niemand versehentlich Ihren Bucket-Namen stehlen kann :)

ich hoffe es hilft :)

Dmitry Shmakov
quelle
1
Danke dafür! In meinem Fall hatte ich bereits die Region in der aws-Konfiguration definiert und das Skript ausgeführt, was zu folgendem Fehler führte : UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 17: ordinal not in range(128). Die Lösung bestand darin, die --regionFlagge zu entfernen .
MagentoAaron
23

In Ihrem Beispiel müssen Sie einen Bucket erstellen. Wenn Sie versuchen, zu viele Eimer zu erstellen oder zu ersetzen, ist dies nicht gesund.

Beachten Sie, dass Sie ein Limit von 100 Buckets für ein Konto haben (siehe hier ). BEARBEITEN: Jetzt ist dieses Limit ein "weiches Limit" und Sie können es bei Bedarf erhöhen.

Beachten Sie auch, dass das Erstellen eines Buckets Zeit benötigt und:

... es ist nicht angebracht, Anrufe im Hochverfügbarkeitscodepfad Ihrer Anwendung zu erstellen oder zu löschen ...

Es ist besser, Ihre Eimer einmal zu erstellen und dann können Sie so viele Objekte, wie Sie möchten, in Ihre vorhandenen Eimer (oder sogar in ein einzelnes) einfügen.

Wenn Sie mit einem System arbeiten, das hin und wieder ausfallen muss, sollten Sie in der Lage sein, Fehler zu behandeln und Ihren Prozess zu verlangsamen, wenn Sie einen solchen Fehler erhalten. Weitere Details finden Sie in AWS Docs .

Kerl
quelle
11

Dieser Fehler tritt normalerweise auf, wenn ein Bucket gelöscht und ein neuer Bucket unter demselben Namen wie der alte Bucket erstellt wird.

Ich glaube, wir müssten eine gewisse Zeit warten, bis wir einen neuen Eimer mit demselben Namen erstellen können.

Srivignesh KN
quelle
8

Einfach und unkompliziert: Ändern Sie den neuen Bucket-Namen oder warten Sie 1 Stunde.

Raphadko
quelle
0

Sie erhalten diese Meldung auch, wenn Sie bereits mehr als 100 Buckets im Konto haben. Es gibt ein weiches Limit von 100 Eimern.

John Mee
quelle
-1

Ändern Sie Ihren Bucket-Namen oder warten Sie. Ich habe weniger als 30 Minuten auf meine gewartet. Ich musste den Namen nicht ändern und konnte ihn nicht ändern, als ich darauf eingestellt war - er musste mit meinem bereits vorhandenen Domainnamen für eine statische Website übereinstimmen, die ich hosten wollte. Wie auch immer, in weniger als 30 Minuten wurde es automatisch erstellt.

vel12171
quelle