Mensaje de error de AWS: actualmente se está ejecutando una operación condicional en conflicto con este recurso


181

Recibo este error de forma intermitente.

Tengo un programa que usa el Java AWS SDK y carga más de 10 miles de archivos pequeños en S3. Veo este error de forma intermitente.

No se pudo encontrar ninguna respuesta útil después de hacer una búsqueda rápida en Internet.

Tenga en cuenta que el programa de llamada es de un solo subproceso. El aws java sdk subyacente parece utilizar hilos de trabajo.

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)

1
¿Estás tratando de poner objetos en S3 y luego leerlos inmediatamente?
jamieb

@jamieb, en realidad no, no en este momento.
user1172468

1
Desearía tener una respuesta para ti. ¿Estás tratando de reescribir las mismas claves en rápida sucesión? S3 se basa en un modelo "eventualmente consistente" donde los PUT necesitan tiempo para establecerse.
jamieb

@jamieb, gracias por pasar ciclos cerebrales, pero creo que la respuesta proporcionada por Guy es correcta. Creo que en mi código vuelvo a intentar crear un cubo, esperando fallar con gracia, me gusta el 99.99% del tiempo y, a veces, arroja este error. De nuevo, realmente aprecio que te hayas tomado el tiempo para ayudarme. ¡Animar!
user1172468

Gracias por el seguimiento. ¡Buena suerte!
jamieb

Respuestas:


464

Recibí el mismo mensaje de error cuando hice lo siguiente:

  1. creó un depósito: fue por defecto a la región de EE. UU. (utilizó AWSCLI)

  2. se dio cuenta de que el depósito debería ir a la región de la UE y eliminarlo (se utilizó la consola de AWS)

  3. (unos minutos más tarde) trató de crear el cubo, especificando la región de la UE

En el paso 3, la consola de AWS me mostró el mensaje de error del título de su pregunta.

Así que supongo que se eliminó el depósito en EE. UU., Pero posiblemente hay algunos procesos de sincronización que están tomando tiempo. Y espero que, esperando unas horas, vuelva a encontrar el nombre del cubo disponible para la creación, esta vez en la región adecuada (UE).

REVISIÓN: - Editar: Aproximadamente una hora más tarde, mi intento de crear el cubo (en la región de la UE) tuvo éxito.


44
Me encontré con la misma situación. Volveré a publicar si puedo crear mi cubo dentro de la próxima hora más o menos.
AJB

27
Puedo confirmar esto. Tomó alrededor de 1,5 horas, y no hay garantía de que alguien más no pueda sacar el nombre del cubo mientras tanto, pero puede recuperarlo parece dentro de un período de tiempo razonable y con un poco de suerte.
AJB

1
Estoy de acuerdo con @jan Para resolver esto: cree un nuevo depósito con un nombre nuevo. No utilice el nombre del depósito eliminado mientras nombra su nuevo depósito.
Dinesh Sunny

55
Para mí me llevó menos de 70 minutos.
offby1

44
Amazon dice que podría tomar hasta 10 horas en foros.aws.amazon.com/thread.jspa?threadID=37532
TomDotTom

37

Para todos los demás que se topan con este hilo de google, como primer resultado en la búsqueda de este mensaje de error:

Si eliminó el bucket, para volver a crear en una nueva región, no espere "manualmente" hasta que se complete esta sincronización de fondo , en su lugar, coloque un pequeño script bash para ejecutar y vuelva a intentar la creación del bucket necesario cada 5 segundos más o menos.

Ejemplo:

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

volverá a intentar la operación "crear depósito" por usted, cada pocos segundos (depende de "dormir") y tan pronto como sea posible, lo creará por usted, para que nadie pueda robarle el nombre del depósito por error :)

Espero eso ayude :)


1
¡Gracias por esto! En mi caso, yo ya tenía la región definida en la configuración de AWS y ejecutar el script como es dado como resultado el error siguiente: UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 17: ordinal not in range(128). La solución fue eliminar la --regionbandera.
MagentoAaron

23

La solicitud en su ejemplo es crear un depósito. Si está intentando crear demasiados cubos o reemplazarlos, no es saludable.

Tenga en cuenta que tiene un límite de 100 depósitos para una cuenta (consulte aquí ). EDITAR: ahora este límite es un "límite suave" y puede aumentarlo si es necesario.

También tenga en cuenta que la creación de un cubo lleva tiempo y:

... no es apropiado hacer que el depósito cree o elimine llamadas en la ruta del código de alta disponibilidad de su aplicación ...

Es mejor crear sus cubos una vez y luego, puede poner tantos objetos como desee en sus cubos existentes (o incluso uno solo).

De todos modos, cuando trabaje con un sistema que está destinado a fallar de vez en cuando, debe ser capaz de manejar los errores y ralentizar su proceso al recibir dicho error. Ver más detalles en Documentos de AWS .


11

Este error generalmente ocurre cuando se elimina un depósito y se crea un nuevo depósito con el mismo nombre que el depósito anterior.

Creo que tendríamos que esperar cierto tiempo hasta que podamos crear un nuevo depósito con el mismo nombre.


8

Simple y directo: cambie el nuevo nombre del depósito o espere 1 hora.


0

También recibe este mensaje cuando ya tiene más de 100 depósitos en la cuenta. Hay un límite suave de 100 cubos.


-1

Cambia el nombre de tu cubo o espera. Esperé menos de 30 minutos para el mío. No necesitaba cambiar el nombre y no pude cambiarlo ya que estaba configurado; tenía que coincidir con mi nombre de dominio ya existente para un sitio web estático que estaba buscando alojar. De todos modos, en menos de 30 minutos se creó automáticamente.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.