Message d'erreur AWS: une opération conditionnelle en conflit est actuellement en cours sur cette ressource

186

J'obtiens cette erreur par intermittence.

J'ai un programme qui utilise le java aws sdk et se charge sur les dizaines de milliers de petits fichiers vers s3. Je vois cette erreur par intermittence.

Impossible de trouver une réponse utile après une recherche rapide sur Internet.

Notez que le programme appelant est à thread unique. Le sdk aws java sous-jacent semble utiliser des threads de travail.

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
la source
1
Essayez-vous de mettre des objets dans S3 et de les lire immédiatement?
jamieb
@jamieb, en fait non, pas pour le moment.
user1172468
1
J'aurais aimé avoir une réponse pour vous. Essayez-vous de réécrire les mêmes touches en succession rapide? S3 est construit sur un modèle «finalement cohérent» où les PUT ont besoin de temps pour s'installer.
jamieb
@jamieb, merci d'avoir passé des cycles cérébraux, mais la réponse fournie par Guy est correcte, je pense. Je pense que dans mon code, je réessaye de créer un seau - en m'attendant à échouer gracieusement - cela fait 99,99% du temps et parfois cela génère cette erreur. Encore une fois, j'apprécie vraiment que vous preniez le temps de m'aider. Acclamation!
user1172468
Merci pour le suivi. Bonne chance!
jamieb

Réponses:

474

J'ai reçu le même message d'erreur lorsque j'ai suivi:

  1. a créé un bucket - il est allé par défaut dans la région des États-Unis (AWSCLI utilisé)

  2. réalisé, le bucket doit aller dans la région de l'UE et l'a supprimé (console AWS utilisée)

  3. (quelques minutes plus tard) a tenté de créer le bucket, en spécifiant la région UE

À l'étape 3, la console AWS m'a montré le message d'erreur du titre de votre question.

Je suppose donc que le seau aux États-Unis a été supprimé, mais il y a peut-être des processus de synchronisation, qui prennent du temps. Et j'espère qu'en attendant quelques heures, je trouverai le nom du seau à nouveau disponible pour la création - cette fois dans la région (UE) appropriée.

CORRECTIF: - Edit: Environ une heure plus tard, ma tentative de création du bucket (dans la région UE) a réussi.

Jan Vlcinsky
la source
4
Je viens de rencontrer la même situation. Je publierai si je peux créer mon bucket dans l'heure qui suit.
AJB
27
Je peux le confirmer. Cela a pris environ 1,5 heure et il n'y a aucune garantie que quelqu'un d'autre ne récupérera pas le nom du seau entre-temps, mais vous pouvez le récupérer, semble-t-il dans un délai raisonnable, et avec un peu de chance.
AJB
1
Je suis d'accord avec @jan Pour résoudre ce problème: créez un nouveau compartiment avec un nouveau nom, n'utilisez pas le nom du compartiment supprimé lorsque vous nommez votre nouveau compartiment.
Dinesh Sunny
5
Pour moi, cela a pris moins de 70 minutes.
offby1
4
Amazon dit que cela pourrait prendre jusqu'à 10 heures forums.aws.amazon.com/thread.jspa?threadID=37532
TomDotTom
37

Pour tous les autres qui tombent sur ce fil de Google, comme premier résultat dans la recherche de ce message d'erreur:

Si vous avez supprimé le bucket, pour recréer dans une nouvelle région, n'attendez pas "manuellement" jusqu'à ce que cette synchronisation en arrière-plan soit terminée , mettez plutôt un petit script bash à exécuter et réessayez la création du bucket nécessaire toutes les 5 secondes environ.

Exemple:

#!/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!"

il réessaiera l'opération "create bucket" pour vous, toutes les quelques secondes (dépendra de 'sleep') et dès que possible - le créera pour vous, donc personne ne peut voler votre nom de bucket par erreur :)

J'espère que cela aide :)

Dmitry Shmakov
la source
1
Merci pour cela! Dans mon exemple, j'avais déjà la région définie dans la configuration SSFE et l' exécution du script est entraîné l'erreur suivante: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 17: ordinal not in range(128). La solution était de retirer le --regiondrapeau.
MagentoAaron
23

La demande dans votre exemple consiste à créer un bucket. Si vous essayez de créer trop de compartiments ou de remplacer des compartiments, cela n'est pas sain.

Notez que vous avez une limite de 100 buckets pour un compte (voir ici ). EDIT: Maintenant, cette limite est une "limite souple" et vous pouvez l'augmenter si nécessaire.

Notez également que la création d'un bucket prend du temps et:

... il n'est pas approprié de faire créer ou supprimer des appels de bucket sur le chemin du code haute disponibilité de votre application ...

Il est préférable de créer vos seaux une fois et ensuite, vous pouvez mettre autant d'objets que vous le souhaitez dans vos seaux existants (ou même un seul).

Quoi qu'il en soit, lorsque vous travaillez avec un système qui est voué à l'échec de temps en temps, vous devriez être en mesure de gérer les erreurs et de ralentir votre processus lorsque vous recevez une telle erreur. Consultez plus de détails dans AWS Docs .

Gars
la source
11

Cette erreur se produit généralement lorsqu'un bucket est supprimé et qu'un nouveau bucket est créé avec le même nom que l'ancien bucket.

Je pense que nous devrons attendre un certain temps avant de pouvoir créer un nouveau seau portant le même nom.

Srivignesh KN
la source
9

Simple et direct: modifiez le nouveau nom du bucket ou attendez 1 heure.

Raphadko
la source
0

Vous recevez également ce message lorsque vous avez déjà plus de 100 buckets dans le compte. Il existe une limite souple de 100 seaux.

John Mee
la source
-1

Modifiez le nom de votre bucket ou attendez. J'ai attendu moins de 30 minutes pour le mien. Je n'avais pas besoin de changer le nom et je ne pouvais pas le changer car j'étais défini dessus - il devait correspondre à mon nom de domaine déjà existant pour un site Web statique que je cherchais à héberger. Quoi qu'il en soit, en moins de 30 minutes, il a été créé automatiquement.

vel12171
la source